Skip to content

Commit 73fb108

Browse files
committed
[NRL-1051] Fix up transaction response structure. Add unit first unit test for NRLF transaction create
1 parent 60410cd commit 73fb108

File tree

2 files changed

+101
-2
lines changed

2 files changed

+101
-2
lines changed

api/producer/processTransaction/process_transaction_bundle.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
from nrlf.producer.fhir.r4.model import (
1717
BaseModel,
1818
Bundle,
19+
BundleEntry,
20+
BundleEntryResponse,
1921
DocumentReference,
2022
DocumentReferenceRelatesTo,
2123
ExpressionItem,
@@ -223,7 +225,7 @@ def _raise_operation_outcome_error(diagnostics, idx):
223225
def create_document_reference(
224226
metadata: ConnectionMetadata,
225227
repository: DocumentPointerRepository,
226-
document_reference: DocumentReference,
228+
body: DocumentReference,
227229
) -> Response:
228230

229231
logger.log(LogReference.PROCREATE000)
@@ -367,8 +369,17 @@ def handler(
367369
except OperationOutcomeError as e:
368370
responses.append(e.response)
369371

372+
response_entries = [
373+
BundleEntry(
374+
response=BundleEntryResponse(
375+
status=response.statusCode, location=response.headers["Location"]
376+
)
377+
)
378+
for response in responses
379+
]
380+
370381
return Response.from_resource(
371382
resource=Bundle(
372-
resourceType="Bundle", type="transaction-response", entry=responses
383+
resourceType="Bundle", type="transaction-response", entry=response_entries
373384
)
374385
)
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import json
2+
3+
from freeze_uuid import freeze_uuid
4+
from freezegun import freeze_time
5+
from moto import mock_aws
6+
7+
from api.producer.processTransaction.process_transaction_bundle import handler
8+
from nrlf.core.dynamodb.repository import DocumentPointerRepository
9+
from nrlf.producer.fhir.r4.model import (
10+
Bundle,
11+
BundleEntry,
12+
BundleEntryRequest,
13+
DocumentReference,
14+
)
15+
from nrlf.tests.data import load_document_reference
16+
from nrlf.tests.dynamodb import mock_repository
17+
from nrlf.tests.events import (
18+
create_headers,
19+
create_mock_context,
20+
create_test_api_gateway_event,
21+
default_response_headers,
22+
)
23+
24+
25+
@mock_aws
26+
@mock_repository
27+
@freeze_time("2024-03-21T12:34:56.789")
28+
@freeze_uuid("00000000-0000-0000-0000-000000000001")
29+
def test_create_single_document_reference_with_transaction_happy_path(
30+
repository: DocumentPointerRepository,
31+
):
32+
doc_ref: DocumentReference = load_document_reference("Y05868-736253002-Valid")
33+
34+
request_bundle = Bundle(
35+
entry=[
36+
BundleEntry(
37+
resource=doc_ref, request=BundleEntryRequest(url="/", method="POST")
38+
)
39+
],
40+
resourceType="Bundle",
41+
type="transaction",
42+
)
43+
44+
event = create_test_api_gateway_event(
45+
headers=create_headers(),
46+
body=request_bundle.model_dump_json(),
47+
)
48+
49+
result = handler(event, create_mock_context())
50+
body = result.pop("body")
51+
52+
assert result == {
53+
"statusCode": "200",
54+
"headers": {
55+
**default_response_headers(),
56+
},
57+
"isBase64Encoded": False,
58+
}
59+
60+
parsed_body = json.loads(body)
61+
assert parsed_body == {
62+
"resourceType": "Bundle",
63+
"type": "transaction-response",
64+
"entry": [
65+
{
66+
"response": {
67+
"status": "201",
68+
"location": "/producer/FHIR/R4/DocumentReference/Y05868-00000000-0000-0000-0000-000000000001",
69+
},
70+
},
71+
],
72+
}
73+
74+
created_doc_pointer = repository.get_by_id(
75+
"Y05868-00000000-0000-0000-0000-000000000001"
76+
)
77+
78+
assert created_doc_pointer is not None
79+
assert created_doc_pointer.created_on == "2024-03-21T12:34:56.789Z"
80+
assert created_doc_pointer.updated_on is None
81+
assert json.loads(created_doc_pointer.document) == {
82+
**(doc_ref.model_dump(exclude_none=True)),
83+
"meta": {
84+
"lastUpdated": "2024-03-21T12:34:56.789Z",
85+
},
86+
"date": "2024-03-21T12:34:56.789Z",
87+
"id": "Y05868-00000000-0000-0000-0000-000000000001",
88+
}

0 commit comments

Comments
 (0)