"""Tests for company shared-MX DNS onboarding.""" from unittest.mock import patch from app.services.dns_verification import verify_company_dns from app.services.domain_provisioning import ( build_company_dns_records, build_shared_mx_spf_value, register_relay_domain, ) def test_build_company_dns_records_use_shared_mx_and_spf_include(): records = build_company_dns_records( "acme.com", "mail.getall.help", "agmail", "abc123public", "_spf.getall.help", ) purposes = [record["purpose"] for record in records] assert purposes == ["mx", "spf", "dkim", "dmarc"] mx = next(record for record in records if record["purpose"] == "mx") spf = next(record for record in records if record["purpose"] == "spf") dkim = next(record for record in records if record["purpose"] == "dkim") assert mx["host"] == "@" assert mx["value"] == "mail.getall.help" assert mx["priority"] == 10 assert spf["value"] == "v=spf1 include:_spf.getall.help ~all" assert dkim["host"] == "agmail._domainkey" assert "abc123public" in dkim["value"] assert not any(record.get("purpose") == "mail_host" for record in records) def test_build_shared_mx_spf_value(): assert build_shared_mx_spf_value("_spf.getall.help") == ( "v=spf1 include:_spf.getall.help ~all" ) def test_register_relay_domain_appends_once(tmp_path, monkeypatch): relay_file = tmp_path / "domains.list" monkeypatch.setenv("RELAY_DOMAINS_FILE", str(relay_file)) from app.config import get_settings get_settings.cache_clear() register_relay_domain("Acme.COM") register_relay_domain("acme.com") assert relay_file.read_text(encoding="utf-8") == "acme.com\n" get_settings.cache_clear() @patch("app.services.dns_verification._lookup_a") @patch("app.services.dns_verification._lookup_mx") @patch("app.services.dns_verification._lookup_txt") def test_verify_company_dns_all_pass(mock_txt, mock_mx, mock_a): mock_mx.return_value = [(10, "mail.getall.help")] mock_a.return_value = ["38.180.106.242"] mock_txt.side_effect = lambda name: { "acme.com": ['v=spf1 include:_spf.getall.help ~all'], "_spf.getall.help": ["v=spf1 ip4:38.180.106.242 ~all"], "agmail._domainkey.acme.com": ["v=DKIM1; k=rsa; p=abc123"], "_dmarc.acme.com": ["v=DMARC1; p=quarantine; rua=mailto:dmarc@acme.com"], }.get(name, []) checks = verify_company_dns( domain_name="acme.com", shared_mail_host="mail.getall.help", dkim_selector="agmail", dkim_public_key="abc123", platform_spf_include="_spf.getall.help", ) assert all(check["verified"] for check in checks) assert [check["purpose"] for check in checks] == [ "mx", "spf", "platform_spf", "dkim", "dmarc", ]