61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
import sys, os
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
|
|
|
import json
|
|
import pytest
|
|
from app import db
|
|
from app.jobs.grade_weekly_review import run_weekly_grading
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def setup_db(tmp_path, monkeypatch):
|
|
test_db = tmp_path / "test.db"
|
|
monkeypatch.setattr(db, "DB_PATH", str(test_db))
|
|
db.init_db()
|
|
yield
|
|
|
|
|
|
def _seed_draw(drw_no=1153):
|
|
db.upsert_draw({
|
|
"drw_no": drw_no, "drw_date": "2026-05-09",
|
|
"n1": 3, "n2": 11, "n3": 17, "n4": 25, "n5": 33, "n6": 41, "bonus": 8,
|
|
})
|
|
|
|
|
|
def _seed_briefing(drw_no=1153):
|
|
picks = {
|
|
"core": [
|
|
{"numbers": [3, 11, 17, 25, 33, 41], "risk_tag": "안정", "reason": "x"}, # 6
|
|
{"numbers": [1, 2, 3, 4, 5, 6], "risk_tag": "안정", "reason": "x"}, # 1
|
|
{"numbers": [3, 11, 17, 4, 5, 6], "risk_tag": "균형", "reason": "x"}, # 3
|
|
{"numbers": [11, 25, 33, 7, 8, 9], "risk_tag": "균형", "reason": "x"}, # 3
|
|
{"numbers": [3, 11, 17, 25, 33, 9], "risk_tag": "공격", "reason": "x"}, # 5
|
|
],
|
|
"bonus": [], "extended": [], "pool": [],
|
|
}
|
|
db.save_briefing({
|
|
"draw_no": drw_no, "picks": picks,
|
|
"narrative": {"headline": "h", "summary_3lines": ["a", "b", "c"], "retrospective": ""},
|
|
"confidence": 70, "model": "test",
|
|
})
|
|
|
|
|
|
def test_grade_with_curator_only_no_purchase():
|
|
_seed_draw()
|
|
_seed_briefing()
|
|
run_weekly_grading(1153)
|
|
rev = db.get_review(1153)
|
|
assert rev is not None
|
|
assert rev["curator_avg_match"] == round((6+1+3+3+5)/5, 2)
|
|
assert rev["curator_best_match"] == 6
|
|
assert rev["curator_5plus_prizes"] == 4 # 6,3,3,5 ≥3 (네 개)
|
|
assert rev["user_avg_match"] is None # 구매 없음
|
|
|
|
|
|
def test_grade_with_no_briefing():
|
|
_seed_draw()
|
|
run_weekly_grading(1153)
|
|
rev = db.get_review(1153)
|
|
assert rev is not None
|
|
assert rev["curator_avg_match"] is None
|