Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Loading