Skip to content

Commit 3790472

Browse files
[PRMP-824] Add feature flag to search handler around status (#878)
1 parent 5bbd0b9 commit 3790472

File tree

2 files changed

+86
-1
lines changed

2 files changed

+86
-1
lines changed

lambdas/handlers/document_reference_search_handler.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import json
22

3+
from enums.feature_flags import FeatureFlags
34
from enums.logging_app_interaction import LoggingAppInteraction
45
from services.document_reference_search_service import DocumentReferenceSearchService
6+
from services.feature_flags_service import FeatureFlagService
57
from utils.audit_logging_setup import LoggingService
68
from utils.decorators.ensure_env_var import ensure_environment_variables
79
from utils.decorators.handle_lambda_exceptions import handle_lambda_exceptions
@@ -30,8 +32,17 @@ def lambda_handler(event, context):
3032
request_context.patient_nhs_no = nhs_number
3133

3234
document_reference_search_service = DocumentReferenceSearchService()
35+
upload_lambda_enabled_flag_object = FeatureFlagService().get_feature_flags_by_flag(
36+
FeatureFlags.UPLOAD_DOCUMENT_ITERATION_2_ENABLED
37+
)
38+
doc_upload_iteration2_enabled = upload_lambda_enabled_flag_object[
39+
FeatureFlags.UPLOAD_DOCUMENT_ITERATION_2_ENABLED
40+
]
41+
doc_status_filter = (
42+
{"doc_status": "final"} if doc_upload_iteration2_enabled else None
43+
)
3344
response = document_reference_search_service.get_document_references(
34-
nhs_number, check_upload_completed=True, additional_filters={'doc_status': 'final'}
45+
nhs_number, check_upload_completed=True, additional_filters=doc_status_filter
3546
)
3647
logger.info("User is able to view docs", {"Result": "Successful viewing docs"})
3748

lambdas/tests/unit/handlers/test_document_reference_search_handler.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from enum import Enum
33

44
import pytest
5+
from enums.feature_flags import FeatureFlags
56
from handlers.document_reference_search_handler import lambda_handler
67
from tests.unit.helpers.data.dynamo.dynamo_responses import EXPECTED_RESPONSE
78
from utils.lambda_exceptions import DocumentRefSearchException
@@ -21,6 +22,9 @@ def mocked_service(set_env, mocker):
2122
mocked_class = mocker.patch(
2223
"handlers.document_reference_search_handler.DocumentReferenceSearchService"
2324
)
25+
mocker.patch(
26+
"handlers.document_reference_search_handler.FeatureFlagService.get_feature_flags_by_flag"
27+
)
2428
mocked_service = mocked_class.return_value
2529
yield mocked_service
2630

@@ -119,3 +123,73 @@ def test_lambda_handler_when_dynamo_tables_env_variable_not_supplied_then_return
119123
).create_api_gateway_response()
120124
actual = lambda_handler(valid_id_event_without_auth_header, context)
121125
assert expected == actual
126+
127+
128+
def test_lambda_handler_with_feature_flag_enabled_applies_doc_status_filter(
129+
set_env, mocker, valid_id_event_without_auth_header, context
130+
):
131+
"""Test that when feature flag is ON, doc_status filter is applied"""
132+
mocked_service_class = mocker.patch(
133+
"handlers.document_reference_search_handler.DocumentReferenceSearchService"
134+
)
135+
mocked_service = mocked_service_class.return_value
136+
mocked_service.get_document_references.return_value = EXPECTED_RESPONSE
137+
138+
mocked_feature_flag_service = mocker.patch(
139+
"handlers.document_reference_search_handler.FeatureFlagService"
140+
)
141+
mocked_feature_flag_instance = mocked_feature_flag_service.return_value
142+
mocked_feature_flag_instance.get_feature_flags_by_flag.return_value = {
143+
FeatureFlags.UPLOAD_DOCUMENT_ITERATION_2_ENABLED: True
144+
}
145+
146+
expected = ApiGatewayResponse(
147+
200, json.dumps(EXPECTED_RESPONSE), "GET"
148+
).create_api_gateway_response()
149+
150+
actual = lambda_handler(valid_id_event_without_auth_header, context)
151+
152+
assert expected == actual
153+
mocked_feature_flag_instance.get_feature_flags_by_flag.assert_called_once_with(
154+
FeatureFlags.UPLOAD_DOCUMENT_ITERATION_2_ENABLED
155+
)
156+
mocked_service.get_document_references.assert_called_once_with(
157+
"9000000009",
158+
check_upload_completed=True,
159+
additional_filters={"doc_status": "final"},
160+
)
161+
162+
163+
def test_lambda_handler_with_feature_flag_disabled_no_doc_status_filter(
164+
set_env, mocker, valid_id_event_without_auth_header, context
165+
):
166+
"""Test that when feature flag is OFF, no doc_status filter is applied"""
167+
mocked_service_class = mocker.patch(
168+
"handlers.document_reference_search_handler.DocumentReferenceSearchService"
169+
)
170+
mocked_service = mocked_service_class.return_value
171+
mocked_service.get_document_references.return_value = EXPECTED_RESPONSE
172+
173+
mocked_feature_flag_service = mocker.patch(
174+
"handlers.document_reference_search_handler.FeatureFlagService"
175+
)
176+
mocked_feature_flag_instance = mocked_feature_flag_service.return_value
177+
mocked_feature_flag_instance.get_feature_flags_by_flag.return_value = {
178+
FeatureFlags.UPLOAD_DOCUMENT_ITERATION_2_ENABLED: False
179+
}
180+
181+
expected = ApiGatewayResponse(
182+
200, json.dumps(EXPECTED_RESPONSE), "GET"
183+
).create_api_gateway_response()
184+
185+
actual = lambda_handler(valid_id_event_without_auth_header, context)
186+
187+
assert expected == actual
188+
mocked_feature_flag_instance.get_feature_flags_by_flag.assert_called_once_with(
189+
FeatureFlags.UPLOAD_DOCUMENT_ITERATION_2_ENABLED
190+
)
191+
mocked_service.get_document_references.assert_called_once_with(
192+
"9000000009",
193+
check_upload_completed=True,
194+
additional_filters=None,
195+
)

0 commit comments

Comments
 (0)