| """Tests for the CrewAI agents module.""" |
|
|
| from rocmport.agents import CREWAI_AVAILABLE, _build_llm, _make_tools |
| from pathlib import Path |
|
|
|
|
| def test_agents_module_imports_cleanly(): |
| """agents.py must import without error regardless of whether crewai is installed.""" |
| import rocmport.agents |
|
|
|
|
| def test_crewai_available_is_bool(): |
| """CREWAI_AVAILABLE must always be a bool (True or False).""" |
| assert isinstance(CREWAI_AVAILABLE, bool) |
|
|
|
|
| def test_build_llm_returns_none_without_env(monkeypatch): |
| """_build_llm() must return None when Qwen env vars are absent.""" |
| monkeypatch.delenv("QWEN_BASE_URL", raising=False) |
| monkeypatch.delenv("QWEN_API_KEY", raising=False) |
| assert _build_llm() is None |
|
|
|
|
| def test_make_tools_returns_two_callables(): |
| """_make_tools() must return exactly two CrewAI Tool objects with a .run() method.""" |
| if not CREWAI_AVAILABLE: |
| import pytest |
| pytest.skip("crewai not installed") |
| scan_tool, patch_tool = _make_tools("/tmp/fake_repo") |
| |
| assert hasattr(scan_tool, "run") |
| assert hasattr(patch_tool, "run") |
|
|
|
|
| def test_scan_tool_works_on_sample_repo(): |
| """The scan_cuda_repository tool must return valid JSON on the sample repo.""" |
| import json |
| if not CREWAI_AVAILABLE: |
| import pytest |
| pytest.skip("crewai not installed") |
|
|
| sample = Path(__file__).resolve().parents[1] / "samples" / "cuda_first_repo" |
| scan_tool, _ = _make_tools(str(sample)) |
| |
| result = scan_tool.run({"repo_path": str(sample)}) |
| findings = json.loads(result) |
| assert isinstance(findings, list) |
| assert len(findings) > 0 |
| assert "severity" in findings[0] |
|
|