File size: 4,487 Bytes
7505a0b 1f40585 7505a0b 1f40585 7505a0b 1f40585 7505a0b 1f40585 7505a0b 1f40585 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | from ankigen.card_generator import (
_parse_model_selection,
_map_generation_mode_to_subject,
_build_generation_context,
format_cards_for_dataframe,
get_dataframe_columns,
generate_token_usage_html,
)
from ankigen.models import Card, CardFront, CardBack
# --- _parse_model_selection Tests ---
def test_parse_model_selection():
assert _parse_model_selection("gpt-5.2-auto") == ("gpt-5.2", None)
assert _parse_model_selection("gpt-5.2-instant") == ("gpt-5.2", "none")
assert _parse_model_selection("gpt-5.2-thinking") == ("gpt-5.2", "high")
assert _parse_model_selection("custom-model") == ("custom-model", None)
assert _parse_model_selection("") == ("gpt-5.4", None)
# --- _map_generation_mode_to_subject Tests ---
def test_map_generation_mode_to_subject():
assert _map_generation_mode_to_subject("subject", "Math") == "Math"
assert _map_generation_mode_to_subject("subject", "") == "general"
assert _map_generation_mode_to_subject("path", "") == "curriculum_design"
assert _map_generation_mode_to_subject("text", "") == "content_analysis"
assert _map_generation_mode_to_subject("unknown", "") == "general"
# --- _build_generation_context Tests ---
def test_build_generation_context():
assert _build_generation_context("text", "some text") == {
"source_text": "some text"
}
assert _build_generation_context("subject", "ignored") == {}
assert _build_generation_context("text", "") == {}
# --- format_cards_for_dataframe Tests ---
def test_format_cards_for_dataframe():
card = Card(
front=CardFront(question="Q"),
back=CardBack(answer="A", explanation="E", example="Ex"),
metadata={
"prerequisites": ["P1", "P2"],
"learning_outcomes": ["L1"],
"difficulty": "beginner",
"source_url": "http://example.com",
},
card_type="cloze",
)
formatted = format_cards_for_dataframe([card], "Test Topic")
assert len(formatted) == 1
f_card = formatted[0]
assert f_card["Index"] == "1"
assert f_card["Topic"] == "Test Topic"
assert f_card["Card_Type"] == "cloze"
assert f_card["Question"] == "Q"
assert f_card["Prerequisites"] == "P1, P2"
assert f_card["Learning_Outcomes"] == "L1"
assert f_card["Difficulty"] == "beginner"
assert f_card["Source_URL"] == "http://example.com"
def test_format_cards_for_dataframe_missing_metadata():
card = Card(
front=CardFront(question="Q"),
back=CardBack(answer="A", explanation="E", example="Ex"),
card_type="basic",
)
formatted = format_cards_for_dataframe([card], "No Metadata")
f_card = formatted[0]
assert f_card["Prerequisites"] == ""
assert f_card["Difficulty"] == "N/A"
# --- get_dataframe_columns Tests ---
def test_get_dataframe_columns():
cols = get_dataframe_columns()
assert isinstance(cols, list)
assert "Question" in cols
assert "Answer" in cols
assert "Topic" in cols
# --- generate_token_usage_html Tests ---
def test_generate_token_usage_html():
usage = {"total_tokens": 100}
html = generate_token_usage_html(usage)
assert "100 tokens" in html
html_none = generate_token_usage_html(None)
assert "No usage data" in html_none
html_invalid = generate_token_usage_html("invalid")
assert "No usage data" in html_invalid
# --- Additional Tests to meet 10+ requirement ---
def test_available_models_constant():
from ankigen.card_generator import AVAILABLE_MODELS
assert len(AVAILABLE_MODELS) >= 3
assert AVAILABLE_MODELS[0]["value"] == "gpt-5.2-auto"
def test_generation_modes_constant():
from ankigen.card_generator import GENERATION_MODES
assert len(GENERATION_MODES) >= 1
assert GENERATION_MODES[0]["value"] == "subject"
def test_format_cards_for_dataframe_empty():
assert format_cards_for_dataframe([], "Empty") == []
def test_format_cards_for_dataframe_multiple_cards():
cards = [
Card(
front=CardFront(question="Q1"),
back=CardBack(answer="A1", explanation="E1", example="X1"),
),
Card(
front=CardFront(question="Q2"),
back=CardBack(answer="A2", explanation="E2", example="X2"),
),
]
formatted = format_cards_for_dataframe(cards, "Multiple", start_index=10)
assert len(formatted) == 2
assert formatted[0]["Index"] == "10"
assert formatted[1]["Index"] == "11"
|