127 lines
3.8 KiB
Python
127 lines
3.8 KiB
Python
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
|
|
|