main
py 67 lines 2.33 KB
Raw
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()