From 7a9588b3ef5c6581f6947fab62018874526ab9c2 Mon Sep 17 00:00:00 2001 From: ZoranPandovski Date: Fri, 27 Mar 2026 17:16:24 +0100 Subject: [PATCH 1/7] Run tests --- .github/workflows/tests.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..ee9645b --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,22 @@ +name: CI + +on: + pull_request: + branches: [main] + push: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - name: Set up Python + run: uv python install 3.12 + + - name: Run tests + run: uv run --extra dev pytest tests/ -v From ea3abe06d93c009451ec4a515a13d45b2f8faa84 Mon Sep 17 00:00:00 2001 From: ZoranPandovski Date: Fri, 27 Mar 2026 17:16:49 +0100 Subject: [PATCH 2/7] Fix settings tests --- tests/test_settings.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/tests/test_settings.py b/tests/test_settings.py index 5833fe8..ebc318a 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -8,21 +8,37 @@ from anton.config.settings import AntonSettings +_ANTON_MODEL_KEYS = [ + "ANTON_PLANNING_PROVIDER", + "ANTON_PLANNING_MODEL", + "ANTON_CODING_PROVIDER", + "ANTON_CODING_MODEL", +] + + class TestAntonSettingsDefaults: - def test_default_planning_provider(self): - s = AntonSettings(anthropic_api_key="test") + def test_default_planning_provider(self, monkeypatch): + for k in _ANTON_MODEL_KEYS: + monkeypatch.delenv(k, raising=False) + s = AntonSettings(anthropic_api_key="test", _env_file=None) assert s.planning_provider == "anthropic" - def test_default_planning_model(self): - s = AntonSettings(anthropic_api_key="test") + def test_default_planning_model(self, monkeypatch): + for k in _ANTON_MODEL_KEYS: + monkeypatch.delenv(k, raising=False) + s = AntonSettings(anthropic_api_key="test", _env_file=None) assert s.planning_model == "claude-sonnet-4-6" - def test_default_coding_provider(self): - s = AntonSettings(anthropic_api_key="test") + def test_default_coding_provider(self, monkeypatch): + for k in _ANTON_MODEL_KEYS: + monkeypatch.delenv(k, raising=False) + s = AntonSettings(anthropic_api_key="test", _env_file=None) assert s.coding_provider == "anthropic" - def test_default_coding_model(self): - s = AntonSettings(anthropic_api_key="test") + def test_default_coding_model(self, monkeypatch): + for k in _ANTON_MODEL_KEYS: + monkeypatch.delenv(k, raising=False) + s = AntonSettings(anthropic_api_key="test", _env_file=None) assert s.coding_model == "claude-haiku-4-5-20251001" def test_default_memory_dir(self): From c3deb3a19803062de8d06afeab199b1319237855 Mon Sep 17 00:00:00 2001 From: ZoranPandovski Date: Fri, 27 Mar 2026 17:16:55 +0100 Subject: [PATCH 3/7] Fix ds tests --- tests/test_datasource.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_datasource.py b/tests/test_datasource.py index 3989cdf..dc7a13a 100644 --- a/tests/test_datasource.py +++ b/tests/test_datasource.py @@ -583,7 +583,7 @@ async def test_partial_save_on_n_answer(self, registry, vault_dir, make_session) conns = vault.list_connections() assert len(conns) == 1 assert conns[0]["engine"] == "postgresql" - assert conns[0]["name"].isdigit() + assert conns[0]["name"].isalnum() session._scratchpads.get_or_create.assert_not_called() @pytest.mark.asyncio From f5f942b10068699120f76a99adca341d42157b0b Mon Sep 17 00:00:00 2001 From: ZoranPandovski Date: Fri, 27 Mar 2026 17:17:08 +0100 Subject: [PATCH 4/7] Fix scratchpad tests --- tests/test_chat_scratchpad.py | 2 ++ tests/test_chat_ui.py | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_chat_scratchpad.py b/tests/test_chat_scratchpad.py index 94d0d0a..645addf 100644 --- a/tests/test_chat_scratchpad.py +++ b/tests/test_chat_scratchpad.py @@ -205,6 +205,7 @@ async def test_scratchpad_dump_streams_tool_result(self): """dump action yields a StreamToolResult for display, but sends a short summary back to the LLM to avoid it parroting the full notebook.""" mock_llm = AsyncMock() + mock_llm.plan = AsyncMock(return_value=_text_response("STATUS: COMPLETE — task done")) call_count = 0 @@ -259,6 +260,7 @@ async def test_scratchpad_in_streaming_path(self): final_response = _text_response("Got 99.") mock_llm = AsyncMock() + mock_llm.plan = AsyncMock(return_value=_text_response("STATUS: COMPLETE — task done")) call_count = 0 diff --git a/tests/test_chat_ui.py b/tests/test_chat_ui.py index 471f9bf..68045bd 100644 --- a/tests/test_chat_ui.py +++ b/tests/test_chat_ui.py @@ -226,4 +226,3 @@ def test_text_routes_to_buffer_after_tools(self, MockLive): assert display._initial_text == "Initial text" assert display._buffer == "Answer text" assert display._in_tool_phase - assert display._answer_started From 6e409ba6eecfeef8f4a5c9224095ac191dff6931 Mon Sep 17 00:00:00 2001 From: ZoranPandovski Date: Fri, 27 Mar 2026 17:17:19 +0100 Subject: [PATCH 5/7] Fix theme --- tests/test_channel_theme.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_channel_theme.py b/tests/test_channel_theme.py index 3d22a39..8c1fb46 100644 --- a/tests/test_channel_theme.py +++ b/tests/test_channel_theme.py @@ -41,8 +41,7 @@ def test_colorfgbg_light(self): def test_default_is_dark(self): with patch.dict("os.environ", {"ANTON_THEME": "", "COLORFGBG": ""}, clear=False): - with patch("anton.channel.theme.os.uname") as mock_uname: - mock_uname.return_value.sysname = "Linux" + with patch("anton.channel.theme.sys.platform", "linux"): assert detect_color_mode() == "dark" def test_macos_dark_mode(self): From 0ee0360aa4d5bf8f500701b5b113b33f521c7476 Mon Sep 17 00:00:00 2001 From: ZoranPandovski Date: Fri, 27 Mar 2026 17:20:30 +0100 Subject: [PATCH 6/7] Fix theme tests --- tests/test_channel_theme.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/test_channel_theme.py b/tests/test_channel_theme.py index 8c1fb46..7ccfd7b 100644 --- a/tests/test_channel_theme.py +++ b/tests/test_channel_theme.py @@ -46,16 +46,14 @@ def test_default_is_dark(self): def test_macos_dark_mode(self): with patch.dict("os.environ", {"ANTON_THEME": "", "COLORFGBG": ""}, clear=False): - with patch("anton.channel.theme.os.uname") as mock_uname: - mock_uname.return_value.sysname = "Darwin" + with patch("anton.channel.theme.sys.platform", "darwin"): with patch("anton.channel.theme.subprocess.run") as mock_run: mock_run.return_value.returncode = 0 assert detect_color_mode() == "dark" def test_macos_light_mode(self): with patch.dict("os.environ", {"ANTON_THEME": "", "COLORFGBG": ""}, clear=False): - with patch("anton.channel.theme.os.uname") as mock_uname: - mock_uname.return_value.sysname = "Darwin" + with patch("anton.channel.theme.sys.platform", "darwin"): with patch("anton.channel.theme.subprocess.run") as mock_run: mock_run.return_value.returncode = 1 assert detect_color_mode() == "light" From 4311f0fae4187dfc5d708f0c4f4b1cd8142cc0e9 Mon Sep 17 00:00:00 2001 From: ZoranPandovski Date: Fri, 27 Mar 2026 17:21:29 +0100 Subject: [PATCH 7/7] Better job name --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ee9645b..125217d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,7 +7,7 @@ on: branches: [main] jobs: - test: + run-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4