From 8b409fd7dbfa71857902e14ba9de620505fd56d2 Mon Sep 17 00:00:00 2001 From: Gros Frumos Date: Wed, 18 Mar 2026 01:00:15 +0200 Subject: [PATCH] kin: auto-commit after pipeline --- tests/conftest.py | 12 ++++++++++++ tests/test_runner.py | 27 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index b4a1af6..fa2e5d5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,6 +11,18 @@ def _set_kin_secret_key(monkeypatch): monkeypatch.setenv("KIN_SECRET_KEY", Fernet.generate_key().decode()) +@pytest.fixture(autouse=True) +def _clear_kin_noninteractive(monkeypatch): + """Ensure KIN_NONINTERACTIVE is not inherited from parent process. + + Tests that need it explicitly set it via @patch.dict("os.environ", {"KIN_NONINTERACTIVE": "1"}). + Without this fixture, KIN_NONINTERACTIVE=1 (set by web API when launching agent subprocesses) + leaks into the test environment and causes _run_claude to add --dangerously-skip-permissions + even when noninteractive=False. + """ + monkeypatch.delenv("KIN_NONINTERACTIVE", raising=False) + + @pytest.fixture(autouse=True) def _mock_check_claude_auth(): """Авто-мок agents.runner.check_claude_auth для всех тестов. diff --git a/tests/test_runner.py b/tests/test_runner.py index 64d8d7f..fc127cb 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -839,6 +839,33 @@ class TestNonInteractive: cmd = mock_run.call_args[0][0] assert "--dangerously-skip-permissions" not in cmd + # --- KIN-FIX-023: guard использует is_noninteractive, а не raw noninteractive --- + + @patch("agents.runner.subprocess.run") + def test_noninteractive_param_adds_dangerously_skip_permissions(self, mock_run, conn): + """noninteractive=True → --dangerously-skip-permissions добавляется в команду.""" + mock_run.return_value = _mock_claude_success({"result": "ok"}) + run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=True) + cmd = mock_run.call_args[0][0] + assert "--dangerously-skip-permissions" in cmd + + @patch.dict("os.environ", {"KIN_NONINTERACTIVE": "1"}) + @patch("agents.runner.subprocess.run") + def test_kin_noninteractive_env_adds_dangerously_skip_permissions(self, mock_run, conn): + """KIN_NONINTERACTIVE=1 → --dangerously-skip-permissions добавляется в команду.""" + mock_run.return_value = _mock_claude_success({"result": "ok"}) + run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False) + cmd = mock_run.call_args[0][0] + assert "--dangerously-skip-permissions" in cmd + + @patch("agents.runner.subprocess.run") + def test_noninteractive_false_no_env_no_skip_permissions(self, mock_run, conn): + """noninteractive=False и нет KIN_NONINTERACTIVE → без --dangerously-skip-permissions.""" + mock_run.return_value = _mock_claude_success({"result": "ok"}) + run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False, allow_write=False) + cmd = mock_run.call_args[0][0] + assert "--dangerously-skip-permissions" not in cmd + # --------------------------------------------------------------------------- # run_audit