| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import importlib
- from types import SimpleNamespace
- import pytest
- from agent.core.runner import RunConfig
- from agent.trace.project_environment import ProjectEnvironment
- from examples.legacy_adapters import LegacyExampleResolver
- @pytest.mark.asyncio
- async def test_legacy_example_resolver_success_missing_and_internal_error(monkeypatch):
- resolver = LegacyExampleResolver()
- received = []
- async def initializer(messages=None):
- received.append(messages)
- return "project-runner", messages or [{"role": "user", "content": "default"}], RunConfig()
- module = SimpleNamespace(init_project_env=initializer)
- monkeypatch.setattr(importlib, "import_module", lambda name: module)
- resolved = await resolver.resolve("demo", [{"role": "user", "content": "input"}])
- assert resolved.runner == "project-runner"
- assert received[-1][0]["content"] == "input"
- def missing(name):
- error = ImportError("missing project")
- error.name = "examples.missing.run"
- raise error
- monkeypatch.setattr(importlib, "import_module", missing)
- assert await resolver.resolve("missing") is None
- def internal_error(name):
- error = ImportError("missing dependency")
- error.name = "business_dependency"
- raise error
- monkeypatch.setattr(importlib, "import_module", internal_error)
- with pytest.raises(ImportError, match="dependency"):
- await resolver.resolve("broken")
- @pytest.mark.asyncio
- async def test_run_api_uses_injected_project_environment(monkeypatch):
- from agent.trace import run_api
- selected = {}
- project_runner = object()
- class Resolver:
- async def resolve(self, project_name, messages=None):
- selected["project_name"] = project_name
- return ProjectEnvironment(
- runner=project_runner,
- messages=[{"role": "user", "content": "resolved"}],
- default_config=RunConfig(),
- )
- async def fake_run(messages, config, trace_id_future, runner_instance=None):
- selected["runner"] = runner_instance
- selected["messages"] = messages
- trace_id_future.set_result("project-trace")
- monkeypatch.setattr(run_api, "_project_environment_resolver", Resolver())
- monkeypatch.setattr(run_api, "_runner", object())
- monkeypatch.setattr(run_api, "_run_with_trace_signal", fake_run)
- response = await run_api.create_and_run(
- run_api.CreateRequest(
- messages=[{"role": "user", "content": "original"}],
- project_name="demo",
- )
- )
- assert response.trace_id == "project-trace"
- assert selected["project_name"] == "demo"
- assert selected["runner"] is project_runner
- assert selected["messages"][0]["content"] == "resolved"
|