Comprehensive QA coverage for the SIPP iOS app, spanning the consumer experience (map search → ordering → loyalty) and the shop experience (café management → live order queue). Use this document while planning manual runs, writing automated UI tests, or preparing release sign‑offs.
1. Test Environment & Tooling
Hardware & OS: iPhone 13–15 simulators on iOS 17.x plus at least one physical device to validate camera/QR scanning and StoreKit flows.
Build configuration
Copy Config.example.xcconfig → Config.xcconfig and Config.production.example.xcconfig → Config.production.xcconfig.
Populate Supabase URLs/keys, App Store subscription IDs, and feature flags (keep real keys out of git).
Build with xcodebuild -scheme sipp -destination 'platform=iOS Simulator,name=iPhone 15' build. Run tests via xcodebuild test ....
Test accounts & data
Consumer: at least one account with no orders, one with an active membership (credit balance), and one lapsed account.
Shop: an owner account with ≥1 café (for order queue/staff flows) and a staff-only account.
Preload Products.storekit for StoreKit testing; stage menu/catalog data for at least two cafés.
Keep seeded orders/carts in Supabase so QA can perform cross-role tests end-to-end.
2. Consumer Journey Scenarios
2.1 Authentication & Role Selection (Features/Authentication)
Sign in/out, sign up, and password reset for both Consumer and Shop roles.
Validate inline error messaging (bad email, weak password, server error).
Ensure the segmented control switches roles without losing typed credentials.
Confirm AppState restores sessions on cold launch and clears data on logout (cart, profile, tokens).
2.2 Home Map, Search & Quick Actions (Features/Home)
Location permission prompts, map centering, and viewport searches (search text vs “Near Me” context chip).
Cafe list density: verify annotations, selection glow, and detail sheet presentation.
Quick actions: Cart (ensure not shown when empty), Near Me, and Scan (launches QR scanner sheet).
Launch the subscription screen and exercise both purchase paths:
Subscribe with Apple (StoreKit): buy, cancel, and restore purchases in sandbox; ensure AppState.subscriptionStatus transitions correctly (active → expired → none) and that visit balances update after receipt sync.
Pay with Card (Stripe Checkout): tap the pink CTA, complete a Stripe test payment, and confirm the app returns to the success URL with refreshed visits. Cancel mid-flow to ensure no charge but the CTA remains enabled.
Tap Manage billing to open the Stripe Billing Portal; make a change (plan switch, cancellation) and verify the app reflects it once you dismiss the sheet.
Confirm the Subscription screen always shows the latest visit balance after either flow (trigger a manual refresh if needed).
2.9 Profile & Settings (Features/Profile)
Update display name, theme, notification preferences, and logout.
Unit: continue covering CartStore, services, and view models under sippTests.
UI: add XCUITests for login, home map smoke, cart sheet presentation (recent regression), ordering flow, and basic shop queue action.
Snapshot tests for key screens (Home, Ordering, Shop Dashboard) to guard against UI regressions.
6. Release Checklist
Run xcodebuild test -scheme sipp -destination 'platform=iOS Simulator,name=iPhone 15'.
Execute manual smoke on latest production configuration (consumer + shop).
Validate StoreKit purchases in sandbox & revoke to ensure grace-period logic works.
Confirm Supabase migrations (if any) deployed and backward compatible.
Capture before/after screenshots for any UI-affecting PR (per repository guidelines).
Ensure Config*.xcconfig with real keys remain untracked; verify build settings reference base configs correctly.
Update QA doc when new features ship (e.g., loyalty perks, new shop modules).
7. Submitting QA Tickets
When filing an issue (GitHub, Linear, Jira, etc.), include:
Title — concise summary, e.g., Subscription: Pay with Card hangs on loading.
Environment — device model + iOS version, build number/TestFlight version, Supabase project (staging/prod), and whether you used a simulator or physical device.
Preconditions — account role (consumer/shop), membership state (active, expired), data fixtures (cart contents, café), feature flags.
Steps to Reproduce — numbered list referencing screen names from this doc (Home → Profile → Subscription, etc.), including form inputs and waits.
Expected vs Actual — bullet what should happen versus what did.
Artifacts — attach:
Screenshots/video (full screen).
Console logs or device logs (copy/paste or attach .log).
Edge-function output (curl/HTTP response) when available.
For regressions, link to the last known good build/PR. For backend issues, paste the exact error surfaced in the UI (e.g., “Set STRIPE_PRICE_STANDARD”) so engineers know which env var or service failed.
Use this plan as the living reference for regression passes. When new features merge, append scenarios to the relevant consumer or shop sections and link to tracking tickets so QA can prioritize by release scope. The directories referenced above map one-to-one with on-device screens, making it easy to discover the underlying implementation if additional instrumentation or debug logging is needed.