| """Unit tests for tools with mocked HTTP / external calls.""" |
|
|
| from unittest.mock import MagicMock, patch |
|
|
| from gaia_agent.tools import ( |
| classify_file, |
| python_repl, |
| read_spreadsheet, |
| read_text_file, |
| ) |
| from gaia_agent.tools.files import fetch_task_file |
|
|
|
|
| def test_classify_file(): |
| assert classify_file("a/b/data.xlsx") == "spreadsheet" |
| assert classify_file("clip.MP3") == "audio" |
| assert classify_file("pic.jpeg") == "image" |
| assert classify_file("script.py") == "code" |
| assert classify_file("notes.txt") == "text" |
| assert classify_file("weird.xyz") == "other" |
|
|
|
|
| def test_python_repl_arithmetic(): |
| out = python_repl.invoke({"code": "result = sum(range(1, 11))"}) |
| assert "55" in out |
|
|
|
|
| def test_python_repl_handles_error(): |
| out = python_repl.invoke({"code": "1/0"}) |
| assert "Error" in out |
|
|
|
|
| def test_read_text_file(tmp_path): |
| p = tmp_path / "f.txt" |
| p.write_text("hello gaia", encoding="utf-8") |
| assert "hello gaia" in read_text_file.invoke({"path": str(p)}) |
|
|
|
|
| def test_read_spreadsheet_csv(tmp_path): |
| p = tmp_path / "t.csv" |
| p.write_text("a,b\n1,2\n3,4\n", encoding="utf-8") |
| out = read_spreadsheet.invoke({"path": str(p)}) |
| assert "2 rows" in out and "['a', 'b']" in out |
|
|
|
|
| def test_fetch_task_file_no_file(): |
| """A non-200 response yields None rather than a path.""" |
| with patch("gaia_agent.tools.files.requests.get") as mock_get: |
| mock_get.return_value = MagicMock(status_code=404, content=b"") |
| assert fetch_task_file("missing") is None |
|
|
|
|
| def test_fetch_task_file_writes(tmp_path): |
| resp = MagicMock(status_code=200, content=b"col\n1\n", |
| headers={"content-disposition": 'attachment; filename="x.csv"'}) |
| with patch("gaia_agent.tools.files.requests.get", return_value=resp): |
| path = fetch_task_file("task1") |
| assert path is not None and path.endswith("x.csv") |
|
|