diff --git a/src/eligibility_signposting_api/views/eligibility.py b/src/eligibility_signposting_api/views/eligibility.py index 17432ce50..df512b08e 100644 --- a/src/eligibility_signposting_api/views/eligibility.py +++ b/src/eligibility_signposting_api/views/eligibility.py @@ -30,6 +30,11 @@ @eligibility_blueprint.before_request def before_request() -> None: + logger.info( + "X-Request-ID: %s, X-Correlation-ID: %s", + request.headers.get("X-Request-ID"), + request.headers.get("X-Correlation-ID"), + ) AuditContext.add_request_details(request) diff --git a/tests/unit/views/test_eligibility.py b/tests/unit/views/test_eligibility.py index ec8d7e2ed..546c37c07 100644 --- a/tests/unit/views/test_eligibility.py +++ b/tests/unit/views/test_eligibility.py @@ -687,3 +687,35 @@ def test_build_response_include_values_that_are_not_null(client: FlaskClient): assert action["description"] == "Contact GP" assert action["urlLink"] == "https://example.dummy/" assert action["urlLabel"] == "GP contact" + + +@pytest.mark.parametrize( + ("headers", "expected_log_msg"), + [ + ( + {"X-Request-ID": "test-request-id-123", "X-Correlation-ID": "test-correlation-id-456"}, + "X-Request-ID: test-request-id-123, X-Correlation-ID: test-correlation-id-456", + ), + ( + {"X-Request-ID": "", "X-Correlation-ID": ""}, + "X-Request-ID: , X-Correlation-ID: ", + ), + ( + {}, # No headers provided + "X-Request-ID: None, X-Correlation-ID: None", + ), + ], +) +def test_request_id_and_correlation_id_logging_variants( + app: Flask, client: FlaskClient, caplog, headers, expected_log_msg +): + with ( + get_app_container(app).override.service(EligibilityService, new=FakeEligibilityService()), + get_app_container(app).override.service(AuditService, new=FakeAuditService()), + ): + with caplog.at_level(logging.INFO): + response = client.get("/patient-check/12345", headers=headers) + + log_messages = [record.getMessage() for record in caplog.records] + assert any(expected_log_msg in message for message in log_messages) + assert response.status_code == HTTPStatus.OK