233 lines
7.3 KiB
Markdown
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
|