from datetime import datetime, timezone from types import SimpleNamespace from app.modules.calendar.backend import router as calendar def test_quick_calendar_filters_and_preserves_interval(monkeypatch): start = datetime(2026, 10, 7, 9, tzinfo=timezone.utc) end = datetime(2026, 10, 7, 10, tzinfo=timezone.utc) calls = [] def query(sql, params): calls.append((sql, params)) return [dict(id=12, state='planned', description='Internt møde', user_name='CT', user_id=3, customer_id=None, starts_at=start, ends_at=end)] monkeypatch.setattr(calendar, 'execute_query', query) events = calendar._get_calendar_events(SimpleNamespace(state=SimpleNamespace(user_id=3)), start, end, True, None, 17, 'quick_planned') assert len(calls) == 1 assert calls[0][1] == (['planned'], end, start, 3, 17) assert 'q.user_id=%s' in calls[0][0] and 'q.customer_id=%s' in calls[0][0] assert events[0]['end'] == end.isoformat() assert events[0]['backgroundColor'] == '#336699' assert events[0]['url'] == '/sag/new?quick_plan=12' def test_registered_calendar_color_and_no_conversion_link(monkeypatch): now = datetime(2026, 10, 7, 9) monkeypatch.setattr(calendar, 'execute_query', lambda *_: [dict(id=2, state='registered', description='Research', user_name='CT', user_id=3, starts_at=now, ends_at=now)]) events = calendar._get_calendar_events(SimpleNamespace(state=SimpleNamespace(user_id=3)), now, now, True, None, None, 'quick_registered') assert events[0]['backgroundColor'] == '#7c3aed' assert events[0]['url'] == '/timetracking' def test_existing_type_filter_does_not_query_quick_time(monkeypatch): calls = [] monkeypatch.setattr(calendar, 'execute_query', lambda sql, params: calls.append(sql) or []) now = datetime(2026, 10, 7) calendar._get_calendar_events(SimpleNamespace(state=SimpleNamespace(user_id=3)), now, now, True, None, None, 'deadline') assert not any('quick_time_items' in sql for sql in calls)