"""Tests for the pure (no-database) economy math.""" import random from datetime import timedelta from core import economy class TestLevels: def test_milestones(self): assert economy.get_level(0) == 1 assert economy.get_level(249) == 4 assert economy.get_level(250) == 5 assert economy.get_level(1000) == 10 assert economy.get_level(4000) == 20 assert economy.get_level(9000) == 30 def test_exp_for_level_is_inverse(self): for level in range(1, 41): exp = economy.exp_for_level(level) assert economy.get_level(exp) == level if level > 1: assert economy.get_level(exp - 1) == level - 1 def test_negative_exp_clamps_to_level_1(self): assert economy.get_level(-500) == 1 def test_role_names(self): assert economy.level_role_name(1) == "TipiNOOB" assert economy.level_role_name(4) == "TipiNOOB" assert economy.level_role_name(5) == "TipiGRINDER" assert economy.level_role_name(10) == "TipiHUSTLER" assert economy.level_role_name(20) == "TipiCHAD" assert economy.level_role_name(30) == "TipiLEGEND" assert economy.level_role_name(99) == "TipiLEGEND" class TestGambleExp: def test_tiers(self): assert economy.gamble_exp(0) == 0 assert economy.gamble_exp(9) == 0 assert economy.gamble_exp(10) == 5 assert economy.gamble_exp(99) == 5 assert economy.gamble_exp(100) == 10 assert economy.gamble_exp(999) == 10 assert economy.gamble_exp(1_000) == 15 assert economy.gamble_exp(9_999) == 15 assert economy.gamble_exp(10_000) == 20 assert economy.gamble_exp(99_999) == 20 assert economy.gamble_exp(100_000) == 25 def test_cap(self): assert economy.gamble_exp(10_000_000) == 25 class TestFormatTd: def test_hours(self): assert economy.format_td(timedelta(hours=1, minutes=23, seconds=45)) == "1t 23m" def test_minutes(self): assert economy.format_td(timedelta(minutes=45, seconds=12)) == "45m 12s" def test_seconds(self): assert economy.format_td(timedelta(seconds=8)) == "8s" class TestRollFish: def test_rolls_are_valid(self): random.seed(42) for _ in range(500): fish_id, weight = economy.roll_fish() if fish_id == "junk": assert weight == 0 else: fish = economy.FISH_CATALOGUE[fish_id] assert fish["weight"][0] <= weight <= fish["weight"][1] def test_rarity_bump_shifts_every_catch_up_a_tier(self): random.seed(7) rarities = { economy.FISH_CATALOGUE[fid]["rarity"] for fid, _ in (economy.roll_fish(rarity_bump=True) for _ in range(1000)) if fid != "junk" } assert "common" not in rarities assert "legendary" in rarities