diff --git a/ampg/dns.py b/ampg/dns.py index a73799e..410e9c1 100644 --- a/ampg/dns.py +++ b/ampg/dns.py @@ -1023,13 +1023,18 @@ class NamecheapDNSProvider: for element in root.iter(): if _xml_localname(element.tag) != "host": continue + record_type = (element.get("Type") or "").upper() records.append( ProviderDNSRecord( name=element.get("Name") or "@", - type=(element.get("Type") or "").upper(), + type=record_type, value=element.get("Address") or "", ttl=int(element.get("TTL") or DEFAULT_TTL), - mx_pref=_optional_int(element.get("MXPref")), + mx_pref=( + _optional_int(element.get("MXPref")) + if record_type == "MX" + else None + ), ) ) return DNSZoneSnapshot( diff --git a/tests/test_dns_manifest.py b/tests/test_dns_manifest.py index 54e5070..30a622e 100644 --- a/tests/test_dns_manifest.py +++ b/tests/test_dns_manifest.py @@ -5,7 +5,7 @@ from pathlib import Path import tempfile import unittest -from ampg.dns import DNSZoneSnapshot, ProviderDNSRecord +from ampg.dns import DNSZoneSnapshot, NamecheapDNSProvider, ProviderDNSRecord from ampg.dns_manifest import ( load_dns_manifest, merge_dns_manifest_records, @@ -60,6 +60,29 @@ class FakeProvider: self.records = tuple(records) +class NamecheapProviderTests(unittest.TestCase): + def test_non_mx_preference_placeholder_is_ignored(self): + response = """\ + + + + + + + + +""" + provider = NamecheapDNSProvider.__new__(NamecheapDNSProvider) + provider._request = lambda _command, _params: response + provider._domain_params = lambda _domain: {"SLD": "example", "TLD": "test"} + + snapshot = provider.get_hosts("example.test") + + self.assertEqual("ok", snapshot.status) + self.assertIsNone(snapshot.records[0].mx_pref) + self.assertEqual(20, snapshot.records[1].mx_pref) + + class DNSManifestTests(unittest.TestCase): def setUp(self): self.temporary = tempfile.TemporaryDirectory()