feat(saju-lab): lucky.py — 럭키 컬러/숫자/방향 + 행운/위험 알림 (6 tests)
This commit is contained in:
63
saju-lab/tests/test_lucky.py
Normal file
63
saju-lab/tests/test_lucky.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from datetime import date
|
||||
|
||||
import pytest
|
||||
|
||||
from app.calculator.core import calculate_saju
|
||||
from app.calculator.analysis import perform_full_analysis
|
||||
from app.calculator.lucky import calculate_lucky
|
||||
|
||||
|
||||
def _saju_for(year, month, day, hour, gender):
|
||||
saju = calculate_saju(year, month, day, hour, gender)
|
||||
analysis = perform_full_analysis(saju, 2026)
|
||||
return saju, analysis
|
||||
|
||||
|
||||
def test_lucky_keys():
|
||||
saju, analysis = _saju_for(1990, 5, 15, 14, "male")
|
||||
r = calculate_lucky(saju, analysis, date(2026, 5, 26))
|
||||
for k in ("color", "number", "direction", "good_signs", "warnings"):
|
||||
assert k in r, f"missing {k}"
|
||||
|
||||
|
||||
def test_lucky_number_range():
|
||||
saju, analysis = _saju_for(1990, 5, 15, 14, "male")
|
||||
r = calculate_lucky(saju, analysis, date(2026, 5, 26))
|
||||
assert 1 <= r["number"] <= 9
|
||||
|
||||
|
||||
def test_lucky_color_from_yongshin():
|
||||
saju, analysis = _saju_for(1990, 5, 15, 14, "male")
|
||||
r = calculate_lucky(saju, analysis, date(2026, 5, 26))
|
||||
assert isinstance(r["color"], list)
|
||||
assert len(r["color"]) >= 1
|
||||
yongshin = analysis["yong_shin"]["yong_shin"]
|
||||
valid_colors_by_element = {
|
||||
"木": {"청록", "녹색"},
|
||||
"火": {"빨강", "주황"},
|
||||
"土": {"황색", "베이지"},
|
||||
"金": {"흰색", "은색"},
|
||||
"水": {"파랑", "검정"},
|
||||
}
|
||||
expected_set = valid_colors_by_element[yongshin]
|
||||
assert all(c in expected_set for c in r["color"])
|
||||
|
||||
|
||||
def test_lucky_direction_from_yongshin():
|
||||
saju, analysis = _saju_for(1990, 5, 15, 14, "male")
|
||||
r = calculate_lucky(saju, analysis, date(2026, 5, 26))
|
||||
valid_dirs = {"동쪽", "남쪽", "중앙", "서쪽", "북쪽"}
|
||||
assert r["direction"] in valid_dirs
|
||||
|
||||
|
||||
def test_good_signs_and_warnings_are_lists():
|
||||
saju, analysis = _saju_for(1990, 5, 15, 14, "male")
|
||||
r = calculate_lucky(saju, analysis, date(2026, 5, 26))
|
||||
assert isinstance(r["good_signs"], list)
|
||||
assert isinstance(r["warnings"], list)
|
||||
|
||||
|
||||
def test_handles_missing_hour():
|
||||
saju, analysis = _saju_for(1990, 5, 15, None, "male")
|
||||
r = calculate_lucky(saju, analysis, date(2026, 5, 26))
|
||||
assert 1 <= r["number"] <= 9
|
||||
Reference in New Issue
Block a user