Files
Idle-Fantasy-Save-Viewer/test_db_goals.py
T
elpatron 7656578b72 Add viewer database import and clarify backup actions.
Pairs export with validated .db restore, documents the difference from game
save imports, and renames the JSON upload button to Import game backup.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-19 23:06:59 +02:00

94 lines
2.9 KiB
Python

"""Smoke tests for extended goals / import helpers."""
from __future__ import annotations
import json
import tempfile
from pathlib import Path
from db import (
create_goal,
create_goal_group,
create_skill_goal,
delete_snapshot,
get_connection,
goals_overview,
import_save,
init_db,
list_goals_structured,
rename_goal_group,
skill_timeline,
summarize_import_changes,
)
from viewers import inspect_viewer_db, restore_viewer_db
def _minimal_save(coins: int = 100, level: int = 5) -> dict:
return {
"exported_at": 1_700_000_000_000 + coins,
"coins": coins,
"character_name": "Tester",
"skillLevels": {"mining": 10, "woodcutting": 5},
"skillXp": {"mining": 1000, "woodcutting": 200},
"inventory": {"iron_ore": 50, "logs": 20},
}
def test_relative_and_skill_goals() -> None:
with tempfile.TemporaryDirectory() as td:
db = Path(td) / "test.db"
conn = get_connection(db)
init_db(conn)
conn.close()
save_path = Path(td) / "save.json"
save_path.write_text(json.dumps(_minimal_save()), encoding="utf-8")
r1 = import_save(save_path, db_path=db)
assert r1["imported"]
gid = create_goal_group("Mining", db_path=db)["id"]
goal = create_goal("iron_ore", 20, group_id=gid, mode="relative", db_path=db)
assert goal["mode"] == "relative"
assert goal["baseline_qty"] == 50
assert not goal["completed_at"]
skill_goal = create_skill_goal("mining", 15, mode="absolute", db_path=db)
assert skill_goal["goal_type"] == "skill"
assert skill_goal["skill_key"] == "mining"
overview = goals_overview(db_path=db)
assert overview["total"] == 2
assert overview["open"] == 2
save_path.write_text(json.dumps(_minimal_save(coins=200, level=6)), encoding="utf-8")
r2 = import_save(save_path, db_path=db)
assert r2["imported"]
assert r2["import_changes"]["has_previous"]
assert r2["import_changes"]["coins_delta"] == 100
structured = list_goals_structured(db_path=db)
assert len(structured["groups"]) == 1
assert rename_goal_group(gid, "Mining Goals", db_path=db)
tl = skill_timeline(db_path=db)
assert len(tl["snapshots"]) == 2
assert "mining" in tl["series"]
snaps = r2.get("snapshot_id")
assert delete_snapshot(snaps - 1, db_path=db)
changes = summarize_import_changes(snaps, db_path=db)
assert changes["has_previous"] is False
db2 = Path(td) / "restored.db"
stats = restore_viewer_db(db, db2)
assert stats["snapshots"] >= 1
assert stats["goals"] == 2
inspected = inspect_viewer_db(db2)
assert inspected["goal_groups"] == 1
print("all tests passed")
if __name__ == "__main__":
test_relative_and_skill_goals()