|
| 1 | +"""Generic utils for tests""" |
| 2 | + |
| 3 | + |
| 4 | +import unittest |
| 5 | +from src.models.utils.generic_utils import form_json |
| 6 | + |
| 7 | + |
| 8 | +class TestFormJson(unittest.TestCase): |
| 9 | + def setUp(self): |
| 10 | + self.baseurl = "https://api.service.nhs.uk/immunisation-fhir-api/Immunization" |
| 11 | + self.identifier = "https://supplierABC/identifiers/vacc|f10b59b3-fc73-4616-99c9-9e882ab31184" |
| 12 | + self.response = { |
| 13 | + "resource": {"resourceType": "Immunization", "id": "f10b59b3-fc73-4616-99c9-9e882ab31184", "status": "completed"}, |
| 14 | + "id": "f10b59b3-fc73-4616-99c9-9e882ab31184", |
| 15 | + "version": 2, |
| 16 | + } |
| 17 | + |
| 18 | + def test_no_response(self): |
| 19 | + out = form_json(None, None, self.identifier, self.baseurl) |
| 20 | + self.assertEqual(out["resourceType"], "Bundle") |
| 21 | + self.assertEqual(out["type"], "searchset") |
| 22 | + self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}") |
| 23 | + self.assertEqual(out["entry"], []) |
| 24 | + self.assertEqual(out["total"], 0) |
| 25 | + |
| 26 | + def test_identifier_only_returns_full_resource(self): |
| 27 | + out = form_json(self.response, None, self.identifier, self.baseurl) |
| 28 | + self.assertEqual(out["total"], 1) |
| 29 | + self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}") |
| 30 | + self.assertDictEqual(out["entry"][0]["resource"], self.response["resource"]) |
| 31 | + self.assertEqual(out["entry"][0]["fullUrl"], f"{self.baseurl}/{self.response['id']}") |
| 32 | + |
| 33 | + def test_identifier_with_id_element_truncates_to_id(self): |
| 34 | + out = form_json(self.response, "id", self.identifier, self.baseurl) |
| 35 | + res = out["entry"][0]["resource"] |
| 36 | + self.assertEqual(out["total"], 1) |
| 37 | + self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements=id") |
| 38 | + self.assertEqual(res["resourceType"], "Immunization") |
| 39 | + self.assertEqual(res["id"], self.response["id"]) |
| 40 | + self.assertNotIn("meta", res) |
| 41 | + |
| 42 | + def test_identifier_with_meta_element_truncates_to_meta(self): |
| 43 | + out = form_json(self.response, "meta", self.identifier, self.baseurl) |
| 44 | + res = out["entry"][0]["resource"] |
| 45 | + self.assertEqual(out["total"], 1) |
| 46 | + self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements=meta") |
| 47 | + self.assertEqual(res["resourceType"], "Immunization") |
| 48 | + self.assertEqual(res["id"], self.response["id"]) |
| 49 | + self.assertIn("meta", res) |
| 50 | + self.assertEqual(res["meta"]["versionId"], self.response["version"]) |
| 51 | + |
| 52 | + def test_identifier_with_id_and_meta_elements_truncates_both(self): |
| 53 | + out = form_json(self.response, "id,meta", self.identifier, self.baseurl) |
| 54 | + res = out["entry"][0]["resource"] |
| 55 | + self.assertEqual(out["total"], 1) |
| 56 | + self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements=id,meta") |
| 57 | + self.assertEqual(res["resourceType"], "Immunization") |
| 58 | + self.assertEqual(res["id"], self.response["id"]) |
| 59 | + self.assertIn("meta", res) |
| 60 | + self.assertEqual(res["meta"]["versionId"], self.response["version"]) |
| 61 | + |
| 62 | + def test_elements_whitespace_and_case_are_handled(self): |
| 63 | + raw_elements = " ID , MeTa " |
| 64 | + out = form_json(self.response, raw_elements, self.identifier, self.baseurl) |
| 65 | + res = out["entry"][0]["resource"] |
| 66 | + self.assertEqual( |
| 67 | + out["link"][0]["url"], |
| 68 | + f"{self.baseurl}?identifier={self.identifier}&_elements={raw_elements}" |
| 69 | + ) |
| 70 | + self.assertEqual(res["id"], self.response["id"]) |
| 71 | + self.assertEqual(res["meta"]["versionId"], self.response["version"]) |
0 commit comments