143 lines
4.4 KiB
Python
143 lines
4.4 KiB
Python
import pytest
|
|
from app import db as db_module
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def fresh_db(monkeypatch, tmp_path):
|
|
db_file = tmp_path / "test_saju.db"
|
|
monkeypatch.setattr(db_module, "DB_PATH", str(db_file))
|
|
db_module.init_db()
|
|
yield
|
|
try:
|
|
if db_file.exists():
|
|
db_file.unlink()
|
|
except PermissionError:
|
|
pass
|
|
|
|
|
|
# --- saju_records 5 tests ---
|
|
|
|
def test_saju_save_and_get():
|
|
rid = db_module.save_saju_record({
|
|
"birth_year": 1990, "birth_month": 5, "birth_day": 15, "birth_hour": 14,
|
|
"gender": "male", "calendar_type": "solar",
|
|
"saju_data": {"day_stem": "辛"},
|
|
"analysis_data": {"element_balance": {"金": 3.0}},
|
|
"daeun_data": [{"age": 10}],
|
|
"interpretation_json": {"items": []},
|
|
"model": "claude-sonnet-4-6",
|
|
"tokens_in": 100, "tokens_out": 200, "cost_usd": 0.005,
|
|
})
|
|
assert rid > 0
|
|
row = db_module.get_saju_record(rid)
|
|
assert row["birth_year"] == 1990
|
|
assert row["saju_data"]["day_stem"] == "辛"
|
|
|
|
|
|
def test_saju_list_with_favorite():
|
|
for f in [0, 1, 0]:
|
|
db_module.save_saju_record({
|
|
"birth_year": 1990, "birth_month": 5, "birth_day": 15, "birth_hour": None,
|
|
"gender": "male",
|
|
"saju_data": {}, "analysis_data": {}, "daeun_data": [],
|
|
"model": "x", "tokens_in": 0, "tokens_out": 0, "cost_usd": 0.0,
|
|
})
|
|
# set favorites
|
|
rows = db_module.list_saju_records()["items"]
|
|
db_module.update_saju_record(rows[0]["id"], favorite=True)
|
|
res = db_module.list_saju_records(favorite=True)
|
|
assert res["total"] == 1
|
|
|
|
|
|
def test_saju_update_favorite_and_memo():
|
|
rid = db_module.save_saju_record({
|
|
"birth_year": 1990, "birth_month": 5, "birth_day": 15, "birth_hour": None,
|
|
"gender": "male",
|
|
"saju_data": {}, "analysis_data": {}, "daeun_data": [],
|
|
"model": "x",
|
|
})
|
|
db_module.update_saju_record(rid, favorite=True, memo="좋은 사주")
|
|
row = db_module.get_saju_record(rid)
|
|
assert row["favorite"] == 1
|
|
assert row["memo"] == "좋은 사주"
|
|
|
|
|
|
def test_saju_delete():
|
|
rid = db_module.save_saju_record({
|
|
"birth_year": 1990, "birth_month": 5, "birth_day": 15, "birth_hour": None,
|
|
"gender": "male",
|
|
"saju_data": {}, "analysis_data": {}, "daeun_data": [],
|
|
"model": "x",
|
|
})
|
|
db_module.delete_saju_record(rid)
|
|
assert db_module.get_saju_record(rid) is None
|
|
|
|
|
|
def test_saju_get_nonexistent():
|
|
assert db_module.get_saju_record(9999) is None
|
|
|
|
|
|
# --- compat_records 5 tests ---
|
|
|
|
def test_compat_save_and_get():
|
|
rid = db_module.save_compat_record({
|
|
"person_a": {"year": 1990},
|
|
"person_b": {"year": 1992},
|
|
"saju_a": {"day_stem": "辛"},
|
|
"saju_b": {"day_stem": "丁"},
|
|
"score": 85,
|
|
"breakdown": {"day_master_element": {"score": 25}},
|
|
"interpretation_json": {"summary": "좋음"},
|
|
"model": "claude-sonnet-4-6",
|
|
"tokens_in": 200, "tokens_out": 300, "cost_usd": 0.01,
|
|
})
|
|
assert rid > 0
|
|
row = db_module.get_compat_record(rid)
|
|
assert row["score"] == 85
|
|
assert row["breakdown"]["day_master_element"]["score"] == 25
|
|
|
|
|
|
def test_compat_list_with_favorite():
|
|
for _ in range(3):
|
|
db_module.save_compat_record({
|
|
"person_a": {}, "person_b": {},
|
|
"saju_a": {}, "saju_b": {},
|
|
"score": 50,
|
|
"breakdown": {},
|
|
"model": "x", "tokens_in": 0, "tokens_out": 0, "cost_usd": 0.0,
|
|
})
|
|
rows = db_module.list_compat_records()["items"]
|
|
db_module.update_compat_record(rows[0]["id"], favorite=True)
|
|
res = db_module.list_compat_records(favorite=True)
|
|
assert res["total"] == 1
|
|
|
|
|
|
def test_compat_update_favorite_and_memo():
|
|
rid = db_module.save_compat_record({
|
|
"person_a": {}, "person_b": {},
|
|
"saju_a": {}, "saju_b": {},
|
|
"score": 70,
|
|
"breakdown": {},
|
|
"model": "x",
|
|
})
|
|
db_module.update_compat_record(rid, favorite=True, memo="궁합 좋음")
|
|
row = db_module.get_compat_record(rid)
|
|
assert row["favorite"] == 1
|
|
assert row["memo"] == "궁합 좋음"
|
|
|
|
|
|
def test_compat_delete():
|
|
rid = db_module.save_compat_record({
|
|
"person_a": {}, "person_b": {},
|
|
"saju_a": {}, "saju_b": {},
|
|
"score": 50,
|
|
"breakdown": {},
|
|
"model": "x",
|
|
})
|
|
db_module.delete_compat_record(rid)
|
|
assert db_module.get_compat_record(rid) is None
|
|
|
|
|
|
def test_compat_get_nonexistent():
|
|
assert db_module.get_compat_record(9999) is None
|