From 9a347f8c808c74830b5f6295fc27af9f19cfe9f6 Mon Sep 17 00:00:00 2001 From: Srinivasa Consultants <78673153+dinakarjs@users.noreply.github.com> Date: Sat, 17 Oct 2026 00:19:45 +0530 Subject: [PATCH] test: close OPA adapter review coverage gaps Signed-off-by: Srinivasa Dinakar <78673153+dinakarjs@users.noreply.github.com> --- tests/test_adapters.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/test_adapters.py b/tests/test_adapters.py index 14b879d..e89791b 100644 --- a/tests/test_adapters.py +++ b/tests/test_adapters.py @@ -195,6 +195,29 @@ def test_opa_requires_object_labels(self): "labels": labels}) self.assertEqual(str(caught.exception), "OPA labels must be an object") + def test_opa_rejects_invalid_ids_elements(self): + for ids in ([123], [""], ["valid", 123], ["valid", ""]): + with self.subTest(ids=ids): + with self.assertRaises(ValueError) as caught: + self.opa_event({"decision_id": "d-1", "result": True, "ids": ids}) + self.assertEqual(str(caught.exception), + "OPA ids must be an array of non-empty strings") + + def test_opa_preserves_challenge_and_error_mapper_results(self): + for decision in ("challenge", "error"): + with self.subTest(decision=decision): + event = self.opa_event( + {"decision_id": "d-1", "result": {}}, + result_mapper=lambda value, decision=decision: decision, + ) + self.assertEqual(event["decision"], decision) + self.assertNotIn("result", event) + + def test_opa_missing_result_maps_to_not_applicable(self): + event = self.opa_event({"decision_id": "d-1"}) + self.assertEqual(event["decision"], "not_applicable") + self.assertNotIn("result", event) + def test_opa_requires_version_when_not_supplied_explicitly(self): for labels in ({}, {"version": ""}, {"version": 123}): with self.subTest(labels=labels):