# Smoke Test Suite ## Purpose Define a fast, high-signal regression suite that can be run frequently (for example on each commit or before deployment). Target runtime should remain short (for example <= 5 minutes in CI). ## Smoke Fixtures Use a minimal subset: - CE-001 (single timed) - CE-002 (all-day) - CE-003 (daily recurring) - CE-010 (recurring with single-occurrence delete exception) ## Smoke Tests ### SMK-001 Plugin Health - Plugin activates without fatal errors. - Calendar admin main menu and sub-entries render: - `Users` - `Setup` - `Diagnostics` ### SMK-002 CRUD Happy Path - Create CE-001 using write-enabled calendar UI/API. - Update CE-001 title. - Delete CE-001. - Assert expected success feedback and list updates. ### SMK-003 Recurrence Exception Behavior - Create CE-010. - Delete single occurrence (`2026-04-17T14:00:00+01:00`). - Assert sequence remains intact and one exception is recorded. ### SMK-004 Public UI Rendering - Render shortcode page with CE-002 and CE-003 present. - Assert no runtime error and event data is visible in default view. - Sidebar shortcode (`[calendar_sidebar_upcoming]`) renders event date/time in `Europe/London` timezone semantics. ### SMK-005 ICS Endpoint - Fetch ICS link. - Assert `200` and `text/calendar`. - Assert CE-003 appears with recurrence metadata. - Assert CE-010 exception is represented (no split-series artifact). ### SMK-006 CalDAV Read/Write Gate - `pending_approval` or unverified user: cannot authenticate. - `active` user: can discover/read/create/update/delete one event successfully. - Monthly ordinal recurrence must round-trip for CalDAV writes (`BYDAY=2SA` and `BYSETPOS=-1` cases). - Thunderbird-style `DESCRIPTION;ALTREP="data:text/html,..."` updates must persist clean plain-text `DESCRIPTION` values without leaking `ALTREP` parameter content into stored descriptions. ### SMK-007 API Smoke (If API Exposed) - Event create/list/delete basic path. - User register/verify/admin-approval path. - One unauthorized request check. ### SMK-008 Security Regression Smoke - Register and forgot-password responses must not include raw verification/reset tokens. - Register flow must trigger rate limiting (`429`) under abusive request volume. - Stored user password hashes must use hardened hash format (not plaintext / not legacy fast hash). - CalDAV object handling must preserve strict resource filename semantics (UUID-like `.ics` names work; unknown numeric path returns `404`). - Legacy local harness check is archived at `fixture-tests/fixture_security_smoke.sh`. ### SMK-009 CalDAV Client Discovery Compatibility - Unauthenticated `GET /caldav/` must return `401` with `WWW-Authenticate: Basic ...`. - Authenticated `OPTIONS /caldav/` must advertise DAV calendar capability (`DAV: 1, calendar-access`) and discovery methods. - Authenticated `PROPFIND /caldav/` must expose: - `current-user-principal` - calendar home set path - discoverable calendar collection href - Authenticated `PROPFIND` on principal must return `calendar-home-set`. - Authenticated `PROPFIND /caldav/calendars/` must include calendar collection metadata (``) and supported component set (`VEVENT`). - Authenticated `GET` on calendar collection (`.../calendars/public/`) must return `200` (availability probe compatibility). - Authenticated `REPORT sync-collection` must succeed for both trailing slash and no-trailing-slash collection URLs. - No-change `sync-collection` (current token) must return no change entries. - Legacy local harness check is archived at `fixture-tests/fixture_caldav_client_compat_smoke.sh`. ### SMK-010 Lifecycle Controls (Staging Only) - Verify Setup exposes `Uninstall Cleanup` setting with: - `keep` (default) - `remove` - Verify deactivation does not remove tables/data. - Verify uninstall behavior follows selected mode (`keep` preserves tables, `remove` drops plugin-owned tables/options). - Full destructive flow is defined in `tests/lifecycle_test_cases.md`. ## Failure Handling - Any smoke failure blocks merge/deploy. - Capture artifact bundle: logs, request/response snippets, and failing fixture payload. ## Suggested Run Schedule - Per commit: SMK-001..007 - Pre-release: smoke + full E2E + full API suite + SMK-009 - Nightly: full E2E + compatibility checks with target CalDAV/ICS clients ## Remote Runner - Automated remote API+E2E smoke runner: `./tests/run_remote_tests.sh` - Optional overrides: - `./tests/run_remote_tests.sh --base-url https://chezstephens.org.uk --user --password `