Split technical questions into per-class decks
This commit is contained in:
@@ -32,6 +32,7 @@ def make_catalog():
|
||||
"questions": [
|
||||
question("NA101", "1", "Was ist A?", "NA101_q"),
|
||||
question("EA202", "2", "Was ist E?", None),
|
||||
question("AA303", "3", "Was ist A-Klasse?", None),
|
||||
],
|
||||
}
|
||||
],
|
||||
@@ -115,7 +116,7 @@ class TestAnkiBuild(unittest.TestCase):
|
||||
self.data_dir = make_fetched_data(self.root)
|
||||
self.out_dir = self.root / "anki"
|
||||
|
||||
def test_builds_one_apkg_per_top_level_category(self):
|
||||
def test_builds_one_apkg_per_category(self):
|
||||
results = aa.build_all(self.data_dir, self.out_dir, seed="test-seed")
|
||||
paths = sorted(path.name for path in self.out_dir.glob("*.apkg"))
|
||||
self.assertEqual(
|
||||
@@ -123,14 +124,46 @@ class TestAnkiBuild(unittest.TestCase):
|
||||
[
|
||||
"amateurfunk-betriebliche-kenntnisse.apkg",
|
||||
"amateurfunk-kenntnisse-von-vorschriften.apkg",
|
||||
"amateurfunk-technische-kenntnisse.apkg",
|
||||
"amateurfunk-technische-kenntnisse-a.apkg",
|
||||
"amateurfunk-technische-kenntnisse-e.apkg",
|
||||
"amateurfunk-technische-kenntnisse-n.apkg",
|
||||
],
|
||||
)
|
||||
self.assertEqual([r["questions"] for r in results], [2, 1, 1])
|
||||
by_deck = {r["deck"]: r["questions"] for r in results}
|
||||
self.assertEqual(
|
||||
by_deck,
|
||||
{
|
||||
"Amateurfunk::Technische Kenntnisse::N": 1,
|
||||
"Amateurfunk::Technische Kenntnisse::E": 1,
|
||||
"Amateurfunk::Technische Kenntnisse::A": 1,
|
||||
"Amateurfunk::Betriebliche Kenntnisse": 1,
|
||||
"Amateurfunk::Kenntnisse von Vorschriften": 1,
|
||||
},
|
||||
)
|
||||
|
||||
def test_technische_decks_partition_strictly_by_class_field(self):
|
||||
aa.build_all(self.data_dir, self.out_dir, seed="test-seed")
|
||||
per_class_numbers = {}
|
||||
for letter in ("n", "e", "a"):
|
||||
apkg = self.out_dir / f"amateurfunk-technische-kenntnisse-{letter}.apkg"
|
||||
db_path, _media, _names = extract_collection(apkg, self.root / letter)
|
||||
conn = sqlite3.connect(db_path)
|
||||
try:
|
||||
numbers = [
|
||||
row[0].split(aa.FIELD_SEP, 1)[0]
|
||||
for row in conn.execute("select flds from notes")
|
||||
]
|
||||
finally:
|
||||
conn.close()
|
||||
per_class_numbers[letter.upper()] = sorted(numbers)
|
||||
self.assertEqual(
|
||||
per_class_numbers,
|
||||
{"N": ["NA101"], "E": ["EA202"], "A": ["AA303"]},
|
||||
)
|
||||
|
||||
def test_apkg_contains_notes_cards_and_media(self):
|
||||
aa.build_all(self.data_dir, self.out_dir, seed="test-seed")
|
||||
apkg = self.out_dir / "amateurfunk-technische-kenntnisse.apkg"
|
||||
apkg = self.out_dir / "amateurfunk-technische-kenntnisse-n.apkg"
|
||||
db_path, media, names = extract_collection(apkg, self.root)
|
||||
|
||||
self.assertIn("collection.anki2", names)
|
||||
@@ -150,8 +183,8 @@ class TestAnkiBuild(unittest.TestCase):
|
||||
try:
|
||||
note_count = conn.execute("select count(*) from notes").fetchone()[0]
|
||||
card_count = conn.execute("select count(*) from cards").fetchone()[0]
|
||||
self.assertEqual(note_count, 2)
|
||||
self.assertEqual(card_count, 2)
|
||||
self.assertEqual(note_count, 1)
|
||||
self.assertEqual(card_count, 1)
|
||||
fields = [row[0] for row in conn.execute("select flds from notes")]
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
Reference in New Issue
Block a user