Add generic object reference models
This commit is contained in:
@@ -4,11 +4,13 @@ from dns_sync.adapters import (
|
||||
CERTIFICATES,
|
||||
DNS_RECORDS,
|
||||
PROXY_HOSTS,
|
||||
ApplyResult,
|
||||
Capability,
|
||||
CapabilityOperation,
|
||||
Endpoint,
|
||||
EndpointPlan,
|
||||
NormalizedObject,
|
||||
ObjectReference,
|
||||
Observation,
|
||||
PlanAction,
|
||||
PlanOperation,
|
||||
@@ -53,6 +55,104 @@ class CapabilityTests(unittest.TestCase):
|
||||
)
|
||||
|
||||
|
||||
class ObjectReferenceTests(unittest.TestCase):
|
||||
def test_endpoint_local_reference_is_app_agnostic(self):
|
||||
reference = ObjectReference(
|
||||
relation="Certificate",
|
||||
object_type="Certificates",
|
||||
local_key=" 67 ",
|
||||
)
|
||||
|
||||
self.assertEqual(reference.relation, "certificate")
|
||||
self.assertEqual(reference.object_type, CERTIFICATES)
|
||||
self.assertEqual(reference.local_key, "67")
|
||||
self.assertIsNone(reference.logical_key)
|
||||
|
||||
def test_logical_reference_does_not_contain_local_id(self):
|
||||
reference = ObjectReference(
|
||||
relation="certificate",
|
||||
object_type=CERTIFICATES,
|
||||
logical_key="chaptarr.loxthelion.com",
|
||||
)
|
||||
|
||||
self.assertIsNone(reference.local_key)
|
||||
self.assertEqual(
|
||||
reference.logical_key,
|
||||
"chaptarr.loxthelion.com",
|
||||
)
|
||||
|
||||
def test_reference_requires_exactly_one_identity(self):
|
||||
with self.assertRaisesRegex(
|
||||
ValueError,
|
||||
"exactly one",
|
||||
):
|
||||
ObjectReference(
|
||||
relation="certificate",
|
||||
object_type=CERTIFICATES,
|
||||
)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
ValueError,
|
||||
"exactly one",
|
||||
):
|
||||
ObjectReference(
|
||||
relation="certificate",
|
||||
object_type=CERTIFICATES,
|
||||
local_key="67",
|
||||
logical_key="chaptarr.loxthelion.com",
|
||||
)
|
||||
|
||||
def test_reference_rejects_empty_fields(self):
|
||||
with self.assertRaisesRegex(ValueError, "relation"):
|
||||
ObjectReference(
|
||||
relation="",
|
||||
object_type=CERTIFICATES,
|
||||
local_key="67",
|
||||
)
|
||||
|
||||
with self.assertRaisesRegex(ValueError, "local_key"):
|
||||
ObjectReference(
|
||||
relation="certificate",
|
||||
object_type=CERTIFICATES,
|
||||
local_key=" ",
|
||||
)
|
||||
|
||||
|
||||
class ApplyResultTests(unittest.TestCase):
|
||||
def test_result_carries_adapter_assigned_local_key(self):
|
||||
applied = NormalizedObject(
|
||||
object_type=CERTIFICATES,
|
||||
logical_key="chaptarr.loxthelion.com",
|
||||
local_key="68",
|
||||
payload={
|
||||
"domain_names": ["chaptarr.loxthelion.com"],
|
||||
},
|
||||
)
|
||||
|
||||
result = ApplyResult(
|
||||
object=applied,
|
||||
detail=" created ",
|
||||
)
|
||||
|
||||
self.assertEqual(result.object.local_key, "68")
|
||||
self.assertEqual(result.detail, "created")
|
||||
|
||||
def test_result_rejects_object_without_local_key(self):
|
||||
desired = NormalizedObject(
|
||||
object_type=CERTIFICATES,
|
||||
logical_key="chaptarr.loxthelion.com",
|
||||
payload={
|
||||
"domain_names": ["chaptarr.loxthelion.com"],
|
||||
},
|
||||
)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
ValueError,
|
||||
"endpoint-local key",
|
||||
):
|
||||
ApplyResult(object=desired)
|
||||
|
||||
|
||||
class ObservationAndPlanTests(unittest.TestCase):
|
||||
def test_local_objects_can_share_one_logical_identity(self):
|
||||
first = NormalizedObject(
|
||||
|
||||
Reference in New Issue
Block a user