import time from untitled import content, migration, model, persistence, rules def test_save_load_roundtrip(tmp_path): original = model.Save( version=content.SAVE_VERSION, cat=model.Cat( "Fry", { "size": "tiny", "color": "tuxedo", "eyes": "blue", "personality": "judges you silently", }, ), ) persistence.save(original, tmp_path) loaded = persistence.load("Fry", tmp_path) assert loaded.cat.name == "Fry" assert loaded.cat.traits == { "size": "tiny", "color": "tuxedo", "eyes": "blue", "personality": "judges you silently", } assert loaded.version == content.SAVE_VERSION def test_migration(): v1 = { "version": 1, "cat": { "name": "Fry", "traits": { "size": "tiny", "color": "tuxedo", "eyes": "blue", "personality": "judges you silently", }, }, } result = migration.migrate(v1) assert result["version"] == content.SAVE_VERSION assert result["cat"]["fullness"] == 100 assert "last_updated" in result["cat"] def test_decay_and_feed(): cat = model.Save( version=content.SAVE_VERSION, cat=model.Cat( "Fry", { "size": "tiny", "color": "tuxedo", "eyes": "blue", "personality": "judges you silently", }, ), ) rules.reconcile(cat.cat, time.time() + 3600) assert cat.cat.fullness < 98 rules.feed(cat.cat) assert cat.cat.fullness > 98 and cat.cat.fullness <= 100 def test_list_saves(tmp_path): open(tmp_path / "test.kitten", "w").close() open(tmp_path / "test2.kitten", "w").close() saves = persistence.list_saves(tmp_path) assert "test" in saves assert "test2" in saves