forked from GitHubMirrors/silverbullet-icalendar
2.2 KiB
2.2 KiB
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
- Environment Setup: Create docker-compose.test.yml and a test_data/ directory with at least one problematic Outlook .ics file.
- Mock Server: Configure a lightweight container (e.g., Nginx or Python) to serve the test_data/.
- Playwright Scaffolding: Initialize Playwright and create a tests/sync.spec.ts that handles authentication and plug installation.
- Verification Logic: Implement the console-listener and index-counting logic in the test suite.
- 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.