tests/test_calendar_event_day_coverage.py
Rama dev · réplica de lectura del repositorio original.
"""Calendar day membership uses the event's exclusive end instant."""
import json
import os
import shutil
import subprocess
from pathlib import Path
import pytest
from tests.helpers.js_modules import js_function_source
ROOT = Path(__file__).resolve().parents[1]
SOURCE = js_function_source("_eventsForDay", (ROOT / "static/js/calendar.js").read_text())
ZONES = ["UTC", "Europe/Istanbul", "America/New_York", "Asia/Tokyo"]
CASES = [
("2026-10-22T17:00:00", "2026-10-23T00:00:00", False, ["2026-10-22"]),
("2026-10-22T17:00:00", "2026-10-23T00:01:00", False, ["2026-10-22", "2026-10-23"]),
("2026-10-22T17:00:00", "2026-10-22T17:00:00", False, ["2026-10-22"]),
("2026-10-15", "2026-10-17", True, ["2026-10-15", "2026-10-16"]),
("2026-10-15", "2026-10-15", True, ["2026-10-15"]),
("2026-10-31T23:00:00", "2026-11-01T00:00:00", False, ["2026-10-31"]),
]
def _coverage(zone, start, end, all_day, days):
script = """
import { _localDateOf } from './static/js/calendar/utils.js';
const {source,event,days}=JSON.parse(process.argv[1]);
const filter=new Function('_events','_eventVisible','_localDateOf',source+'; return _eventsForDay;')([event],()=>true,_localDateOf);
console.log(JSON.stringify(days.filter(day=>filter(day).length)));
"""
data = dict(source=SOURCE, event=dict(uid="event", dtstart=start, dtend=end, all_day=all_day), days=days)
result = subprocess.run(["node", "--input-type=module", "-e", script, json.dumps(data)],
cwd=ROOT, env={**os.environ, "TZ": zone}, capture_output=True,
text=True, check=True, timeout=15)
return json.loads(result.stdout)
@pytest.mark.skipif(not shutil.which("node"), reason="node not installed")
@pytest.mark.parametrize("zone", ZONES)
@pytest.mark.parametrize("start,end,all_day,expected", CASES)
def test_event_day_coverage(zone, start, end, all_day, expected):
days = [f"2026-10-{day:02d}" for day in range(14, 32)] + ["2026-11-01", "2026-11-02"]
assert _coverage(zone, start, end, all_day, days) == expected
@pytest.mark.skipif(not shutil.which("node"), reason="node not installed")
@pytest.mark.parametrize("zone,start,end,days,expected", [
("Europe/Berlin", "2026-10-24T20:00:00+02:00", "2026-10-26T00:00:00+01:00", ["2026-10-24", "2026-10-25", "2026-10-26"], ["2026-10-24", "2026-10-25"]),
("America/New_York", "2026-10-31T20:00:00-04:00", "2026-11-02T00:00:00-05:00", ["2026-10-31", "2026-11-01", "2026-11-02"], ["2026-10-31", "2026-11-01"]),
])
def test_midnight_end_across_dst(zone, start, end, days, expected):
assert _coverage(zone, start, end, False, days) == expected