feat(context): Integrate view modes into aggregate pipeline
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from src.app_controller import AppController
|
||||
from src.models import FileItem
|
||||
|
||||
@@ -35,7 +36,7 @@ def test_do_generate_uses_context_files(monkeypatch):
|
||||
|
||||
def mock_aggregate_run(flat, **kwargs):
|
||||
assert flat["files"]["paths"] == controller.context_files
|
||||
return ("md", "path", [], "stable_md", "disc_text")
|
||||
return ("md", Path("path"), [])
|
||||
|
||||
monkeypatch.setattr(pm, "flat_config", mock_flat_config)
|
||||
monkeypatch.setattr(pm, "save_project", lambda *args: None)
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from src import aggregate
|
||||
|
||||
def test_view_mode_summary(tmp_path):
|
||||
base_dir = tmp_path / "project"
|
||||
base_dir.mkdir()
|
||||
test_file = base_dir / "test.py"
|
||||
test_file.write_text("def hello():\n print('world')\n", encoding="utf-8")
|
||||
|
||||
files = [{"path": "test.py", "view_mode": "summary"}]
|
||||
items = aggregate.build_file_items(base_dir, files)
|
||||
|
||||
assert len(items) == 1
|
||||
assert items[0]["view_mode"] == "summary"
|
||||
# Content should be a summary, which typically starts with **Python** or similar
|
||||
assert "**Python**" in items[0]["content"]
|
||||
assert "functions: hello" in items[0]["content"]
|
||||
|
||||
def test_view_mode_full(tmp_path):
|
||||
base_dir = tmp_path / "project"
|
||||
base_dir.mkdir()
|
||||
test_file = base_dir / "test.py"
|
||||
content = "def hello():\n print('world')\n"
|
||||
test_file.write_text(content, encoding="utf-8")
|
||||
|
||||
files = [{"path": "test.py", "view_mode": "full"}]
|
||||
items = aggregate.build_file_items(base_dir, files)
|
||||
|
||||
assert len(items) == 1
|
||||
assert items[0]["view_mode"] == "full"
|
||||
assert items[0]["content"] == content
|
||||
|
||||
def test_view_mode_skeleton(tmp_path):
|
||||
base_dir = tmp_path / "project"
|
||||
base_dir.mkdir()
|
||||
test_file = base_dir / "test.py"
|
||||
content = "def hello():\n \"\"\"Docstring.\"\"\"\n print('world')\n"
|
||||
test_file.write_text(content, encoding="utf-8")
|
||||
|
||||
files = [{"path": "test.py", "view_mode": "skeleton"}]
|
||||
items = aggregate.build_file_items(base_dir, files)
|
||||
|
||||
assert len(items) == 1
|
||||
assert items[0]["view_mode"] == "skeleton"
|
||||
# Skeleton should have '...' instead of 'print'
|
||||
assert "def hello():" in items[0]["content"]
|
||||
assert "Docstring" in items[0]["content"]
|
||||
assert "..." in items[0]["content"]
|
||||
assert "print('world')" not in items[0]["content"]
|
||||
|
||||
def test_view_mode_outline(tmp_path):
|
||||
base_dir = tmp_path / "project"
|
||||
base_dir.mkdir()
|
||||
test_file = base_dir / "test.py"
|
||||
content = "def hello():\n \"\"\"Docstring.\"\"\"\n print('world')\n"
|
||||
test_file.write_text(content, encoding="utf-8")
|
||||
|
||||
files = [{"path": "test.py", "view_mode": "outline"}]
|
||||
items = aggregate.build_file_items(base_dir, files)
|
||||
|
||||
assert len(items) == 1
|
||||
assert items[0]["view_mode"] == "outline"
|
||||
# Outline should have [Func] hello (Lines 1-3)
|
||||
assert "[Func] hello (Lines 1-3)" in items[0]["content"]
|
||||
|
||||
def test_view_mode_none(tmp_path):
|
||||
base_dir = tmp_path / "project"
|
||||
base_dir.mkdir()
|
||||
test_file = base_dir / "test.py"
|
||||
test_file.write_text("def hello():\n print('world')\n", encoding="utf-8")
|
||||
|
||||
files = [{"path": "test.py", "view_mode": "none"}]
|
||||
items = aggregate.build_file_items(base_dir, files)
|
||||
|
||||
assert len(items) == 1
|
||||
assert items[0]["view_mode"] == "none"
|
||||
assert items[0]["content"] == "(context excluded)"
|
||||
|
||||
def test_view_mode_default_summary(tmp_path):
|
||||
base_dir = tmp_path / "project"
|
||||
base_dir.mkdir()
|
||||
test_file = base_dir / "test.py"
|
||||
test_file.write_text("def hello():\n print('world')\n", encoding="utf-8")
|
||||
|
||||
# Test with simple string path
|
||||
files = ["test.py"]
|
||||
items = aggregate.build_file_items(base_dir, files)
|
||||
|
||||
assert len(items) == 1
|
||||
assert items[0]["view_mode"] == "summary"
|
||||
assert "**Python**" in items[0]["content"]
|
||||
|
||||
def test_files_section_rendering(tmp_path):
|
||||
base_dir = tmp_path / "project"
|
||||
base_dir.mkdir()
|
||||
|
||||
# Full item
|
||||
full_item = {
|
||||
"path": base_dir / "full.txt",
|
||||
"entry": "full.txt",
|
||||
"content": "Full content",
|
||||
"view_mode": "full",
|
||||
"auto_aggregate": True
|
||||
}
|
||||
|
||||
# Summary item
|
||||
summary_item = {
|
||||
"path": base_dir / "summary.txt",
|
||||
"entry": "summary.txt",
|
||||
"content": "**Summary** content",
|
||||
"view_mode": "summary",
|
||||
"auto_aggregate": True
|
||||
}
|
||||
|
||||
sections = aggregate._build_files_section_from_items([full_item, summary_item])
|
||||
|
||||
# Full should be in backticks
|
||||
assert "### `full.txt`" in sections
|
||||
assert "```txt\nFull content\n```" in sections
|
||||
|
||||
# Summary should NOT be in backticks
|
||||
assert "### `summary.txt`" in sections
|
||||
assert "```txt\n**Summary** content\n```" not in sections
|
||||
assert "**Summary** content" in sections
|
||||
|
||||
Reference in New Issue
Block a user