Skip to content

Commit 537339e

Browse files
authored
VED-740B: Align search link.url and entry.fullUrl to match (#786)
* VED-740B: Align search link.url and entry.fullUrl to match
1 parent 7c7b8a3 commit 537339e

File tree

4 files changed

+20
-15
lines changed

4 files changed

+20
-15
lines changed

backend/src/fhir_service.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,20 @@
2929
logging.basicConfig(level="INFO")
3030
logger = logging.getLogger()
3131

32-
def get_service_url(
33-
service_env: str = os.getenv("IMMUNIZATION_ENV"),
34-
service_base_path: str = os.getenv("IMMUNIZATION_BASE_PATH"),
35-
):
32+
def get_service_url(service_env: str = os.getenv("IMMUNIZATION_ENV"), service_base_path: str = os.getenv("IMMUNIZATION_BASE_PATH")
33+
) -> str:
34+
35+
if not service_base_path:
36+
service_base_path = "immunisation-fhir-api/FHIR/R4"
37+
3638
non_prod = ["internal-dev", "int", "sandbox"]
3739
if service_env in non_prod:
3840
subdomain = f"{service_env}."
3941
elif service_env == "prod":
4042
subdomain = ""
4143
else:
4244
subdomain = "internal-dev."
45+
4346
return f"https://{subdomain}api.service.nhs.uk/{service_base_path}"
4447

4548

@@ -366,7 +369,7 @@ def search_immunizations(
366369
BundleEntry(
367370
resource=Immunization.parse_obj(imms),
368371
search=BundleEntrySearch(mode="match"),
369-
fullUrl=f"https://api.service.nhs.uk/immunisation-fhir-api/Immunization/{imms['id']}",
372+
fullUrl=f"{get_service_url()}/Immunization/{imms['id']}",
370373
)
371374
for imms in resources_filtered_for_search
372375
]

backend/tests/test_fhir_service.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
import uuid
33
import datetime
44
import unittest
5-
from unittest.mock import MagicMock
5+
import os
6+
from unittest.mock import MagicMock, patch
67
from copy import deepcopy
78
from unittest.mock import create_autospec, patch
89
from decimal import Decimal
@@ -54,22 +55,22 @@ def tearDown(self):
5455
def test_get_service_url(self):
5556
"""it should create service url"""
5657
env = "int"
57-
base_path = "my-base-path"
58+
base_path = "immunisation-fhir-api/FHIR/R4"
5859
url = get_service_url(env, base_path)
5960
self.assertEqual(url, f"https://{env}.api.service.nhs.uk/{base_path}")
6061
# default should be internal-dev
6162
env = "it-does-not-exist"
62-
base_path = "my-base-path"
63+
base_path = "immunisation-fhir-api/FHIR/R4"
6364
url = get_service_url(env, base_path)
6465
self.assertEqual(url, f"https://internal-dev.api.service.nhs.uk/{base_path}")
6566
# prod should not have a subdomain
6667
env = "prod"
67-
base_path = "my-base-path"
68+
base_path = "immunisation-fhir-api/FHIR/R4"
6869
url = get_service_url(env, base_path)
6970
self.assertEqual(url, f"https://api.service.nhs.uk/{base_path}")
7071
# any other env should fall back to internal-dev (like pr-xx or per-user)
7172
env = "pr-42"
72-
base_path = "my-base-path"
73+
base_path = "immunisation-fhir-api/FHIR/R4"
7374
url = get_service_url(env, base_path)
7475
self.assertEqual(url, f"https://internal-dev.api.service.nhs.uk/{base_path}")
7576

@@ -772,6 +773,8 @@ class TestSearchImmunizations(unittest.TestCase):
772773
MOCK_SUPPLIER_SYSTEM_NAME = "Test"
773774

774775
def setUp(self):
776+
os.environ["IMMUNIZATION_ENV"] = "internal-dev"
777+
os.environ["IMMUNIZATION_BASE_PATH"] = "immunisation-fhir-api/FHIR/R4"
775778
self.authoriser = create_autospec(Authoriser)
776779
self.imms_repo = create_autospec(ImmunizationRepository)
777780
self.validator = create_autospec(ImmunizationValidator)
@@ -1083,7 +1086,6 @@ def test_matches_contain_fullUrl(self):
10831086
"""All matches must have a fullUrl consisting of their id.
10841087
See http://hl7.org/fhir/R4B/bundle-definitions.html#Bundle.entry.fullUrl.
10851088
Tested because fhir.resources validation doesn't check this as mandatory."""
1086-
10871089
imms_ids = ["imms-1", "imms-2"]
10881090
imms_list = [create_covid_19_immunization_dict(imms_id) for imms_id in imms_ids]
10891091
self.imms_repo.find_immunizations.return_value = imms_list
@@ -1100,14 +1102,13 @@ def test_matches_contain_fullUrl(self):
11001102
for i, entry in enumerate(entries):
11011103
self.assertEqual(
11021104
entry.fullUrl,
1103-
f"https://api.service.nhs.uk/immunisation-fhir-api/Immunization/{imms_ids[i]}",
1105+
f"https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization/{imms_ids[i]}",
11041106
)
11051107

11061108
def test_patient_contains_fullUrl(self):
11071109
"""Patient must have a fullUrl consisting of its id.
11081110
See http://hl7.org/fhir/R4B/bundle-definitions.html#Bundle.entry.fullUrl.
11091111
Tested because fhir.resources validation doesn't check this as mandatory."""
1110-
11111112
imms_ids = ["imms-1", "imms-2"]
11121113
imms_list = [create_covid_19_immunization_dict(imms_id) for imms_id in imms_ids]
11131114
self.imms_repo.find_immunizations.return_value = imms_list

e2e/test_search_immunization.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from utils.constants import valid_nhs_number1, valid_nhs_number2, valid_patient_identifier2, valid_patient_identifier1
77
from utils.resource import generate_imms_resource, generate_filtered_imms_resource
88
from utils.mappings import VaccineTypes
9+
from lib.env import get_service_base_path
910

1011

1112
class TestSearchImmunization(ImmunizationBaseTest):
@@ -131,7 +132,7 @@ def test_search_backwards_compatible(self):
131132
expected_imms_resource["patient"]["reference"] = response_patient["fullUrl"]
132133
response_imm = next(item for item in entries if item["resource"]["id"] == imms_id)
133134
self.assertEqual(
134-
response_imm["fullUrl"], f"https://api.service.nhs.uk/immunisation-fhir-api/Immunization/{imms_id}"
135+
response_imm["fullUrl"], f"{get_service_base_path()}/Immunization/{imms_id}"
135136
)
136137
self.assertEqual(response_imm["search"], {"mode": "match"})
137138
self.assertEqual(response_imm["resource"], expected_imms_resource)

terraform/endpoints.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ locals {
2424
imms_lambda_env_vars = {
2525
"DYNAMODB_TABLE_NAME" = local.imms_table_name,
2626
"IMMUNIZATION_ENV" = local.resource_scope,
27-
"IMMUNIZATION_BASE_PATH" = strcontains(var.sub_environment, "pr-") ? "immunisation-fhir-api-${var.sub_environment}" : "immunisation-fhir-api"
27+
"IMMUNIZATION_BASE_PATH" = strcontains(var.sub_environment, "pr-") ? "immunisation-fhir-api/FHIR/R4-${var.sub_environment}" : "immunisation-fhir-api/FHIR/R4"
2828
# except for prod and ref, any other env uses PDS int environment
2929
"PDS_ENV" = var.pds_environment
3030
"PDS_CHECK_ENABLED" = tostring(var.pds_check_enabled)

0 commit comments

Comments
 (0)