calendar-plugin/tests/e2e_test_cases.md

233 lines
7.3 KiB
Markdown

# End-to-End Test Cases
## Purpose
Define end-to-end scenarios that exercise:
- Admin entry CRUD
- Public/user display
- CalDAV CRUD
- Display/sync behavior from ICS
This suite uses fixtures in `tests/calendar_entries.md`.
## Pre-Run Setup
- Reset DB to known baseline.
- Seed users:
- `admin_user` with calendar admin capability
- `pending_user` with CalDAV `pending_approval`
- `rw_user` with CalDAV `active`
- Enable plugin and ensure admin menu with `Users`, `Setup`, `Diagnostics`.
## Admin Entry CRUD
### E2E-ADM-001 Create Single Event
- Fixture: CE-001
- Steps:
1. Admin logs in.
2. Open `/calendar` as a write-enabled user.
3. Create event using CE-001.
4. Save.
- Assertions:
- Success feedback shown.
- Event appears in admin list.
- Event appears in public list/day/week/month/year views.
### E2E-ADM-002 Update Single Event
- Fixture: CE-001
- Steps:
1. Open CE-001 in editor.
2. Change title to `Board Meeting (Updated)` and location.
3. Save.
- Assertions:
- Updated values shown in admin list and public views.
- Last-modified metadata changes.
### E2E-ADM-003 Delete Single Event
- Fixture: CE-001
- Steps:
1. Delete CE-001 from admin list and confirm.
- Assertions:
- Event removed from admin list.
- Event removed from public views.
- Event removed from ICS and CalDAV query results.
### E2E-ADM-004 Create Recurrence Types
- Fixtures: CE-003, CE-004, CE-005, CE-006, CE-007
- Steps:
1. Create each recurring event via editor.
2. Re-open each and verify saved recurrence config.
- Assertions:
- Persisted values match fixture.
- Preview highlights expected near-term occurrences.
- UI views render expected occurrences.
### E2E-ADM-005 Delete One Occurrence as Exception
- Fixture: CE-010
- Steps:
1. Create CE-010.
2. Delete only occurrence `2026-04-17T14:00:00+01:00`.
3. Reload series in editor and public views.
- Assertions:
- Only selected occurrence is removed.
- Series remains a single sequence (not split).
- Exception is represented in sync outputs (CalDAV/ICS rules).
### E2E-ADM-006 Table Prefix Configuration
- Steps:
1. Open Setup page.
2. Verify plugin table prefix defaults to `wp_cs_calendar`.
3. Change prefix to a valid alternative (staging only) and save.
4. Reload calendar/admin views.
- Assertions:
- Plugin continues to operate without data loss.
- Event/user records remain available after prefix migration.
### E2E-ADM-007 Setup Title Removal
- Steps:
1. Open Setup page.
2. Inspect available controls.
3. Render a page containing `[calendar]` with a custom page heading in content.
- Assertions:
- Setup does not show a `Calendar Title` field.
- Calendar shortcode does not inject its own top heading.
- Page/theme heading remains the source of title styling.
### E2E-ADM-008 User Removal Revokes Access
- Steps:
1. Register, verify, and approve a plugin user.
2. Confirm login/me works.
3. Remove the same user from `Users` admin.
- Assertions:
- Subsequent login and `/users/me` fail for removed user.
- Removed user cannot perform event write actions.
## Public/User Display
### E2E-UI-001 Cross-View Rendering
- Fixtures: CE-002..CE-007
- Steps:
1. Open public calendar UI.
2. Switch list/day/week/month/year views.
- Assertions:
- Required fields render correctly (title/time/location/category/description excerpt).
- All-day semantics for CE-002 are correct.
- Empty-state messaging works when date window has no matches.
### E2E-UI-002 DST and Leap-Year Display
- Fixtures: CE-008, CE-009
- Steps:
1. Navigate to date windows covering fixture dates.
- Assertions:
- CE-008 shows expected local times around DST boundary.
- CE-009 recurrence behavior is correct for non-leap years.
### E2E-UI-003 Calendar Shell Control Presence
- Steps:
1. Render `[calendar]` shortcode.
- Assertions:
- Login/register/verify/reset controls are present.
- Future-only filter and theme selector controls are present.
- Recurrence occurrence-delete controls are present in editor shell markup.
## CalDAV CRUD
### E2E-CDV-001 Auth Gate (Pending User)
- User: `pending_user`
- Fixtures: CE-002, CE-003
- Steps:
1. Connect CalDAV client as `pending_user`.
- Assertions:
- Authentication is denied until admin approval.
### E2E-CDV-002 Create/Update/Delete (Write User)
- User: `rw_user`
- Fixture: CE-001 as CalDAV-created item
- Steps:
1. Create event via CalDAV `PUT`.
2. Modify via CalDAV `PUT` with valid ETag precondition.
3. Delete via CalDAV `DELETE`.
- Assertions:
- Admin UI reflects CalDAV-created and updated data.
- Public UI reflects changes.
- Deletion propagates to admin/public views.
### E2E-CDV-003 Recurrence Exception Round-Trip
- User: `rw_user`
- Fixture: CE-010
- Steps:
1. Create CE-010 via admin or CalDAV.
2. Delete a single occurrence from CalDAV client.
3. Sync and inspect in admin editor.
- Assertions:
- Exception is present for deleted occurrence.
- Series stays unified (single UID sequence).
- No split-series artifact created.
### E2E-CDV-004 CalDAV Single-Occurrence Delete Sync Persistence
- User: `rw_user`
- Fixture: CE-010
- Steps:
1. Create recurring event via UI or CalDAV.
2. In CalDAV client, delete one occurrence only (client emits `EXDATE` and/or cancelled `RECURRENCE-ID` component).
3. Force sync/refresh in client and fixture UI.
4. Restart fixture and refresh again.
- Assertions:
- Deleted occurrence remains deleted after sync cycles and restart.
- Persisted exception exists in fixture data store (`recurrence_exceptions`).
- No duplicate recurrence series is created.
### E2E-CDV-005 Monthly Ordinal Round-Trip
- User: `rw_user`
- Steps:
1. Create a monthly ordinal recurring event (`weekday_of_month`, `last`, chosen weekday).
2. Sync via CalDAV and read back object.
3. Validate resulting occurrence dates in UI/API.
- Assertions:
- Monthly ordinal rule round-trips without changing meaning.
- Expected target dates (for example last Sunday of month) are preserved.
- No split or duplicate series created.
## ICS Display and Sync
### E2E-ICS-001 ICS Link Health and Parsing
- Fixtures: CE-002..CE-007
- Steps:
1. Fetch public ICS URL.
2. Parse payload with validator/parser.
- Assertions:
- HTTP content type is `text/calendar`.
- VCALENDAR envelope is valid.
- VEVENT fields map correctly from fixtures.
### E2E-ICS-002 Recurrence and Exception Export
- Fixture: CE-010 with deleted occurrence exception
- Steps:
1. Fetch ICS after exception delete.
- Assertions:
- Recurrence is represented with RRULE.
- Deleted occurrence is represented as exception (EXDATE and/or RECURRENCE-ID pattern).
- No split into independent series.
### E2E-ICS-003 Consumer Sync
- Fixtures: CE-002, CE-003, CE-010
- Steps:
1. Subscribe external test calendar to ICS feed.
2. Update source entries in admin.
3. Refresh subscriber.
- Assertions:
- Create/update/delete changes propagate.
- Exception delete for CE-010 propagates as missing occurrence in subscriber.
### E2E-ICS-004 Slug Path Link Consistency
- Steps:
1. Set `url_slug` in Setup.
2. Render `[calendar]`.
- Assertions:
- Rendered ICS and CalDAV links use slugged path.
- Links remain navigable and consistent with configured endpoint prefix.
## Traceability
- Admin CRUD/lifecycle: E2E-ADM-001..008
- User display/UI shell: E2E-UI-001..003
- CalDAV CRUD/sync: E2E-CDV-001..005
- ICS display/sync/pathing: E2E-ICS-001..004