# Specification: Testing Infrastructure (Playwright & Docker) ## Overview Our current testing strategy relies on manual mocks that don't capture the complexity of real-world iCalendar data (specifically from Outlook/Office 365). This has led to multiple regressions where object-type RRULE properties cause the plug to fail. This track implements a full E2E and integration testing suite using Docker, Playwright, and real .ics samples. ## Functional Requirements - **Dockerized Environment:** A docker-compose.test.yml that spins up: - **SilverBullet:** A clean instance for plug installation. - **Mock ICS Server:** A simple web server serving files from a test_data/ directory. - **Playwright E2E Suite:** - **Automation:** Automates logging into SilverBullet, installing the freshly built icalendar.plug.js, and triggering a sync. - **Console Monitoring:** Automatically fails the test if any Error or TypeError is detected in the browser console. - **Index Verification:** Uses SilverBullet syscalls (via Playwright evaluate) or UI queries to verify that the expected number of ical-event objects exist in the index. - **Real-Data Integration Tests:** Deno unit tests that parse actual .ics files (e.g. mock_calendar.ics) using the real ts-ics parser before calling expandRecurrences. ## Implementation Steps 1. Environment Setup: Create docker-compose.test.yml and a test_data/ directory with at least one problematic Outlook .ics file. 2. Mock Server: Configure a lightweight container (e.g., Nginx or Python) to serve the test_data/. 3. Playwright Scaffolding: Initialize Playwright and create a tests/sync.spec.ts that handles authentication and plug installation. 4. Verification Logic: Implement the console-listener and index-counting logic in the test suite. 5. Smoke Test: Fix the known WORKWEEKSTART error and verify that the new infrastructure catches it if the fix is reverted. ## Acceptance Criteria - [ ] A single command (e.g., make test-e2e) builds the plug, starts the containers, and runs the Playwright suite. - [ ] The E2E suite successfully identifies the WORKWEEKSTART error when run against the current (buggy) code. - [ ] The E2E suite passes after the WORKWEEKSTART fix is applied.