Skip to content

Commit 30412f7

Browse files
committed
feat: add unit tests for new tools guarding
1 parent b07d7c1 commit 30412f7

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

tests/test_apify.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,17 @@ def test_run_actor_api_exception(mock_apify_env, mock_apify_client):
192192
assert "Connection failed" in result["content"][0]["text"]
193193

194194

195+
def test_run_actor_none_response(mock_apify_env, mock_apify_client):
196+
"""Actor run returns error dict when ActorClient.call() returns None."""
197+
mock_apify_client.actor.return_value.call.return_value = None
198+
199+
with patch("strands_tools.apify.ApifyClient", return_value=mock_apify_client):
200+
result = apify_run_actor(actor_id="actor/my-scraper")
201+
202+
assert result["status"] == "error"
203+
assert "no run data" in result["content"][0]["text"]
204+
205+
195206
def test_run_actor_apify_api_error_401(mock_apify_env, mock_apify_client):
196207
"""Actor run returns friendly message for 401 authentication errors."""
197208
error = _make_apify_api_error(401, "Unauthorized")
@@ -275,6 +286,18 @@ def test_run_actor_and_get_dataset_success(mock_apify_env, mock_apify_client):
275286
assert data["items"][0]["title"] == "Widget A"
276287

277288

289+
def test_run_actor_and_get_dataset_no_dataset_id(mock_apify_env, mock_apify_client):
290+
"""Combined tool returns error when the Actor run has no default dataset."""
291+
run_no_dataset = {**MOCK_ACTOR_RUN, "defaultDatasetId": None}
292+
mock_apify_client.actor.return_value.call.return_value = run_no_dataset
293+
294+
with patch("strands_tools.apify.ApifyClient", return_value=mock_apify_client):
295+
result = apify_run_actor_and_get_dataset(actor_id="actor/my-scraper")
296+
297+
assert result["status"] == "error"
298+
assert "no default dataset" in result["content"][0]["text"]
299+
300+
278301
def test_run_actor_and_get_dataset_actor_failure(mock_apify_env, mock_apify_client):
279302
"""Combined tool returns error dict when the Actor fails."""
280303
mock_apify_client.actor.return_value.call.return_value = MOCK_FAILED_RUN
@@ -374,6 +397,18 @@ def test_run_task_and_get_dataset_success(mock_apify_env, mock_apify_client):
374397
assert data["items"][0]["title"] == "Widget A"
375398

376399

400+
def test_run_task_and_get_dataset_no_dataset_id(mock_apify_env, mock_apify_client):
401+
"""Combined task tool returns error when the task run has no default dataset."""
402+
run_no_dataset = {**MOCK_ACTOR_RUN, "defaultDatasetId": None}
403+
mock_apify_client.task.return_value.call.return_value = run_no_dataset
404+
405+
with patch("strands_tools.apify.ApifyClient", return_value=mock_apify_client):
406+
result = apify_run_task_and_get_dataset(task_id="user~my-task")
407+
408+
assert result["status"] == "error"
409+
assert "no default dataset" in result["content"][0]["text"]
410+
411+
377412
def test_run_task_and_get_dataset_task_failure(mock_apify_env, mock_apify_client):
378413
"""Combined task tool returns error dict when the task fails."""
379414
mock_apify_client.task.return_value.call.return_value = MOCK_FAILED_RUN
@@ -402,6 +437,29 @@ def test_scrape_url_success(mock_apify_env, mock_apify_client):
402437
mock_apify_client.actor.assert_called_once_with("apify/website-content-crawler")
403438

404439

440+
def test_scrape_url_none_response(mock_apify_env, mock_apify_client):
441+
"""Scrape URL returns error dict when ActorClient.call() returns None."""
442+
mock_apify_client.actor.return_value.call.return_value = None
443+
444+
with patch("strands_tools.apify.ApifyClient", return_value=mock_apify_client):
445+
result = apify_scrape_url(url="https://example.com")
446+
447+
assert result["status"] == "error"
448+
assert "no run data" in result["content"][0]["text"]
449+
450+
451+
def test_scrape_url_no_dataset_id(mock_apify_env, mock_apify_client):
452+
"""Scrape URL returns error when the crawler run has no default dataset."""
453+
run_no_dataset = {**MOCK_ACTOR_RUN, "defaultDatasetId": None}
454+
mock_apify_client.actor.return_value.call.return_value = run_no_dataset
455+
456+
with patch("strands_tools.apify.ApifyClient", return_value=mock_apify_client):
457+
result = apify_scrape_url(url="https://example.com")
458+
459+
assert result["status"] == "error"
460+
assert "no default dataset" in result["content"][0]["text"]
461+
462+
405463
def test_scrape_url_no_content(mock_apify_env, mock_apify_client):
406464
"""Scrape URL returns error dict when no content is returned."""
407465
mock_list_result = MagicMock()

0 commit comments

Comments
 (0)