Files
mailcat/tests/test_manage_routes_web.py
T
wienen ae0813d519 Add route management web interface
Prompts used since previous commit:
- Kun je ook een webinterface maken waarmee ik de regels kan beheren?
- Ik wil dat de webinterface benaderbaar is vanaf mijn hele interne netwerk. En ik wil alle regels kunnen beheren. Dus ook de bestaande ingebouwde routes.
- 1. basic auth
- 2. 4321

Special observations:
- Domain routes moved from Python source to domain_routes.json so the web UI can manage all previous built-in domain routes.
- web_config.json remains ignored; live sorter processes must be restarted after route edits to pick up changed rules.
2026-07-05 00:19:53 +02:00

52 lines
2.0 KiB
Python

import base64
import json
import tempfile
import unittest
from pathlib import Path
from manage_routes_web import basic_auth_ok, load_routes, save_routes, validate_routes
class ManageRoutesWebTests(unittest.TestCase):
def test_validate_routes_normalizes_domains_and_mailbox(self):
routes = validate_routes([
{"domains": [" Example.COM ", "example.com"], "mailbox": " Diensten.Test "}
])
self.assertEqual(routes, [{"domains": ["example.com"], "mailbox": "Diensten.Test"}])
def test_validate_routes_rejects_duplicate_domain_across_routes(self):
with self.assertRaisesRegex(ValueError, "already used"):
validate_routes([
{"domains": ["example.com"], "mailbox": "Diensten.Een"},
{"domains": ["EXAMPLE.com"], "mailbox": "Diensten.Twee"},
])
def test_save_routes_writes_backup_and_normalized_json(self):
with tempfile.TemporaryDirectory() as tmp:
path = Path(tmp) / "domain_routes.json"
path.write_text(
json.dumps([{"domains": ["old.example"], "mailbox": "Diensten.Oud"}]) + "\n",
encoding="utf-8",
)
saved = save_routes(
[{"domains": [" New.EXAMPLE "], "mailbox": " Diensten.Nieuw "}],
path,
)
self.assertEqual(saved, [{"domains": ["new.example"], "mailbox": "Diensten.Nieuw"}])
self.assertEqual(load_routes(path), saved)
backup = path.with_suffix(".json.bak")
self.assertTrue(backup.exists())
self.assertIn("old.example", backup.read_text(encoding="utf-8"))
def test_basic_auth_ok_accepts_exact_credentials(self):
token = base64.b64encode(b"mailcat:secret").decode("ascii")
self.assertTrue(basic_auth_ok(f"Basic {token}", "mailcat", "secret"))
self.assertFalse(basic_auth_ok(f"Basic {token}", "mailcat", "wrong"))
self.assertFalse(basic_auth_ok(None, "mailcat", "secret"))
if __name__ == "__main__":
unittest.main()