Files
web-page-backend/saju-lab/tests/test_db_migration.py

67 lines
2.3 KiB
Python

import sqlite3
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))
yield
try:
if db_file.exists():
db_file.unlink()
except PermissionError:
pass
def test_new_columns_exist():
db_module.init_db()
conn = sqlite3.connect(db_module.DB_PATH)
cols = [row[1] for row in conn.execute("PRAGMA table_info(saju_records)").fetchall()]
conn.close()
assert "fortune_scores_json" in cols
assert "lucky_json" in cols
assert "monthly_flow_json" in cols
def test_idempotent_init():
db_module.init_db()
db_module.init_db() # 두 번째 호출 — ALTER TABLE이 OperationalError 캐치
def test_save_and_get_with_new_fields():
db_module.init_db()
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,
"fortune_scores_json": {"wealth": 80, "romance": 60, "social": 70, "career": 75, "overall": 73},
"lucky_json": {"color": ["청록"], "number": 5, "direction": "동쪽", "good_signs": ["S1"], "warnings": []},
"monthly_flow_json": [{"month": 1, "stem": "", "branch": "", "score": 65, "label": "변동"}],
})
row = db_module.get_saju_record(rid)
assert row["fortune_scores"]["wealth"] == 80
assert row["lucky"]["number"] == 5
assert row["monthly_flow"][0]["month"] == 1
def test_save_without_new_fields_backwards_compat():
db_module.init_db()
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",
})
row = db_module.get_saju_record(rid)
assert row["fortune_scores"] is None
assert row["lucky"] is None
assert row["monthly_flow"] is None