-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtest_get_immunization.py
More file actions
85 lines (72 loc) · 3.98 KB
/
test_get_immunization.py
File metadata and controls
85 lines (72 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from decimal import Decimal
import uuid
import unittest
from utils.base_test import ImmunizationBaseTest
from utils.immunisation_api import parse_location
from utils.resource import generate_imms_resource, generate_filtered_imms_resource
from utils.mappings import EndpointOperationNames, VaccineTypes
from utils.constants import env_internal_dev
@unittest.skipIf(env_internal_dev, "TestGetImmunization for internal-dev environment")
class TestGetImmunization(ImmunizationBaseTest):
def test_get_imms(self):
"""it should get a FHIR Immunization resource"""
for imms_api in self.imms_apis:
with self.subTest(imms_api):
# Create one shared UUID per immunization (covid & rsv)
covid_uuid = str(uuid.uuid4())
rsv_uuid = str(uuid.uuid4())
# Given
immunizations = [
{
"data": generate_imms_resource(imms_identifier_value=covid_uuid),
"expected": generate_filtered_imms_resource(
crud_operation_to_filter_for=EndpointOperationNames.READ,
imms_identifier_value=covid_uuid)
},
{
"data": generate_imms_resource(
sample_data_file_name="completed_rsv_immunization_event",
vaccine_type=VaccineTypes.rsv,
imms_identifier_value=rsv_uuid),
"expected": generate_filtered_imms_resource(
crud_operation_to_filter_for=EndpointOperationNames.READ,
vaccine_type=VaccineTypes.rsv,
imms_identifier_value=rsv_uuid
)
}
]
# Create immunizations and capture IDs
for immunization in immunizations:
response = imms_api.create_immunization(immunization["data"])
self.assertEqual(response.status_code, 201)
immunization_id = parse_location(response.headers["Location"])
immunization["id"] = immunization_id
immunization["expected"]["id"] = immunization_id
# When - Retrieve and validate each immunization by ID
for immunization in immunizations:
response = imms_api.get_immunization_by_id(immunization["id"])
# Then
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()["id"], immunization["id"])
self.assertEqual(response.json(parse_float=Decimal), immunization["expected"])
def not_found(self):
"""it should return 404 if resource doesn't exist"""
response = self.default_imms_api.get_immunization_by_id("some-id-that-does-not-exist")
self.assert_operation_outcome(response, 404)
def malformed_id(self):
"""it should return 400 if resource id is invalid"""
response = self.default_imms_api.get_immunization_by_id("some_id_that_is_malformed")
self.assert_operation_outcome(response, 400)
def get_deleted_imms(self):
"""it should return 404 if resource has been deleted"""
imms = self.create_a_deleted_immunization_resource(self.default_imms_api)
response = self.default_imms_api.get_immunization_by_id(imms["id"])
self.assert_operation_outcome(response, 404)
def test_get_imms_with_tbc_pk(self):
"""it should get a FHIR Immunization resource if the nhs number is TBC"""
imms = generate_imms_resource()
del imms["contained"][1]["identifier"][0]["value"]
imms_id = self.create_immunization_resource(self.default_imms_api, imms)
response = self.default_imms_api.get_immunization_by_id(imms_id)
self.assertEqual(response.status_code, 200, response.text)
self.assertEqual(response.json()["id"], imms_id)