@@ -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+
97101class 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
140161if __name__ == "__main__" :
141162 unittest .main ()
0 commit comments