@@ -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+
195206def 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+
278301def 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+
377412def 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+
405463def 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