calendar-plugin/docs/fixture.md

3.3 KiB

Local Compatibility Harness

Purpose

Run a local, deterministic compatibility harness that exercises the current requirements for:

  • Admin navigation pages (Edit Calendar, Users, Setup)
  • API CRUD and user lifecycle endpoints
  • Shared-calendar CalDAV read/write flows
  • ICS export endpoint

Seed data includes canonical test fixtures CE-001 through CE-010 from tests/calendar_entries.md.

Quick Start

From repository root:

./compatibility-layer/reset.sh
./compatibility-layer/seed.sh
./compatibility-layer/run.sh

Server default:

  • http://127.0.0.1:8080

WP Emulation Check

Run the stand-alone local WordPress emulation check (loads plugin code from code/ and runs a minimal E2E flow):

./compatibility-layer/e2e_wp_emulation.php

Harness Authentication Model

This harness uses simple test auth headers/credentials to emulate behavior.

Admin/API (WordPress-style harness auth)

  • Header: X-WP-User: admin (full admin)
  • Header: X-WP-User: editor (editor-limited)

CalDAV (plugin user basic auth over local HTTP harness)

Seeded users:

  • rw_user@example.test / rwpass123456 (write)
  • ro_user@example.test / ropass123456 (read_only)

Key Endpoints

Admin Pages

  • /wp-admin/admin.php?page=calendar-edit&as=admin
  • /wp-admin/admin.php?page=calendar-users&as=admin
  • /wp-admin/admin.php?page=calendar-setup&as=admin

Interactive pages available:

  • Public calendar UI: /calendar
  • User self-service portal: /users

If setup url_slug is configured (for example demo), canonical URLs move under that prefix (for example /demo/calendar, /demo/users, /demo/wp-json/calendar/v1/..., /demo/calendar.ics, /demo/caldav/...).

API

  • /wp-json/calendar/v1/events
  • /wp-json/calendar/v1/events/{id}
  • /wp-json/calendar/v1/events/{id}/occurrences/{occurrence_key}
  • /wp-json/calendar/v1/users/register
  • /wp-json/calendar/v1/users/verify
  • /wp-json/calendar/v1/users/forgot-password
  • /wp-json/calendar/v1/users/reset-password
  • /wp-json/calendar/v1/users/{id}/request-write
  • /wp-json/calendar/v1/admin/users
  • /wp-json/calendar/v1/admin/users/{id}
  • /wp-json/calendar/v1/admin/setup
  • /wp-json/calendar/v1/public/events
  • /wp-json/calendar/v1/users/me

ICS

  • /calendar.ics

CalDAV (single shared public calendar)

  • /caldav/
  • /caldav/calendars/
  • /caldav/calendars/public/
  • /caldav/calendars/public/{object_id}.ics

Smoke Commands

List events:

curl -sS -H 'X-WP-User: admin' http://127.0.0.1:8080/wp-json/calendar/v1/events

Delete one recurring occurrence as exception:

curl -sS -X DELETE \
  -H 'X-WP-User: admin' \
  "http://127.0.0.1:8080/wp-json/calendar/v1/events/10/occurrences/2026-04-17T14:00:00+01:00" \
  -i

Fetch ICS:

curl -sS http://127.0.0.1:8080/calendar.ics

CalDAV read as read-only user:

curl -sS -u ro_user@example.test:ropass123456 \
  http://127.0.0.1:8080/caldav/calendars/public/1.ics -i

Notes

  • This compatibility harness is intentionally minimal and deterministic for local development.
  • It is not a production security implementation.
  • It enforces the shared-calendar model with per-user read/write permissions.
  • Current implementation delegates to fixture/ internals via wrapper scripts in compatibility-layer/.