from unittest import mock from anydi import Container from app.exceptions import HandlerError from app.handler import ShareAudienceHandler, ShareAudienceRequest from app.main import handle from tests.unit.factories import S3RecordFactory def test_handle(container: Container) -> None: handler_mock = mock.MagicMock(spec=ShareAudienceHandler) s3_record = S3RecordFactory.build() with container.override(ShareAudienceHandler, instance=handler_mock): response = handle({"Records": [s3_record.model_dump(by_alias=True)]}, None) assert response == {"status": "OK"} handler_mock.handle.assert_called_with( ShareAudienceRequest( 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=ShareAudienceHandler) with container.override(ShareAudienceHandler, instance=handler_mock): response = handle(None, None) assert response == {"status": "NOT_OK", "code": "INVALID_EVENT"} def test_handle_error(container: Container) -> None: handler_mock = mock.MagicMock(spec=ShareAudienceHandler) handler_mock.handle.side_effect = HandlerError(message="error") s3_record = S3RecordFactory.build() with container.override(ShareAudienceHandler, instance=handler_mock): response = handle({"Records": [s3_record.model_dump(by_alias=True)]}, None) assert response == {"status": "NOT_OK", "code": "HANDLER_ERROR"}