diff --git a/applications/audit_generator/handler.py b/applications/audit_generator/handler.py index b560f808..533f5d91 100644 --- a/applications/audit_generator/handler.py +++ b/applications/audit_generator/handler.py @@ -15,9 +15,6 @@ from orchestration.audit_generator_orchestrator import AuditGeneratorOrchestrato from orchestration.audit_generator_unit_of_work import AuditGeneratorUnitOfWork from utilities.aws_lambda.subtask_handler import subtask_handler -_engine = make_engine(PostgresConfig.from_env(os.environ)) - - @subtask_handler() def handler(body: dict[str, Any], context: Any) -> None: trigger = AuditGeneratorTriggerRequest.model_validate(body) @@ -27,8 +24,10 @@ def handler(body: dict[str, Any], context: Any) -> None: bucket = os.environ["S3_BUCKET_NAME"] s3_client = S3Client(boto_s3_client=boto_s3, bucket=bucket) + engine = make_engine(PostgresConfig.from_env(os.environ)) + def session_factory() -> Any: - return make_session(_engine) + return make_session(engine) def uow_factory() -> AuditGeneratorUnitOfWork: return AuditGeneratorUnitOfWork(session_factory) diff --git a/tests/applications/audit_generator/test_audit_generator_handler.py b/tests/applications/audit_generator/test_audit_generator_handler.py index f9bc74b6..b04a6f8a 100644 --- a/tests/applications/audit_generator/test_audit_generator_handler.py +++ b/tests/applications/audit_generator/test_audit_generator_handler.py @@ -11,9 +11,8 @@ from applications.audit_generator.handler import handler _ENV = { "DATABASE_URL": "postgresql+psycopg://user:pass@localhost/db", "S3_BUCKET_NAME": "test-bucket", - # PostgresConfig.from_env also reads these individual vars; DATABASE_URL is - # used directly when constructing the engine in the handler module scope, so - # we patch make_engine instead of the env. + # Tests patch PostgresConfig and make_engine to avoid needing the individual + # POSTGRES_* vars that PostgresConfig.from_env would otherwise require. } _VALID_BODY: dict[str, Any] = { @@ -50,6 +49,8 @@ def test_handler_passes_hubspot_deal_id_from_body_to_orchestrator() -> None: # Act with patch("applications.audit_generator.handler.os.environ", _ENV), \ + patch("applications.audit_generator.handler.PostgresConfig"), \ + patch("applications.audit_generator.handler.make_engine"), \ patch("applications.audit_generator.handler.S3Client") as MockS3, \ patch("applications.audit_generator.handler.AuditGeneratorOrchestrator", return_value=mock_orch) as MockOrch: MockS3.return_value = MagicMock() @@ -67,6 +68,8 @@ def test_handler_passes_bucket_from_env_to_s3_client() -> None: # Act with patch("applications.audit_generator.handler.os.environ", _ENV), \ + patch("applications.audit_generator.handler.PostgresConfig"), \ + patch("applications.audit_generator.handler.make_engine"), \ patch("applications.audit_generator.handler.S3Client") as MockS3, \ patch("applications.audit_generator.handler.AuditGeneratorOrchestrator", return_value=mock_orch): _call(_VALID_BODY) @@ -86,6 +89,8 @@ def test_handler_returns_none_on_success() -> None: # Act with patch("applications.audit_generator.handler.os.environ", _ENV), \ + patch("applications.audit_generator.handler.PostgresConfig"), \ + patch("applications.audit_generator.handler.make_engine"), \ patch("applications.audit_generator.handler.S3Client"), \ patch("applications.audit_generator.handler.AuditGeneratorOrchestrator", return_value=mock_orch): result = _call(_VALID_BODY)