from unittest import mock from anydi import Container from app.exceptions import HandlerError from app.handlers import ExportAudienceFileHandler, ExportAudienceFileRequest from app.main import handle from tests.unit.factories import S3RecordFactory def test_handle(container: Container) -> None: handler_mock = mock.MagicMock(spec=ExportAudienceFileHandler) s3_record = S3RecordFactory.build() with container.override(ExportAudienceFileHandler, instance=handler_mock): response = handle({"Records": [s3_record.model_dump(by_alias=True)]}, None) assert response == {"status": "OK"} handler_mock.handle.assert_called_with( ExportAudienceFileRequest( bucket=s3_record.s3.bucket.name, key=s3_record.s3.object.key, ) ) def test_handle_invalid_event(container: Container) -> None: handler_mock = mock.MagicMock(spec=ExportAudienceFileHandler) with container.override(ExportAudienceFileHandler, instance=handler_mock): response = handle(None, None) assert response == {"status": "INVALID_EVENT"} def test_handle_error(container: Container) -> None: handler_mock = mock.MagicMock(spec=ExportAudienceFileHandler) handler_mock.handle.side_effect = HandlerError(message="error") s3_record = S3RecordFactory.build() with container.override(ExportAudienceFileHandler, instance=handler_mock): response = handle({"Records": [s3_record.model_dump(by_alias=True)]}, None) assert response == {"status": "HANDLER_ERROR"}