diff --git a/Makefile b/Makefile index f8093725b..ced5646be 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,7 @@ CONTAINER ?= false VENV_PATH_PREFIX := $(if $(filter true,$(CONTAINER)),./.venv,./lambdas/venv) FORMAT_ALL ?= false CHECK ?= false +ARGS ?= "" .PHONY: \ install clean help format list requirements ruff build-and-deploy-sandbox \ @@ -169,10 +170,10 @@ endif test-unit: ifeq ($(CONTAINER), true) cd ./lambdas && \ - PYTHONPATH=. poetry run pytest tests/unit ../scripts/github/checklist_validator/tests + PYTHONPATH=. poetry run pytest $(if $(ARGS),$(ARGS),tests/unit ../scripts/github/checklist_validator/tests) else cd ./lambdas && \ - PYTHONPATH=.. ./venv/bin/python3 -m pytest tests/unit ../scripts/github/checklist_validator/tests + PYTHONPATH=.. ./venv/bin/python3 -m pytest $(if $(ARGS),$(ARGS),tests/unit ../scripts/github/checklist_validator/tests) endif test-unit-coverage: diff --git a/lambdas/tests/unit/handlers/test_pdm_post_fhir_document_reference_handler.py b/lambdas/tests/unit/handlers/test_pdm_post_fhir_document_reference_handler.py index 6d07a8c58..7352146ff 100644 --- a/lambdas/tests/unit/handlers/test_pdm_post_fhir_document_reference_handler.py +++ b/lambdas/tests/unit/handlers/test_pdm_post_fhir_document_reference_handler.py @@ -1,9 +1,12 @@ import json +from unittest.mock import patch import pytest +from enums.lambda_error import LambdaError from handlers.post_fhir_document_reference_handler import lambda_handler from tests.unit.conftest import APIM_API_URL +from utils.lambda_exceptions import DocumentRefException @pytest.fixture @@ -83,3 +86,51 @@ def test_mtls_lambda_handler_success(valid_mtls_event, context, mock_service): valid_mtls_event["body"], valid_mtls_event["requestContext"], ) + + +def test_lambda_handler_missing_body(context): + event = {"requestContext": {}} + + response = lambda_handler(event, context) + + assert response["statusCode"] >= 400 # Lambda error + assert "resourceType" in json.loads(response["body"]) # FHIR error structure + + +@patch("handlers.post_fhir_document_reference_handler.PostFhirDocumentReferenceService") +def test_lambda_handler_document_ref_exception(mock_service, event, context): + mock_instance = mock_service.return_value + + mock_exception = DocumentRefException( + status_code=400, + error=LambdaError.DocRefNoParse, + details="Invalid doc reference", + ) + + # Raises exception when processing + mock_instance.process_fhir_document_reference.side_effect = mock_exception + + response = lambda_handler(event, context) + + assert response["statusCode"] == 400 + # Ensure body contains structured FHIR error + body = json.loads(response["body"]) + assert "resourceType" in body + assert body["resourceType"] == "OperationOutcome" + + +@patch("handlers.post_fhir_document_reference_handler.PostFhirDocumentReferenceService") +def test_lambda_handler_location_header_format(mock_service, event, context): + mock_instance = mock_service.return_value + mock_instance.process_fhir_document_reference.return_value = ( + {"id": "XYZ-987"}, + "XYZ-987", + ) + + response = lambda_handler(event, context) + print(response) + + assert ( + response["headers"]["Location"] == f"{APIM_API_URL}/DocumentReference/XYZ-987" + ) + assert response["statusCode"] == 201