74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Session-scoped Coding Mode project overrides."""
|
|
|
|
from __future__ import annotations
|
|
|
|
# Tests target request-scope helpers directly.
|
|
# pylint: disable=protected-access
|
|
|
|
import pytest
|
|
|
|
from pineagents.agents.acp.meta import ACP_CODING_PROJECT_META_KEY
|
|
from pineagents.config.config import AgentProfileConfig
|
|
from pineagents.runtime.builder import AgentBuilder
|
|
from pineagents.runtime.prompt_contributors import CodingModeContributor
|
|
|
|
|
|
def test_request_coding_project_enables_clone(tmp_path):
|
|
config = AgentProfileConfig(id="default", name="Default")
|
|
|
|
updated = AgentBuilder._apply_request_coding_project(
|
|
config,
|
|
{ACP_CODING_PROJECT_META_KEY: str(tmp_path)},
|
|
)
|
|
|
|
assert updated is not config
|
|
assert updated.coding_mode.enabled is True
|
|
assert updated.coding_mode.project_dir == str(tmp_path.resolve())
|
|
assert config.coding_mode.enabled is False
|
|
assert config.coding_mode.project_dir is None
|
|
|
|
|
|
def test_request_coding_project_ignores_non_directory(tmp_path):
|
|
config = AgentProfileConfig(id="default", name="Default")
|
|
|
|
updated = AgentBuilder._apply_request_coding_project(
|
|
config,
|
|
{ACP_CODING_PROJECT_META_KEY: str(tmp_path / "missing")},
|
|
)
|
|
|
|
assert updated is config
|
|
assert config.coding_mode.enabled is False
|
|
|
|
|
|
@pytest.mark.usefixtures("capture_qwenpaw_logs")
|
|
def test_request_coding_project_warns_for_unsupported_config(
|
|
caplog,
|
|
tmp_path,
|
|
):
|
|
config = {}
|
|
|
|
updated = AgentBuilder._apply_request_coding_project(
|
|
config,
|
|
{ACP_CODING_PROJECT_META_KEY: str(tmp_path)},
|
|
)
|
|
|
|
assert updated is config
|
|
assert "unsupported config type: dict" in caplog.text
|
|
|
|
|
|
def test_coding_prompt_prefers_request_project(monkeypatch, tmp_path):
|
|
config = AgentProfileConfig(id="default", name="Default")
|
|
config.coding_mode.enabled = True
|
|
config.coding_mode.project_dir = str(tmp_path)
|
|
|
|
def fail_load_agent_config(_agent_id):
|
|
raise AssertionError("request project should be used first")
|
|
|
|
monkeypatch.setattr(
|
|
"pineagents.config.config.load_agent_config",
|
|
fail_load_agent_config,
|
|
)
|
|
|
|
assert CodingModeContributor._resolve_project_dir(config) == str(tmp_path)
|