Skip to content

Commit 51d7ace

Browse files
committed
VED-457: improve coverage for services and repository
1 parent 8cc2c2a commit 51d7ace

File tree

3 files changed

+131
-0
lines changed

3 files changed

+131
-0
lines changed

backend/tests/test_fhir_controller.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1518,6 +1518,34 @@ def test_update_immunization_missing_id(self):
15181518
}
15191519
with self.assertRaises(KeyError):
15201520
self.controller.update_immunization(aws_event)
1521+
1522+
@patch("fhir_controller.get_supplier_permissions")
1523+
def test_update_reinstated_immunization_with_diagnostics_error(self, mock_get_permissions):
1524+
"""it should return 400 if patient validation error is present"""
1525+
mock_get_permissions.return_value = ["COVID19.CRUD"]
1526+
imms_id = "valid-id"
1527+
imms = '{"id": "valid-id"}'
1528+
aws_event = {
1529+
"headers": {"E-Tag": 1, "SupplierSystem": "Test"},
1530+
"body": imms,
1531+
"pathParameters": {"id": imms_id},
1532+
}
1533+
# Simulate reinstated record
1534+
self.service.get_immunization_by_id_all.return_value = {
1535+
"resource": "existing",
1536+
"Version": 1,
1537+
"DeletedAt": True,
1538+
"Reinstated": False,
1539+
"VaccineType": "COVID19",
1540+
}
1541+
self.service.reinstate_immunization.return_value = (None, {
1542+
"diagnostics": "Patient NHS number has been superseded"
1543+
}, None)
1544+
1545+
response = self.controller.update_immunization(aws_event)
1546+
1547+
self.assertEqual(response["statusCode"], 400)
1548+
self.assertIn("superseded", json.loads(response["body"])["issue"][0]["diagnostics"])
15211549

15221550

15231551
class TestDeleteImmunization(unittest.TestCase):

backend/tests/test_fhir_repository.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,50 @@ def test_update_throws_error_when_identifier_already_in_dynamodb(self):
476476
self.repository.update_immunization(imms_id, imms, self.patient, 1, ["COVID19.CRUD"], "Test")
477477

478478
self.assertEqual(str(e.exception), f"The provided identifier: {identifier} is duplicated")
479+
480+
def test_reinstate_immunization_success(self):
481+
"""it should reinstate an immunization successfully"""
482+
self.mock_redis_client.hget.return_value = "COVID19"
483+
imms_id = "reinstate-id"
484+
imms = create_covid_19_immunization_dict(imms_id)
485+
imms["patient"] = self.patient
486+
resource = {"reinstate": "ok"}
487+
self.table.query.return_value = {}
488+
489+
self.table.update_item.return_value = {
490+
"ResponseMetadata": {"HTTPStatusCode": 200},
491+
"Attributes": {"Resource": json.dumps(resource)},
492+
}
493+
494+
with patch("time.time", return_value=123456):
495+
result, version = self.repository.reinstate_immunization(
496+
imms_id, imms, self.patient, 1, ["COVID19.CRUD"], "Test"
497+
)
498+
499+
self.assertEqual(result, resource)
500+
self.assertEqual(version, 2)
501+
502+
def test_update_reinstated_immunization_success(self):
503+
"""it should update a reinstated immunization successfully"""
504+
self.mock_redis_client.hget.return_value = "COVID19"
505+
imms_id = "reinstated-id"
506+
imms = create_covid_19_immunization_dict(imms_id)
507+
imms["patient"] = self.patient
508+
resource = {"reinstated": "ok"}
509+
self.table.query.return_value = {}
510+
511+
self.table.update_item.return_value = {
512+
"ResponseMetadata": {"HTTPStatusCode": 200},
513+
"Attributes": {"Resource": json.dumps(resource)},
514+
}
515+
516+
with patch("time.time", return_value=123456):
517+
result, version = self.repository.update_reinstated_immunization(
518+
imms_id, imms, self.patient, 1, ["COVID19.CRUD"], "Test"
519+
)
520+
521+
self.assertEqual(result, resource)
522+
self.assertEqual(version, 2)
479523

480524

481525
class TestDeleteImmunization(unittest.TestCase):

backend/tests/test_fhir_service.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import uuid
44
import datetime
55
import unittest
6+
from unittest.mock import MagicMock
67
from copy import deepcopy
78
from unittest.mock import create_autospec, patch
89
from unittest import skip
@@ -538,6 +539,64 @@ def test_patient_error(self):
538539
# Then
539540
self.assertEqual(e.exception.patient_identifier, invalid_nhs_number)
540541
self.imms_repo.update_immunization.assert_not_called()
542+
543+
def test_reinstate_immunization_returns_updated_version(self):
544+
"""it should return updated version from reinstate"""
545+
imms_id = "an-id"
546+
req_imms = create_covid_19_immunization_dict(imms_id)
547+
self.fhir_service._validate_patient = MagicMock(return_value={})
548+
self.imms_repo.reinstate_immunization.return_value = (req_imms, 5)
549+
550+
outcome, resource, version = self.fhir_service.reinstate_immunization(
551+
imms_id, req_imms, 1, ["COVID19:CRUD"], "Test"
552+
)
553+
554+
self.assertEqual(outcome, UpdateOutcome.UPDATE)
555+
self.assertEqual(version, 5)
556+
557+
def test_update_reinstated_immunization_returns_updated_version(self):
558+
"""it should return updated version from update_reinstated"""
559+
imms_id = "an-id"
560+
req_imms = create_covid_19_immunization_dict(imms_id)
561+
self.fhir_service._validate_patient = MagicMock(return_value={})
562+
self.imms_repo.update_reinstated_immunization.return_value = (req_imms, 9)
563+
564+
outcome, resource, version = self.fhir_service.update_reinstated_immunization(
565+
imms_id, req_imms, 1, ["COVID19:CRUD"], "Test"
566+
)
567+
568+
self.assertEqual(outcome, UpdateOutcome.UPDATE)
569+
self.assertEqual(version, 9)
570+
571+
def test_reinstate_immunization_with_diagnostics(self):
572+
"""it should return error if patient has diagnostics in reinstate"""
573+
imms_id = "an-id"
574+
req_imms = create_covid_19_immunization_dict(imms_id)
575+
self.fhir_service._validate_patient = MagicMock(return_value={"diagnostics": "invalid patient"})
576+
577+
outcome, resource, version = self.fhir_service.reinstate_immunization(
578+
imms_id, req_imms, 1, ["COVID19:CRUD"], "Test"
579+
)
580+
581+
self.assertIsNone(outcome)
582+
self.assertEqual(resource, {"diagnostics": "invalid patient"})
583+
self.assertIsNone(version)
584+
self.imms_repo.reinstate_immunization.assert_not_called()
585+
586+
def test_update_reinstated_immunization_with_diagnostics(self):
587+
"""it should return error if patient has diagnostics in update_reinstated"""
588+
imms_id = "an-id"
589+
req_imms = create_covid_19_immunization_dict(imms_id)
590+
self.fhir_service._validate_patient = MagicMock(return_value={"diagnostics": "invalid patient"})
591+
592+
outcome, resource, version = self.fhir_service.update_reinstated_immunization(
593+
imms_id, req_imms, 1, ["COVID19:CRUD"], "Test"
594+
)
595+
596+
self.assertIsNone(outcome)
597+
self.assertEqual(resource, {"diagnostics": "invalid patient"})
598+
self.assertIsNone(version)
599+
self.imms_repo.update_reinstated_immunization.assert_not_called()
541600

542601

543602
class TestDeleteImmunization(unittest.TestCase):

0 commit comments

Comments
 (0)