diff --git a/tests/e2e_automation/features/APITests/steps/common_steps.py b/tests/e2e_automation/features/APITests/steps/common_steps.py index 0533e461b..93c8fe7f4 100644 --- a/tests/e2e_automation/features/APITests/steps/common_steps.py +++ b/tests/e2e_automation/features/APITests/steps/common_steps.py @@ -437,6 +437,21 @@ def normalize(value: str) -> str: return value.strip().upper() if value else "" +def populate_expected_mns_fields(context): + if getattr(context, "gp_code", None) is None: + context.gp_code = get_gp_code_by_nhs_number(context.patient.identifier[0].value) + + if getattr(context, "patient_age", None) is None: + try: + context.patient_age = calculate_age( + context.patient.birthDate, context.immunization_object.occurrenceDateTime + ) + except ValueError: + # Some negative update scenarios intentionally inject invalid DOB values. + # Keep patient_age unset here instead of failing teardown validation setup. + context.patient_age = None + + def validate_sqs_message(context, message_body, action): check.is_true(message_body.specversion == "1.0") check.is_true(message_body.source == "uk.nhs.vaccinations-data-flow-management") @@ -478,10 +493,11 @@ def validate_sqs_message(context, message_body, action): f"msn event for {action} Source application mismatch: expected {context.supplier_name}, got {message_body.filtering.sourceapplication}", ) - check.is_true( - message_body.filtering.subjectage == context.patient_age, - f"msn event for {action} Age mismatch: expected {context.patient_age}, got {message_body.filtering.subjectage}", - ) + if context.patient_age is not None: + check.is_true( + message_body.filtering.subjectage == context.patient_age, + f"msn event for {action} Age mismatch: expected {context.patient_age}, got {message_body.filtering.subjectage}", + ) check.is_true( message_body.filtering.immunisationtype == context.vaccine_type.upper(), @@ -511,13 +527,23 @@ def mns_event_will_be_triggered_with_correct_data_for_deleted_event(context): message_body = read_message(context, queue_type="notification", action="DELETE") print(f"Read deleted message from SQS: {message_body}") assert message_body is not None, "Expected a delete message but queue returned empty" + populate_expected_mns_fields(context) validate_sqs_message(context, message_body, "DELETE") def mns_event_will_be_triggered_with_correct_data(context, action): - message_body = read_message(context, queue_type="notification", action=action) + wait_time_seconds = 20 + max_empty_polls = 3 + if action.upper() == "CREATE": + max_empty_polls = 6 + message_body = read_message( + context, + queue_type="notification", + action=action, + wait_time_seconds=wait_time_seconds, + max_empty_polls=max_empty_polls, + ) print(f"Read {action}d message from SQS: {message_body}") assert message_body is not None, f"Expected a {action} message but queue returned empty" - context.gp_code = get_gp_code_by_nhs_number(context.patient.identifier[0].value) - context.patient_age = calculate_age(context.patient.birthDate, context.immunization_object.occurrenceDateTime) + populate_expected_mns_fields(context) validate_sqs_message(context, message_body, action) diff --git a/tests/e2e_automation/utilities/context.py b/tests/e2e_automation/utilities/context.py index 2ee7202e1..f3d734495 100644 --- a/tests/e2e_automation/utilities/context.py +++ b/tests/e2e_automation/utilities/context.py @@ -49,3 +49,4 @@ def __init__(self): self.delta_cache = None self.aws_account_id = None self.gp_code = None + self.patient_age = None