Spaces:
Running on Zero
Running on Zero
| """Content loading: every authored card, deck, and encounter must parse.""" | |
| from scrypt.data import load_content | |
| from scrypt.engine.cards import CostType | |
| def test_content_loads(): | |
| content = load_content() | |
| assert len(content.pool) >= 15 | |
| assert "vanilla" in content.starter_decks | |
| assert "first_blood" in content.encounters | |
| def test_starter_decks_are_full_and_carry_free_fodder(): | |
| content = load_content() | |
| assert set(content.starter_decks) >= {"vanilla", "forkstorm", "graveyard"} | |
| for deck_id, deck in content.starter_decks.items(): | |
| cards = deck["cards"] | |
| assert len(cards) >= 7, f"{deck_id} too thin" | |
| free = sum(1 for c in cards if c.cost.type.value == "free") | |
| cheap = sum(1 for c in cards if c.cost.amount <= 1) | |
| assert free >= 1, f"{deck_id} has no free fodder" | |
| assert cheap >= len(cards) // 2, f"{deck_id} curve too steep" | |
| def test_bit_is_free_fodder(): | |
| content = load_content() | |
| bit = content.card("bit") | |
| assert bit.cost.type is CostType.FREE | |
| assert bit.power == 0 | |
| def test_encounter_script_lanes_in_range(): | |
| content = load_content() | |
| for enc in content.encounters.values(): | |
| for turn in enc["script"]: | |
| for play in turn: | |
| assert 0 <= play.lane < 4 | |