|
34 | 34 | from google.adk.artifacts.base_artifact_service import ArtifactVersion |
35 | 35 | from google.adk.cli import fast_api as fast_api_module |
36 | 36 | from google.adk.cli.fast_api import get_fast_api_app |
| 37 | +from google.adk.cli.fast_api import AgentAppMapping |
| 38 | +from google.adk.apps.app import App |
37 | 39 | from google.adk.errors.input_validation_error import InputValidationError |
38 | 40 | from google.adk.errors.session_not_found_error import SessionNotFoundError |
39 | 41 | from google.adk.evaluation.eval_case import EvalCase |
|
50 | 52 | from google.genai import types |
51 | 53 | from pydantic import BaseModel |
52 | 54 | import pytest |
53 | | -from google.adk.cli.fast_api import DynamicAppMap |
54 | | -from google.adk.apps.app import App |
55 | 55 |
|
56 | 56 | # Configure logging to help diagnose server startup issues |
57 | 57 | logging.basicConfig( |
@@ -4430,63 +4430,67 @@ def test_create_eval_set_legacy_route_creates_eval_set( |
4430 | 4430 | if __name__ == "__main__": |
4431 | 4431 | pytest.main(["-xvs", __file__]) |
4432 | 4432 |
|
| 4433 | + |
4433 | 4434 | def test_dynamic_app_map_finds_matching_app(): |
4434 | | - mock_agent_loader = MagicMock() |
4435 | | - mock_agent_loader.list_agents.return_value = ["folder_a", "folder_b"] |
4436 | | - |
4437 | | - def mock_load_agent(folder): |
4438 | | - mock_app = MagicMock(spec=App) |
4439 | | - if folder == "folder_b": |
4440 | | - mock_app.name = "target_app" |
4441 | | - else: |
4442 | | - mock_app.name = "other_app" |
4443 | | - return mock_app |
4444 | | - |
4445 | | - mock_agent_loader.load_agent.side_effect = mock_load_agent |
4446 | | - |
4447 | | - app_map = DynamicAppMap(mock_agent_loader) |
4448 | | - |
4449 | | - # Should correctly map the internal app name to its physical folder |
4450 | | - assert app_map["target_app"] == "folder_b" |
| 4435 | + mock_agent_loader = MagicMock() |
| 4436 | + mock_agent_loader.list_agents.return_value = ["folder_a", "folder_b"] |
| 4437 | + |
| 4438 | + def mock_load_agent(folder): |
| 4439 | + mock_app = MagicMock(spec=App) |
| 4440 | + if folder == "folder_b": |
| 4441 | + mock_app.name = "target_app" |
| 4442 | + else: |
| 4443 | + mock_app.name = "other_app" |
| 4444 | + return mock_app |
| 4445 | + |
| 4446 | + mock_agent_loader.load_agent.side_effect = mock_load_agent |
| 4447 | + |
| 4448 | + app_map = AgentAppMapping(mock_agent_loader) |
| 4449 | + |
| 4450 | + # Should correctly map the internal app name to its physical folder |
| 4451 | + assert app_map["target_app"] == "folder_b" |
| 4452 | + |
4451 | 4453 |
|
4452 | 4454 | def test_dynamic_app_map_fallback_when_not_found(): |
4453 | | - mock_agent_loader = MagicMock() |
4454 | | - mock_agent_loader.list_agents.return_value = ["folder_a"] |
4455 | | - |
4456 | | - def mock_load_agent(folder): |
4457 | | - mock_app = MagicMock(spec=App) |
4458 | | - mock_app.name = "other_app" |
4459 | | - return mock_app |
4460 | | - |
4461 | | - mock_agent_loader.load_agent.side_effect = mock_load_agent |
4462 | | - |
4463 | | - app_map = DynamicAppMap(mock_agent_loader) |
4464 | | - |
4465 | | - # If the app isn't found, it should return the exact string it was given |
4466 | | - assert app_map["missing_app"] == "missing_app" |
| 4455 | + mock_agent_loader = MagicMock() |
| 4456 | + mock_agent_loader.list_agents.return_value = ["folder_a"] |
| 4457 | + |
| 4458 | + def mock_load_agent(folder): |
| 4459 | + mock_app = MagicMock(spec=App) |
| 4460 | + mock_app.name = "other_app" |
| 4461 | + return mock_app |
| 4462 | + |
| 4463 | + mock_agent_loader.load_agent.side_effect = mock_load_agent |
| 4464 | + |
| 4465 | + app_map = AgentAppMapping(mock_agent_loader) |
| 4466 | + |
| 4467 | + # If the app isn't found, it should return the exact string it was given |
| 4468 | + assert app_map["missing_app"] == "missing_app" |
| 4469 | + |
4467 | 4470 |
|
4468 | 4471 | def test_dynamic_app_map_ignores_load_errors(): |
4469 | | - mock_agent_loader = MagicMock() |
4470 | | - mock_agent_loader.list_agents.return_value = ["broken_folder", "good_folder"] |
4471 | | - |
4472 | | - def mock_load_agent(folder): |
4473 | | - if folder == "broken_folder": |
4474 | | - raise ValueError("Agent is completely broken") |
4475 | | - mock_app = MagicMock(spec=App) |
4476 | | - mock_app.name = "good_app" |
4477 | | - return mock_app |
4478 | | - |
4479 | | - mock_agent_loader.load_agent.side_effect = mock_load_agent |
4480 | | - |
4481 | | - app_map = DynamicAppMap(mock_agent_loader) |
4482 | | - |
4483 | | - # Should ignore the ValueError from broken_folder and still find good_app |
4484 | | - assert app_map["good_app"] == "good_folder" |
| 4472 | + mock_agent_loader = MagicMock() |
| 4473 | + mock_agent_loader.list_agents.return_value = ["broken_folder", "good_folder"] |
| 4474 | + |
| 4475 | + def mock_load_agent(folder): |
| 4476 | + if folder == "broken_folder": |
| 4477 | + raise ValueError("Agent is completely broken") |
| 4478 | + mock_app = MagicMock(spec=App) |
| 4479 | + mock_app.name = "good_app" |
| 4480 | + return mock_app |
| 4481 | + |
| 4482 | + mock_agent_loader.load_agent.side_effect = mock_load_agent |
| 4483 | + |
| 4484 | + app_map = AgentAppMapping(mock_agent_loader) |
| 4485 | + |
| 4486 | + # Should ignore the ValueError from broken_folder and still find good_app |
| 4487 | + assert app_map["good_app"] == "good_folder" |
| 4488 | + |
4485 | 4489 |
|
4486 | 4490 | def test_dynamic_app_map_is_truthy(): |
4487 | | - mock_agent_loader = MagicMock() |
4488 | | - app_map = DynamicAppMap(mock_agent_loader) |
4489 | | - |
4490 | | - # Must evaluate to True so that `app_map or {}` evaluates to app_map |
4491 | | - assert bool(app_map) is True |
4492 | | - assert (app_map or {}) is app_map |
| 4491 | + mock_agent_loader = MagicMock() |
| 4492 | + app_map = AgentAppMapping(mock_agent_loader) |
| 4493 | + |
| 4494 | + # Must evaluate to True so that `app_map or {}` evaluates to app_map |
| 4495 | + assert bool(app_map) is True |
| 4496 | + assert (app_map or {}) is app_map |
0 commit comments