Files
atm-backtesting/tests/test_set_calc.py

89 lines
2.5 KiB
Python

"""Tests for calc_set + utc_to_ro in calendar_parse."""
from __future__ import annotations
import sys
from datetime import date, time
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from scripts.calendar_parse import ( # noqa: E402
calc_set,
load_calendar,
utc_to_ro,
)
REPO_ROOT = Path(__file__).resolve().parent.parent
CALENDAR_PATH = REPO_ROOT / "calendar_evenimente.yaml"
def _cal():
return load_calendar(CALENDAR_PATH)
# Reference weekdays used below (verified via datetime):
# 2026-05-13 Wed 2026-05-12 Tue 2026-05-14 Thu
# 2026-05-11 Mon 2026-05-15 Fri
# 2026-04-29 Wed (FOMC Powell Press Apr — Set C trigger)
def test_a1_mid() -> None:
assert calc_set(date(2026, 5, 13), time(16, 50), "Wed", _cal()) == "A1"
def test_a1_boundary_low() -> None:
assert calc_set(date(2026, 5, 12), time(16, 35), "Tue", _cal()) == "A1"
def test_a1_boundary_high() -> None:
assert calc_set(date(2026, 5, 14), time(16, 59), "Thu", _cal()) == "A1"
def test_a2_sweet_spot() -> None:
assert calc_set(date(2026, 5, 13), time(17, 30), "Wed", _cal()) == "A2"
def test_a3() -> None:
assert calc_set(date(2026, 5, 12), time(18, 30), "Tue", _cal()) == "A3"
def test_b() -> None:
assert calc_set(date(2026, 5, 14), time(22, 15), "Thu", _cal()) == "B"
def test_c_fomc() -> None:
# 2026-04-29 is Wed; would otherwise hit a time band — but FOMC Powell Press window dominates.
assert calc_set(date(2026, 4, 29), time(21, 35), "Wed", _cal()) == "C"
def test_d_mon() -> None:
assert calc_set(date(2026, 5, 11), time(17, 0), "Mon", _cal()) == "D"
def test_d_fri() -> None:
assert calc_set(date(2026, 5, 15), time(17, 0), "Fri", _cal()) == "D"
def test_other() -> None:
# Tue 13:00 — not Mon/Fri, no news, before any A-band.
assert calc_set(date(2026, 5, 12), time(13, 0), "Tue", _cal()) == "Other"
def test_dst_boundary_oct_2026() -> None:
"""DST ends on Sun 2026-10-25 at 04:00 RO (clocks go back to 03:00).
Just before the shift, 00:30 UTC = 03:30 RO (EEST, UTC+3). The conversion must
pick the pre-shift offset and yield 03:30 — not 02:30 (which would be an
off-by-one-hour bug from naive +2h).
"""
d_ro, t_ro, dow = utc_to_ro("2026-10-25", "00:30")
assert d_ro == date(2026, 10, 25)
assert t_ro == time(3, 30)
assert dow == "Sun"
# After the shift, 01:30 UTC also maps to 03:30 RO (EET, UTC+2) — sanity check.
d_ro2, t_ro2, _ = utc_to_ro("2026-10-25", "01:30")
assert (d_ro2, t_ro2) == (date(2026, 10, 25), time(3, 30))