8f11340b38
Per post_module_taxonomy_de_cruft_20260627 Phase 2 (FR7). Each
'from src.models import X' for a moved class is rewritten to
'from src.<destination> import X':
Ticket, Track, WorkerContext, TrackState, TrackMetadata,
ThinkingSegment, EMPTY_TRACK_STATE -> src.mma
ProjectContext, ProjectMeta, ProjectOutput, ProjectFiles,
ProjectScreenshots, ProjectDiscussion, EMPTY_PROJECT_CONTEXT -> src.project
FileItem, Preset, ContextPreset, ContextFileEntry,
NamedViewPreset -> src.project_files
Tool, ToolPreset -> src.tool_presets
BiasProfile -> src.tool_bias
TextEditorConfig, ExternalEditorConfig,
EMPTY_TEXT_EDITOR_CONFIG -> src.external_editor
Persona -> src.personas
WorkspaceProfile -> src.workspace_manager
MCPServerConfig, MCPConfiguration, VectorStoreConfig,
RAGConfig, load_mcp_config -> src.mcp_client
NOT touched (kept on src.models; Phase 3 or Phase 4 will move them):
GenerateRequest, ConfirmRequest, DEFAULT_TOOL_CATEGORIES, Metadata, PROVIDERS
Migration was performed by the one-time script
scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/migrate_imports.py
which uses a class-to-module map and re.sub() to rewrite each
'from src.models import X' line.
Total: 85 import lines rewritten across 71 files.
Note: this commit depends on the v2 SHIPPED work
(origin/tier2/module_taxonomy_refactor_20260627) being merged into
this branch NEXT. On master (without the v2 SHIPPED commits), the
destination modules do not exist and these imports would fail.
65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
import pytest
|
|
from src.mma import Ticket, WorkerContext
|
|
from src.personas import Persona
|
|
from src import multi_agent_conductor
|
|
from src import app_controller
|
|
from src import aggregate
|
|
from pathlib import Path
|
|
from unittest.mock import MagicMock, patch
|
|
from src.result_types import Result
|
|
|
|
def test_persona_aggregation_strategy():
|
|
p = Persona(name="test_persona", aggregation_strategy="summarize")
|
|
assert p.aggregation_strategy == "summarize"
|
|
|
|
d = p.to_dict()
|
|
assert d.get("aggregation_strategy") == "summarize"
|
|
|
|
p2 = Persona.from_dict("test2", d)
|
|
assert p2.aggregation_strategy == "summarize"
|
|
|
|
@patch("src.aggregate.build_markdown_from_items")
|
|
def test_app_controller_do_generate_uses_persona_strategy(mock_build):
|
|
mock_build.return_value = "fake_md"
|
|
app = app_controller.AppController()
|
|
app.personas = {}
|
|
p = Persona(name="p1", aggregation_strategy="full")
|
|
app.personas["p1"] = p
|
|
app.ui_active_persona = "p1"
|
|
|
|
with patch("src.project_manager.flat_config", return_value={"project": {"name": "test"}, "output": {"output_dir": "."}, "files": {"paths": [], "base_dir": "."}}):
|
|
with patch("src.aggregate.build_file_items", return_value=[]):
|
|
with patch("pathlib.Path.mkdir"):
|
|
with patch("pathlib.Path.write_text"):
|
|
with patch.object(app, "_flush_to_project"):
|
|
with patch.object(app, "_flush_to_config"):
|
|
with patch("src.app_controller.AppController.save_config"):
|
|
full_md, path, file_items, stable_md, disc = app._do_generate()
|
|
|
|
# Verify aggregate.run and build_markdown_no_history received aggregation_strategy="full"
|
|
# Actually mock_build captures the inner calls of build_markdown_no_history
|
|
call_kwargs = mock_build.call_args[1]
|
|
assert call_kwargs.get("aggregation_strategy") == "full"
|
|
|
|
@patch("src.summarize.summarise_file")
|
|
@patch("src.multi_agent_conductor.ai_client.send")
|
|
def test_run_worker_lifecycle_uses_strategy(mock_send, mock_summarise, tmp_path):
|
|
mock_send.return_value = Result(data="fake response")
|
|
mock_summarise.return_value = "fake summary"
|
|
|
|
test_file = tmp_path / "test.py"
|
|
test_file.write_text("def test():\n pass")
|
|
|
|
ticket = Ticket(id="1", description="test")
|
|
context = WorkerContext(ticket_id="1", model_name="test", persona_id="test_persona")
|
|
|
|
p = Persona(name="test_persona", aggregation_strategy="summarize")
|
|
|
|
with patch("src.personas.PersonaManager.load_all", return_value={"test_persona": p}):
|
|
multi_agent_conductor.run_worker_lifecycle(
|
|
ticket, context, context_files=[str(test_file)]
|
|
)
|
|
|
|
# Should have called summarise_file because of the "summarize" strategy
|
|
mock_summarise.assert_called_once()
|