# 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.
### 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).
### 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`).
- 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 `