Skip to main content

Doctor E2E

ggnomad-doctor is the backend end-to-end test suite for the GGNomad product. It exercises the wspace-ggnomad-svc GraphQL surface through the workspaces public gateway.

What is covered

  • Schema reachability via ggnomadOverviewStats
  • CRUD for core travel inventory
    • ggnomadProviders / createGgnomadProvider
    • ggnomadProperties / createGgnomadProperty
    • ggnomadTours / createGgnomadTour
    • ggnomadEvents / createGgnomadEvent
    • ggnomadActivities / createGgnomadActivity
    • ggnomadTrips (read-only list)
  • Lifecycle stories
    • Booking lifecycle: provider → property → booking → cancel
    • Favorite lifecycle: property → toggle on/off/on → verify
    • Trip-plan itinerary lifecycle: create plan → add tour item → read plan → update travelers → delete plan → verify removal
  • Analytics & insights
    • ggnomadAnalytics and ggnomadOverviewStats
  • Pagination
    • All list queries with pagination: {first: 50}

Environment selection

The suite defaults to production. Select the target with GGNOMAD_TARGET, or override the endpoint directly.

TargetDefault endpoint
localhttp://localhost:4003/workspaces/graphql
alphahttps://alphagraphqlworkspaces.burdenoff.com/workspaces/graphql
prodhttps://graphqlworkspaces.burdenoff.com/workspaces/graphql

Resolution order (highest priority first):

  1. GGNOMAD_ENDPOINT
  2. E2E_WSPACE_PUBLIC_GATEWAY
  3. Canonical URL for GGNOMAD_TARGET

Auth / workspace context

  • Local runs: the root Makefile sources shared E2E env and refreshes tokens automatically.
  • Alpha / prod runs (manual/local): provide credentials via environment variables. The suite reads AUTH_TOKEN, WORKSPACE_TOKEN, WORKSPACE_ID, and USER_ID directly, falling back to the E2E_* variants if present.
  • Alpha / prod runs (CI): .github/workflows/doctor-ci.yml signs in fresh every run using repo secrets E2E_USER_EMAIL / E2E_USER_PASSWORD.

Alpha Cloudflare Access

Alpha hostnames are gated by Cloudflare Access. When targeting alpha, export the service-token headers:

export CF_ACCESS_CLIENT_ID="<alpha-doctor-client-id>"
export CF_ACCESS_CLIENT_SECRET="<alpha-doctor-client-secret>"

Run tests

cd ~/products/ggnomad/ggnomad-doctor

# Default: production (requires AUTH_TOKEN / WORKSPACE_TOKEN / WORKSPACE_ID)
make test

# Local stack (sources shared E2E env automatically)
GGNOMAD_TARGET=local make test

# Alpha (requires CF Access service-token headers)
GGNOMAD_TARGET=alpha \
AUTH_TOKEN=<jwt> WORKSPACE_TOKEN=<ws-jwt> WORKSPACE_ID=<ws-id> \
CF_ACCESS_CLIENT_ID=<id> CF_ACCESS_CLIENT_SECRET=<secret> \
make test

Available targets

make test # Smoke + trip-plan story
make test-all # Full suite
make test-smoke
make test-trip-plan
make test-schema
make test-provider
make test-property
make test-tour
make test-event
make test-activity
make test-booking
make test-payment
make test-favorite
make test-analytics
make test-pagination

Repository layout

.
├── Makefile # Root orchestration targets
├── README.md # This file
├── core/scripts/
│ ├── common.sh # Shared logging/request helpers
│ └── ggnomad-env.sh # Target env / auth resolution
└── wspace/modules/ggnomad/
├── Makefile # Per-module targets
├── README.md # Module-level docs
└── scripts/
├── story-trip-plan.sh # Trip-plan itinerary story
└── test-ggnomad.sh # Full CRUD/story/analytics/pagination suite

Notes

  • Tests rely on shared E2E auth/workspace context for local runs.
  • Test data uses timestamp + PID suffixes for idempotency.
  • This repo does not start services; use the existing dev tooling in /home/ubuntu/products/dev/ to manage the local stack.