| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- from __future__ import annotations
- import argparse
- import runpy
- import sys
- from types import SimpleNamespace
- import pytest
- from agency_swarm.cli import main as cli_main
- def test_main_dispatches_migrate_agent(monkeypatch: pytest.MonkeyPatch) -> None:
- calls: list[tuple[str, str]] = []
- def fake_migrate(settings_file: str, output_dir: str) -> int:
- calls.append((settings_file, output_dir))
- return 7
- monkeypatch.setattr(cli_main, "migrate_agent_command", fake_migrate)
- monkeypatch.setattr(
- sys,
- "argv",
- ["agency-swarm", "migrate-agent", "settings.json", "--output-dir", "out"],
- )
- with pytest.raises(SystemExit) as exc_info:
- cli_main.main()
- assert exc_info.value.code == 7
- assert calls == [("settings.json", "out")]
- def test_main_dispatches_import_tool(monkeypatch: pytest.MonkeyPatch) -> None:
- calls: list[tuple[str | None, str, bool]] = []
- def fake_import(tool_name: str | None, directory: str, list_tools: bool) -> int:
- calls.append((tool_name, directory, list_tools))
- return 3
- monkeypatch.setattr(cli_main, "import_tool_command", fake_import)
- monkeypatch.setattr(
- sys,
- "argv",
- ["agency-swarm", "import-tool", "IPythonInterpreter", "--directory", "./dest", "--list"],
- )
- with pytest.raises(SystemExit) as exc_info:
- cli_main.main()
- assert exc_info.value.code == 3
- assert calls == [("IPythonInterpreter", "./dest", True)]
- def test_main_create_agent_template_success(monkeypatch: pytest.MonkeyPatch) -> None:
- captured_kwargs: dict[str, object] = {}
- def fake_create_agent_template(**kwargs: object) -> bool:
- captured_kwargs.update(kwargs)
- return True
- monkeypatch.setattr(cli_main, "create_agent_template", fake_create_agent_template)
- monkeypatch.setattr(
- sys,
- "argv",
- [
- "agency-swarm",
- "create-agent-template",
- "Data Analyst",
- "--description",
- "Analyzes data",
- "--model",
- "gpt-5.4-mini",
- "--reasoning",
- "high",
- "--max-tokens",
- "100",
- "--temperature",
- "0.2",
- "--instructions",
- "Be concise",
- "--use-txt",
- "--path",
- "./agents",
- ],
- )
- cli_main.main()
- assert captured_kwargs == {
- "agent_name": "Data Analyst",
- "agent_description": "Analyzes data",
- "model": "gpt-5.4-mini",
- "reasoning": "high",
- "max_tokens": 100,
- "temperature": 0.2,
- "instructions": "Be concise",
- "use_txt": True,
- "path": "./agents",
- }
- def test_main_create_agent_template_failure_exits_one(monkeypatch: pytest.MonkeyPatch) -> None:
- monkeypatch.setattr(cli_main, "create_agent_template", lambda **_kwargs: False)
- monkeypatch.setattr(sys, "argv", ["agency-swarm", "create-agent-template", "Writer"])
- with pytest.raises(SystemExit) as exc_info:
- cli_main.main()
- assert exc_info.value.code == 1
- def test_main_create_agent_template_exception_prints_error(
- monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]
- ) -> None:
- def explode(**_kwargs: object) -> bool:
- raise RuntimeError("boom")
- monkeypatch.setattr(cli_main, "create_agent_template", explode)
- monkeypatch.setattr(sys, "argv", ["agency-swarm", "create-agent-template", "Writer"])
- with pytest.raises(SystemExit) as exc_info:
- cli_main.main()
- assert exc_info.value.code == 1
- assert "ERROR: boom" in capsys.readouterr().err
- def test_main_without_command_prints_help(monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]) -> None:
- monkeypatch.setattr(sys, "argv", ["agency-swarm"])
- cli_main.main()
- output = capsys.readouterr().out
- assert "Agency Swarm CLI tools" in output
- assert "create-agent-template" in output
- def test_main_unknown_command_falls_back_to_message(
- monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]
- ) -> None:
- monkeypatch.setattr(
- argparse.ArgumentParser,
- "parse_args",
- lambda _self: SimpleNamespace(command="custom-command"),
- )
- cli_main.main()
- assert "Unknown command: custom-command" in capsys.readouterr().out
- def test_module_entrypoint_executes_main(monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]) -> None:
- monkeypatch.setattr(sys, "argv", ["agency-swarm"])
- monkeypatch.delitem(sys.modules, "agency_swarm.cli.main", raising=False)
- runpy.run_module("agency_swarm.cli.main", run_name="__main__")
- assert "Agency Swarm CLI tools" in capsys.readouterr().out
|