Files
grotti/tests/test_meldung.py
T
Dominic Gundel db6a85a703 Grotti 3.7.0: Treiber für Kobra 4 und Marlin, smartere Dateien-Auswahl und einstellbare Etiketten.
Senden und Abbruch laufen über den Treiber, Orca-Doppelzeilen und tote Ideen-API fallen weg, Drucker folgen der Datei, Etikettenformat liegt in den Einstellungen.
2026-11-02 14:03:57 +01:00

66 lines
1.9 KiB
Python

"""Problem-Meldungen: Relay und Antwort, ohne echten Forgejo."""
import json
import sys
import unittest
from pathlib import Path
from unittest import mock
from urllib.error import HTTPError, URLError
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
from grotti import meldung
class RelayTests(unittest.TestCase):
def test_relay_ok(self):
cfg = {"_raw": {"meldung_relay": "http://127.0.0.1/hooks/grotti-meldung"}}
class Resp:
def read(self):
return b'{"url":"https://git.example/issues/1"}'
def __enter__(self):
return self
def __exit__(self, *args):
return False
with mock.patch("urllib.request.urlopen", return_value=Resp()) as opener:
ok, message = meldung.send_relay(cfg, {"text": "kaputt", "version": "1"})
self.assertTrue(ok)
self.assertIn("issues/1", message)
request = opener.call_args[0][0]
body = json.loads(request.data.decode("utf-8"))
self.assertEqual(body["text"], "kaputt")
self.assertNotIn("username", body)
def test_relay_down(self):
cfg = {"_raw": {"meldung_relay": "http://127.0.0.1:9/hooks"}}
with mock.patch("urllib.request.urlopen", side_effect=URLError("down")):
ok, message = meldung.send_relay(cfg, {"text": "x"})
self.assertFalse(ok)
self.assertIn("nicht erreichbar", message)
def test_relay_http_error(self):
cfg = {"_raw": {"meldung_relay": "http://example/hooks"}}
class Fake(HTTPError):
def __init__(self):
pass
def read(self):
return b"nope"
code = 502
with mock.patch("urllib.request.urlopen", side_effect=Fake()):
ok, message = meldung.send_relay(cfg, {"text": "x"})
self.assertFalse(ok)
self.assertIn("502", message)
if __name__ == "__main__":
unittest.main()