from datetime import datetime, timezone from bs4 import BeautifulSoup from app.main import ( PICKER_SCRIPT, calendar_day_counts, event_overlaps_range, sanitize_picker_html, ) def test_multiday_events_count_each_overlapping_calendar_day(): events = [ {"day_key": "2026-09-02", "end_day_key": "2026-09-04"}, {"day_key": "2026-09-04", "end_day_key": "2026-09-04"}, ] assert calendar_day_counts(events) == { "2026-09-02": 1, "2026-09-03": 1, "2026-09-04": 2, } def test_date_range_overlap_semantics_are_end_exclusive_for_query_range(): event_start = datetime(2026, 9, 2, tzinfo=timezone.utc) event_end = datetime(2026, 9, 13, tzinfo=timezone.utc) assert event_overlaps_range( event_start, event_end, datetime(2026, 9, 5, tzinfo=timezone.utc), datetime(2026, 9, 7, tzinfo=timezone.utc), ) assert not event_overlaps_range( event_start, event_end, datetime(2026, 9, 14, tzinfo=timezone.utc), datetime(2026, 9, 20, tzinfo=timezone.utc), ) assert not event_overlaps_range( datetime(2026, 9, 20, tzinfo=timezone.utc), None, datetime(2026, 9, 14, tzinfo=timezone.utc), datetime(2026, 9, 20, tzinfo=timezone.utc), ) def test_sanitizer_removes_active_content_and_rewrites_assets(fixture_html): output = sanitize_picker_html(fixture_html("hostile_snapshot.html"), "https://example.org/events/") soup = BeautifulSoup(output, "html.parser") assert soup.select_one("form, iframe, base") is None assert "unsafe" not in output assert "onload=" not in output and "onclick=" not in output assert "href" not in soup.select_one("a").attrs assert soup.select_one("img")["src"] == "https://example.org/image.jpg" assert soup.select_one('link[rel="stylesheet"]')["href"] == "https://example.org/site.css" assert "what2do-selector" in output def test_picker_script_contract_contains_generalization_fields(): for field in ("containerSelector", "containerCount", "relativeSelector", "generalizedSelector", "selectorCount"): assert field in PICKER_SCRIPT assert "idPattern" in PICKER_SCRIPT assert "[id^=" in PICKER_SCRIPT def test_picker_script_supports_guided_highlights_and_preview(): for contract in ("what2do-picker-config", "what2do-picker-preview", "inconsistencies", "withinConfiguredContainer"): assert contract in PICKER_SCRIPT for highlight in ("w2d-container", "w2d-field"): assert highlight in PICKER_SCRIPT def test_sanitizer_preserves_selector_relevant_ids_and_classes(): output = sanitize_picker_html('

One

', "https://example.org") soup = BeautifulSoup(output, "html.parser") assert soup.select_one("#post-12345.event.card .title").get_text() == "One"