Skip to content

Commit 6a4c428

Browse files
committed
VED-350: improve coverage for form_json generic utils
1 parent 5df4be2 commit 6a4c428

File tree

2 files changed

+60
-33
lines changed

2 files changed

+60
-33
lines changed

backend/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,10 @@ package: build
88
test:
99
@PYTHONPATH=src:tests python -m unittest
1010

11+
coverage-run:
12+
@PYTHONPATH=src:tests coverage run -m unittest discover
13+
14+
coverage-report:
15+
coverage report -m
16+
1117
.PHONY: build package test

backend/tests/utils/generic_utils.py

Lines changed: 54 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -94,48 +94,69 @@ def update_contained_resource_field(
9494
return json_data
9595

9696

97+
import unittest
98+
99+
# from your_module import form_json # <-- import your function
100+
97101
class TestFormJson(unittest.TestCase):
98102
def setUp(self):
99103
self.baseurl = "https://api.service.nhs.uk/immunisation-fhir-api/Immunization"
100104
self.identifier = "abc123"
105+
# matches your repo wrapper shape
101106
self.response = {
102-
"resource": {"resourceType": "Immunization", "id": "abc123"},
107+
"resource": {"resourceType": "Immunization", "id": "abc123", "status": "completed"},
103108
"id": "abc123",
104-
"version": 1,
109+
"version": 2,
105110
}
106111

107112
def test_no_response(self):
108-
result = form_json(None, None, self.identifier, self.baseurl)
109-
self.assertEqual(result["total"], 0)
110-
self.assertEqual(result["entry"], [])
111-
self.assertIn("link", result)
112-
113-
def test_identifier_only(self):
114-
result = form_json(self.response, None, self.identifier, self.baseurl)
115-
self.assertEqual(result["total"], 1)
116-
self.assertEqual(result["entry"][0]["resource"], self.response["resource"])
117-
self.assertEqual(result["entry"][0]["fullUrl"],
118-
f"{self.baseurl}/{self.response['id']}")
119-
120-
def test_identifier_with_id_element(self):
121-
result = form_json(self.response, "id", self.identifier, self.baseurl)
122-
resource = result["entry"][0]["resource"]
123-
self.assertEqual(resource["resourceType"], "Immunization")
124-
self.assertEqual(resource["id"], self.response["id"])
125-
self.assertNotIn("meta", resource)
126-
127-
def test_identifier_with_meta_element(self):
128-
result = form_json(self.response, "meta", self.identifier, self.baseurl)
129-
resource = result["entry"][0]["resource"]
130-
self.assertEqual(resource["resourceType"], "Immunization")
131-
self.assertEqual(resource["id"], self.response["id"])
132-
self.assertEqual(resource["meta"]["versionId"], str(self.response["version"]))
133-
134-
def test_identifier_with_id_and_meta_elements(self):
135-
result = form_json(self.response, "id,meta", self.identifier, self.baseurl)
136-
resource = result["entry"][0]["resource"]
137-
self.assertEqual(resource["id"], self.response["id"])
138-
self.assertEqual(resource["meta"]["versionId"], str(self.response["version"]))
113+
out = form_json(None, None, self.identifier, self.baseurl)
114+
self.assertEqual(out["resourceType"], "Bundle")
115+
self.assertEqual(out["type"], "searchset")
116+
self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}")
117+
self.assertEqual(out["entry"], [])
118+
self.assertEqual(out["total"], 0)
119+
120+
def test_identifier_only_returns_full_resource(self):
121+
out = form_json(self.response, None, self.identifier, self.baseurl)
122+
self.assertEqual(out["total"], 1)
123+
self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}")
124+
self.assertDictEqual(out["entry"][0]["resource"], self.response["resource"])
125+
self.assertEqual(out["entry"][0]["fullUrl"], f"{self.baseurl}/{self.response['id']}")
126+
127+
def test_identifier_with_id_element_truncates_to_id(self):
128+
out = form_json(self.response, "id", self.identifier, self.baseurl)
129+
res = out["entry"][0]["resource"]
130+
self.assertEqual(out["total"], 1)
131+
self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements=id")
132+
self.assertEqual(res["resourceType"], "Immunization")
133+
self.assertEqual(res["id"], self.response["id"])
134+
self.assertNotIn("meta", res)
135+
136+
def test_identifier_with_meta_element_truncates_to_meta(self):
137+
out = form_json(self.response, "meta", self.identifier, self.baseurl)
138+
res = out["entry"][0]["resource"]
139+
self.assertEqual(out["total"], 1)
140+
self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements=meta")
141+
self.assertEqual(res["resourceType"], "Immunization")
142+
self.assertEqual(res["id"], self.response["id"])
143+
self.assertIn("meta", res)
144+
self.assertEqual(res["meta"]["versionId"], str(self.response["version"]))
145+
146+
def test_identifier_with_id_and_meta_elements_truncates_both(self):
147+
out = form_json(self.response, "id,meta", self.identifier, self.baseurl)
148+
res = out["entry"][0]["resource"]
149+
self.assertEqual(out["total"], 1)
150+
self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements=id,meta")
151+
self.assertEqual(res["resourceType"], "Immunization")
152+
self.assertEqual(res["id"], self.response["id"])
153+
self.assertEqual(res["meta"]["versionId"], str(self.response["version"]))
154+
155+
def test_elements_whitespace_and_case_are_handled(self):
156+
out = form_json(self.response, " ID , MeTa ", self.identifier, self.baseurl)
157+
res = out["entry"][0]["resource"]
158+
self.assertEqual(res["id"], self.response["id"])
159+
self.assertEqual(res["meta"]["versionId"], str(self.response["version"]))
139160

140161
if __name__ == "__main__":
141162
unittest.main()

0 commit comments

Comments
 (0)