Skip to content

Commit 901acf6

Browse files
committed
Mock boto3.client before importing app to prevent NoRegionError
1 parent 2855879 commit 901acf6

File tree

1 file changed

+17
-41
lines changed

1 file changed

+17
-41
lines changed

packages/syncKnowledgeBaseFunction/tests/test_app.py

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
from unittest.mock import Mock, patch
44
from 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
812
def 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
6163
def 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):
243225
def 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

268246
def 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

Comments
 (0)