33from unittest .mock import Mock , patch
44from botocore .exceptions import ClientError
55
6+ # Mock boto3.client before importing app to prevent NoRegionError
7+ with patch ("boto3.client" ):
8+ import app
9+
610
711@pytest .fixture
812def mock_env ():
@@ -44,9 +48,7 @@ def test_handler_success(mock_time, mock_bedrock, mock_env, lambda_context, s3_e
4448 "ingestionJob" : {"ingestionJobId" : "job-123" , "status" : "STARTING" }
4549 }
4650
47- from app import handler
48-
49- result = handler (s3_event , lambda_context )
51+ result = app .handler (s3_event , lambda_context )
5052
5153 assert result ["statusCode" ] == 200
5254 assert "Successfully triggered 1 ingestion job(s) for 1 trigger file(s)" in result ["body" ]
@@ -61,9 +63,7 @@ def test_handler_success(mock_time, mock_bedrock, mock_env, lambda_context, s3_e
6163def test_handler_missing_env_vars (mock_bedrock , lambda_context , s3_event ):
6264 """Test handler with missing environment variables"""
6365 with patch .dict (os .environ , {}, clear = True ):
64- from app import handler
65-
66- result = handler (s3_event , lambda_context )
66+ result = app .handler (s3_event , lambda_context )
6767
6868 assert result ["statusCode" ] == 500
6969 assert result ["body" ] == "Configuration error"
@@ -79,9 +79,7 @@ def test_handler_conflict_exception(mock_bedrock, mock_env, lambda_context, s3_e
7979 )
8080 mock_bedrock .start_ingestion_job .side_effect = error
8181
82- from app import handler
83-
84- result = handler (s3_event , lambda_context )
82+ result = app .handler (s3_event , lambda_context )
8583
8684 assert result ["statusCode" ] == 409
8785 assert "processing by existing ingestion job" in result ["body" ]
@@ -96,9 +94,7 @@ def test_handler_other_client_error(mock_bedrock, mock_env, lambda_context, s3_e
9694 )
9795 mock_bedrock .start_ingestion_job .side_effect = error
9896
99- from app import handler
100-
101- result = handler (s3_event , lambda_context )
97+ result = app .handler (s3_event , lambda_context )
10298
10399 assert result ["statusCode" ] == 500
104100 assert "AWS error: ValidationException" in result ["body" ]
@@ -109,9 +105,7 @@ def test_handler_unexpected_error(mock_bedrock, mock_env, lambda_context, s3_eve
109105 """Test handler with unexpected error"""
110106 mock_bedrock .start_ingestion_job .side_effect = Exception ("Unexpected error" )
111107
112- from app import handler
113-
114- result = handler (s3_event , lambda_context )
108+ result = app .handler (s3_event , lambda_context )
115109
116110 assert result ["statusCode" ] == 500
117111 assert "Unexpected error: Unexpected error" in result ["body" ]
@@ -130,9 +124,7 @@ def test_handler_invalid_s3_record(mock_bedrock, mock_env, lambda_context):
130124 ]
131125 }
132126
133- from app import handler
134-
135- result = handler (invalid_event , lambda_context )
127+ result = app .handler (invalid_event , lambda_context )
136128
137129 assert result ["statusCode" ] == 200
138130 assert "Successfully triggered 0 ingestion job(s) for 0 trigger file(s)" in result ["body" ]
@@ -144,9 +136,7 @@ def test_handler_non_s3_event(mock_bedrock, mock_env, lambda_context):
144136 """Test handler with non-S3 event"""
145137 non_s3_event = {"Records" : [{"eventSource" : "aws:sns" , "eventName" : "Notification" }]}
146138
147- from app import handler
148-
149- result = handler (non_s3_event , lambda_context )
139+ result = app .handler (non_s3_event , lambda_context )
150140
151141 assert result ["statusCode" ] == 200
152142 assert "Successfully triggered 0 ingestion job(s) for 0 trigger file(s)" in result ["body" ]
@@ -177,9 +167,7 @@ def test_handler_multiple_records(mock_time, mock_bedrock, mock_env, lambda_cont
177167 ]
178168 }
179169
180- from app import handler
181-
182- result = handler (multi_event , lambda_context )
170+ result = app .handler (multi_event , lambda_context )
183171
184172 assert result ["statusCode" ] == 200
185173 assert "Successfully triggered 2 ingestion job(s) for 2 trigger file(s)" in result ["body" ]
@@ -191,9 +179,7 @@ def test_handler_empty_records(mock_bedrock, mock_env, lambda_context):
191179 """Test handler with empty records"""
192180 empty_event = {"Records" : []}
193181
194- from app import handler
195-
196- result = handler (empty_event , lambda_context )
182+ result = app .handler (empty_event , lambda_context )
197183
198184 assert result ["statusCode" ] == 200
199185 assert "Successfully triggered 0 ingestion job(s) for 0 trigger file(s)" in result ["body" ]
@@ -205,9 +191,7 @@ def test_handler_missing_records(mock_bedrock, mock_env, lambda_context):
205191 """Test handler with missing Records key"""
206192 no_records_event = {}
207193
208- from app import handler
209-
210- result = handler (no_records_event , lambda_context )
194+ result = app .handler (no_records_event , lambda_context )
211195
212196 assert result ["statusCode" ] == 200
213197 assert "Successfully triggered 0 ingestion job(s) for 0 trigger file(s)" in result ["body" ]
@@ -231,9 +215,7 @@ def test_handler_missing_object_size(mock_bedrock, mock_env, lambda_context):
231215 "ingestionJob" : {"ingestionJobId" : "job-123" , "status" : "STARTING" }
232216 }
233217
234- from app import handler
235-
236- result = handler (event_no_size , lambda_context )
218+ result = app .handler (event_no_size , lambda_context )
237219
238220 assert result ["statusCode" ] == 200
239221 mock_bedrock .start_ingestion_job .assert_called_once ()
@@ -243,9 +225,7 @@ def test_handler_missing_object_size(mock_bedrock, mock_env, lambda_context):
243225def test_handler_partial_env_vars (mock_bedrock , lambda_context , s3_event ):
244226 """Test handler with only one environment variable"""
245227 with patch .dict (os .environ , {"KNOWLEDGEBASE_ID" : "test-kb-id" }, clear = True ):
246- from app import handler
247-
248- result = handler (s3_event , lambda_context )
228+ result = app .handler (s3_event , lambda_context )
249229
250230 assert result ["statusCode" ] == 500
251231 assert result ["body" ] == "Configuration error"
@@ -257,18 +237,14 @@ def test_handler_client_error_no_message(mock_bedrock, mock_env, lambda_context,
257237 error = ClientError (error_response = {"Error" : {"Code" : "TestError" }}, operation_name = "StartIngestionJob" )
258238 mock_bedrock .start_ingestion_job .side_effect = error
259239
260- from app import handler
261-
262- result = handler (s3_event , lambda_context )
240+ result = app .handler (s3_event , lambda_context )
263241
264242 assert result ["statusCode" ] == 500
265243 assert "AWS error: TestError" in result ["body" ]
266244
267245
268246def test_module_imports ():
269247 """Test that all required modules can be imported"""
270- import app
271-
272248 assert hasattr (app , "handler" )
273249 assert hasattr (app , "logger" )
274250 assert hasattr (app , "bedrock_agent" )
0 commit comments