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