Skip to content

Commit 7fbc81b

Browse files
committed
NRL-1053 add unit tests
1 parent 656bfad commit 7fbc81b

File tree

8 files changed

+360
-5
lines changed

8 files changed

+360
-5
lines changed

api/consumer/searchDocumentReference/tests/test_search_document_reference_consumer.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,47 @@ def test_search_document_reference_happy_path_with_type(
135135
}
136136

137137

138+
@mock_aws
139+
@mock_repository
140+
def test_search_document_reference_happy_path_with_category(
141+
repository: DocumentPointerRepository,
142+
):
143+
doc_ref = load_document_reference("Y05868-736253002-Valid")
144+
doc_pointer = DocumentPointer.from_document_reference(doc_ref)
145+
repository.create(doc_pointer)
146+
147+
event = create_test_api_gateway_event(
148+
headers=create_headers(),
149+
query_string_parameters={
150+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
151+
"category": "http://snomed.info/sct|734163000",
152+
},
153+
)
154+
155+
result = handler(event, create_mock_context())
156+
body = result.pop("body")
157+
158+
assert result == {
159+
"statusCode": "200",
160+
"headers": default_response_headers(),
161+
"isBase64Encoded": False,
162+
}
163+
164+
parsed_body = json.loads(body)
165+
assert parsed_body == {
166+
"resourceType": "Bundle",
167+
"type": "searchset",
168+
"link": [
169+
{
170+
"relation": "self",
171+
"url": "https://pytest.api.service.nhs.uk/record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|6700028191&category=http://snomed.info/sct|734163000",
172+
}
173+
],
174+
"total": 1,
175+
"entry": [{"resource": doc_ref.model_dump(exclude_none=True)}],
176+
}
177+
178+
138179
@mock_aws
139180
@mock_repository
140181
def test_search_document_reference_happy_path_with_nicip_type(
@@ -342,6 +383,51 @@ def test_search_document_reference_invalid_type(repository: DocumentPointerRepos
342383
}
343384

344385

386+
@mock_aws
387+
@mock_repository
388+
def test_search_document_reference_invalid_category(
389+
repository: DocumentPointerRepository,
390+
):
391+
event = create_test_api_gateway_event(
392+
headers=create_headers(),
393+
query_string_parameters={
394+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
395+
"category": "https://fhir.nhs.uk/CodeSystem/Document-Type|invalid",
396+
},
397+
)
398+
399+
result = handler(event, create_mock_context())
400+
body = result.pop("body")
401+
402+
assert result == {
403+
"statusCode": "400",
404+
"headers": default_response_headers(),
405+
"isBase64Encoded": False,
406+
}
407+
408+
parsed_body = json.loads(body)
409+
assert parsed_body == {
410+
"resourceType": "OperationOutcome",
411+
"issue": [
412+
{
413+
"severity": "error",
414+
"code": "code-invalid",
415+
"details": {
416+
"coding": [
417+
{
418+
"code": "INVALID_CODE_SYSTEM",
419+
"display": "Invalid code system",
420+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
421+
}
422+
]
423+
},
424+
"diagnostics": "Invalid query parameter (The provided category is not valid)",
425+
"expression": ["category"],
426+
}
427+
],
428+
}
429+
430+
345431
@mock_aws
346432
@mock_repository
347433
def test_search_document_reference_invalid_json(repository: DocumentPointerRepository):

api/consumer/searchPostDocumentReference/search_post_document_reference.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def handler(
6767
type=body.category,
6868
) # TODO - Should update error message once permissioning by category is implemented
6969
return SpineErrorResponse.INVALID_CODE_SYSTEM(
70-
diagnostics="Invalid query parameter (The provided category is not valid)",
70+
diagnostics="The provided category is not valid",
7171
expression="category",
7272
)
7373

api/consumer/searchPostDocumentReference/tests/test_search_post_document_reference_consumer.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,49 @@ def test_search_post_document_reference_happy_path_with_type(
144144
}
145145

146146

147+
@mock_aws
148+
@mock_repository
149+
def test_search_post_document_reference_happy_path_with_category(
150+
repository: DocumentPointerRepository,
151+
):
152+
doc_ref = load_document_reference("Y05868-736253002-Valid")
153+
doc_pointer = DocumentPointer.from_document_reference(doc_ref)
154+
repository.create(doc_pointer)
155+
156+
event = create_test_api_gateway_event(
157+
headers=create_headers(),
158+
body=json.dumps(
159+
{
160+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
161+
"category": "http://snomed.info/sct|734163000",
162+
},
163+
),
164+
)
165+
166+
result = handler(event, create_mock_context())
167+
body = result.pop("body")
168+
169+
assert result == {
170+
"statusCode": "200",
171+
"headers": default_response_headers(),
172+
"isBase64Encoded": False,
173+
}
174+
175+
parsed_body = json.loads(body)
176+
assert parsed_body == {
177+
"resourceType": "Bundle",
178+
"type": "searchset",
179+
"link": [
180+
{
181+
"relation": "self",
182+
"url": "https://pytest.api.service.nhs.uk/record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|6700028191&category=http://snomed.info/sct|734163000",
183+
}
184+
],
185+
"total": 1,
186+
"entry": [{"resource": doc_ref.model_dump(exclude_none=True)}],
187+
}
188+
189+
147190
@mock_aws
148191
@mock_repository
149192
def test_search_document_reference_no_results(repository: DocumentPointerRepository):
@@ -310,6 +353,53 @@ def test_search_post_document_reference_invalid_type(
310353
}
311354

312355

356+
@mock_aws
357+
@mock_repository
358+
def test_search_document_reference_invalid_category(
359+
repository: DocumentPointerRepository,
360+
):
361+
event = create_test_api_gateway_event(
362+
headers=create_headers(),
363+
body=json.dumps(
364+
{
365+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
366+
"category": "https://fhir.nhs.uk/CodeSystem/Document-Type|invalid",
367+
}
368+
),
369+
)
370+
371+
result = handler(event, create_mock_context())
372+
body = result.pop("body")
373+
374+
assert result == {
375+
"statusCode": "400",
376+
"headers": default_response_headers(),
377+
"isBase64Encoded": False,
378+
}
379+
380+
parsed_body = json.loads(body)
381+
assert parsed_body == {
382+
"resourceType": "OperationOutcome",
383+
"issue": [
384+
{
385+
"severity": "error",
386+
"code": "code-invalid",
387+
"details": {
388+
"coding": [
389+
{
390+
"code": "INVALID_CODE_SYSTEM",
391+
"display": "Invalid code system",
392+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
393+
}
394+
]
395+
},
396+
"diagnostics": "The provided category is not valid",
397+
"expression": ["category"],
398+
}
399+
],
400+
}
401+
402+
313403
@mock_aws
314404
@mock_repository
315405
def test_search_post_document_reference_invalid_json(

api/producer/searchDocumentReference/tests/test_search_document_reference_producer.py

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from moto import mock_aws
44

55
from api.producer.searchDocumentReference.search_document_reference import handler
6-
from nrlf.core.constants import PointerTypes
6+
from nrlf.core.constants import Categories, PointerTypes
77
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
88
from nrlf.tests.data import load_document_reference
99
from nrlf.tests.dynamodb import mock_repository
@@ -203,6 +203,51 @@ def test_search_document_reference_invalid_type(repository: DocumentPointerRepos
203203
}
204204

205205

206+
@mock_aws
207+
@mock_repository
208+
def test_search_document_reference_invalid_category(
209+
repository: DocumentPointerRepository,
210+
):
211+
event = create_test_api_gateway_event(
212+
headers=create_headers(),
213+
query_string_parameters={
214+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
215+
"category": "https://fhir.nhs.uk/CodeSystem/Document-Type|invalid",
216+
},
217+
)
218+
219+
result = handler(event, create_mock_context())
220+
body = result.pop("body")
221+
222+
assert result == {
223+
"statusCode": "400",
224+
"headers": default_response_headers(),
225+
"isBase64Encoded": False,
226+
}
227+
228+
parsed_body = json.loads(body)
229+
assert parsed_body == {
230+
"resourceType": "OperationOutcome",
231+
"issue": [
232+
{
233+
"severity": "error",
234+
"code": "code-invalid",
235+
"details": {
236+
"coding": [
237+
{
238+
"code": "INVALID_CODE_SYSTEM",
239+
"display": "Invalid code system",
240+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
241+
}
242+
]
243+
},
244+
"diagnostics": "Invalid query parameter (The provided category is not valid)",
245+
"expression": ["category"],
246+
}
247+
],
248+
}
249+
250+
206251
@mock_aws
207252
@mock_repository
208253
def test_search_document_reference_only_returns_custodian_pointers(
@@ -272,6 +317,41 @@ def test_search_document_reference_filters_by_type(
272317
}
273318

274319

320+
@mock_aws
321+
@mock_repository
322+
def test_search_document_reference_filters_by_type(
323+
repository: DocumentPointerRepository,
324+
):
325+
doc_ref = load_document_reference("Y05868-736253002-Valid")
326+
doc_pointer = DocumentPointer.from_document_reference(doc_ref)
327+
repository.create(doc_pointer)
328+
329+
event = create_test_api_gateway_event(
330+
headers=create_headers(),
331+
query_string_parameters={
332+
"subject:identifier": "https://fhir.nhs.uk/Id/nhs-number|6700028191",
333+
"category": Categories.CARE_PLAN.value,
334+
},
335+
)
336+
337+
result = handler(event, create_mock_context())
338+
body = result.pop("body")
339+
340+
assert result == {
341+
"statusCode": "200",
342+
"headers": default_response_headers(),
343+
"isBase64Encoded": False,
344+
}
345+
346+
parsed_body = json.loads(body)
347+
assert parsed_body == {
348+
"resourceType": "Bundle",
349+
"type": "searchset",
350+
"total": 1,
351+
"entry": [{"resource": doc_ref.model_dump(exclude_none=True)}],
352+
}
353+
354+
275355
@mock_aws
276356
@mock_repository
277357
def test_search_document_reference_filters_by_pointer_types(

api/producer/searchPostDocumentReference/search_post_document_reference.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def handler(
5959
type=body.category,
6060
) # TODO - Should update error message once permissioning by category is implemented
6161
return SpineErrorResponse.INVALID_CODE_SYSTEM(
62-
diagnostics="Invalid query parameter (The provided category is not valid)",
62+
diagnostics="The provided category is not valid",
6363
expression="category",
6464
)
6565

0 commit comments

Comments
 (0)