More test coverage (71%)
This commit is contained in:
parent
9a2516d858
commit
f82fd894ca
8 changed files with 605 additions and 10 deletions
83
tests/test_diff_notifications.py
Normal file
83
tests/test_diff_notifications.py
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import types
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
def test_post_webhook_success(monkeypatch):
|
||||
from enroll.diff import post_webhook
|
||||
|
||||
class FakeResp:
|
||||
status = 204
|
||||
|
||||
def read(self):
|
||||
return b"OK"
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc, tb):
|
||||
return False
|
||||
|
||||
monkeypatch.setattr(
|
||||
"enroll.diff.urllib.request.urlopen",
|
||||
lambda req, timeout=30: FakeResp(),
|
||||
)
|
||||
|
||||
status, body = post_webhook("https://example.com", b"x")
|
||||
assert status == 204
|
||||
assert body == "OK"
|
||||
|
||||
|
||||
def test_post_webhook_raises_on_error(monkeypatch):
|
||||
from enroll.diff import post_webhook
|
||||
|
||||
def boom(_req, timeout=30):
|
||||
raise OSError("nope")
|
||||
|
||||
monkeypatch.setattr("enroll.diff.urllib.request.urlopen", boom)
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
post_webhook("https://example.com", b"x")
|
||||
|
||||
|
||||
def test_send_email_uses_sendmail_when_present(monkeypatch):
|
||||
from enroll.diff import send_email
|
||||
|
||||
calls = {}
|
||||
|
||||
monkeypatch.setattr("enroll.diff.shutil.which", lambda name: "/usr/sbin/sendmail")
|
||||
|
||||
def fake_run(argv, input=None, check=False, **_kwargs):
|
||||
calls["argv"] = argv
|
||||
calls["input"] = input
|
||||
return types.SimpleNamespace(returncode=0)
|
||||
|
||||
monkeypatch.setattr("enroll.diff.subprocess.run", fake_run)
|
||||
|
||||
send_email(
|
||||
subject="Subj",
|
||||
body="Body",
|
||||
from_addr="a@example.com",
|
||||
to_addrs=["b@example.com"],
|
||||
)
|
||||
|
||||
assert calls["argv"][0].endswith("sendmail")
|
||||
msg = (calls["input"] or b"").decode("utf-8", errors="replace")
|
||||
assert "Subject: Subj" in msg
|
||||
assert "To: b@example.com" in msg
|
||||
|
||||
|
||||
def test_send_email_raises_when_no_delivery_method(monkeypatch):
|
||||
from enroll.diff import send_email
|
||||
|
||||
monkeypatch.setattr("enroll.diff.shutil.which", lambda name: None)
|
||||
|
||||
with pytest.raises(RuntimeError):
|
||||
send_email(
|
||||
subject="Subj",
|
||||
body="Body",
|
||||
from_addr="a@example.com",
|
||||
to_addrs=["b@example.com"],
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue