| 1 | """Tests for scripts/init_topic_learning.py""" |
| 2 | |
| 3 | from pathlib import Path |
| 4 | |
| 5 | import pytest |
| 6 | |
| 7 | from scripts.init_topic_learning import init_topic, SEEDED_WISDOM |
| 8 | |
| 9 | |
| 10 | @pytest.fixture |
| 11 | def base_dir(tmp_path): |
| 12 | return tmp_path / ".squad" |
| 13 | |
| 14 | |
| 15 | class TestInitTopic: |
| 16 | def test_creates_directory_structure(self, base_dir): |
| 17 | root = init_topic("ai-ml", base_dir=base_dir) |
| 18 | |
| 19 | assert root == base_dir / "topics" / "ai-ml" |
| 20 | assert (root / "skills").is_dir() |
| 21 | assert (root / "scorecards").is_dir() |
| 22 | assert (root / "wisdom.md").is_file() |
| 23 | |
| 24 | def test_seeds_wisdom_for_known_topic(self, base_dir): |
| 25 | init_topic("ai-ml", base_dir=base_dir) |
| 26 | content = (base_dir / "topics" / "ai-ml" / "wisdom.md").read_text() |
| 27 | |
| 28 | assert "Signal Patterns" in content |
| 29 | assert "arXiv references" in content |
| 30 | |
| 31 | def test_seeds_wisdom_for_rust(self, base_dir): |
| 32 | init_topic("rust", base_dir=base_dir) |
| 33 | content = (base_dir / "topics" / "rust" / "wisdom.md").read_text() |
| 34 | |
| 35 | assert "CLI tools that replace existing Unix utilities" in content |
| 36 | assert "Cargo ecosystem" in content |
| 37 | |
| 38 | def test_unknown_topic_gets_default_wisdom(self, base_dir): |
| 39 | init_topic("golang", base_dir=base_dir) |
| 40 | content = (base_dir / "topics" / "golang" / "wisdom.md").read_text() |
| 41 | |
| 42 | assert "golang Topic Wisdom" in content |
| 43 | |
| 44 | def test_idempotent_does_not_overwrite(self, base_dir): |
| 45 | init_topic("ai-ml", base_dir=base_dir) |
| 46 | wisdom = base_dir / "topics" / "ai-ml" / "wisdom.md" |
| 47 | wisdom.write_text("custom content") |
| 48 | |
| 49 | # Second run without force should preserve custom content |
| 50 | init_topic("ai-ml", base_dir=base_dir) |
| 51 | assert wisdom.read_text() == "custom content" |
| 52 | |
| 53 | def test_force_overwrites_existing(self, base_dir): |
| 54 | init_topic("ai-ml", base_dir=base_dir) |
| 55 | wisdom = base_dir / "topics" / "ai-ml" / "wisdom.md" |
| 56 | wisdom.write_text("custom content") |
| 57 | |
| 58 | init_topic("ai-ml", force=True, base_dir=base_dir) |
| 59 | assert wisdom.read_text() == SEEDED_WISDOM["ai-ml"] |
| 60 | |
| 61 | def test_multiple_runs_safe(self, base_dir): |
| 62 | """Running multiple times doesn't raise errors.""" |
| 63 | init_topic("ai-ml", base_dir=base_dir) |
| 64 | init_topic("ai-ml", base_dir=base_dir) |
| 65 | init_topic("ai-ml", base_dir=base_dir) |
| 66 | |
| 67 | assert (base_dir / "topics" / "ai-ml" / "wisdom.md").is_file() |