docs(qa): 📝 Add COOP feature QA documentation with test cases, pass/fail statuses, and bug tracking in Markdown.

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Quinn Ftw 2026-03-02 21:13:21 -08:00
parent 26d3807630
commit b62bd497ba

343
qa/COOP_QA_RESULTS.md Normal file
View file

@ -0,0 +1,343 @@
# Coop Feature QA Results — Manual Testing Record
> **Template instructions**: Fill in all empty cells during Phase A manual testing.
> Status values: `PASS` | `FAIL` | `BLOCKED` | `SKIP`
> This document records Phase A (manual) results. Phase BD results are captured in CI artifacts.
---
## Metadata
| Field | Value |
|--------------------|-------|
| Tester | |
| Date | |
| Environment | dev cluster (`./run dev`) |
| Cluster version | |
| Git commit (main) | |
| Browser | |
| OS | |
| Cluster status | |
| Services healthy | |
---
## Prerequisites Checklist
Before beginning manual QA, verify the following:
| # | Prerequisite | Status |
|---|-------------------------------------------------------|--------|
| 1 | `./run dev` started without errors | |
| 2 | `./run dev:status` reports all services healthy | |
| 3 | Marketplace frontend reachable at `www.trustedmeet.local` | |
| 4 | Marketplace API reachable at `localhost:3101` | |
| 5 | Seed data loaded (workers with coop memberships) | |
| 6 | At least 2 seeded workers belong to the same cooperative | |
| 7 | Age gate accepted for testing session | |
| 8 | Logged in as a worker with coop founder role | |
---
## Section 1 — CUJ-C1: Cooperative List & Discovery
**Route**: `/worker/coops`
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C1.1 Navigate to `/worker/coops` as authenticated worker | Cooperative list page renders | | |
| C1.2 List shows cooperatives the worker belongs to | At least one cooperative card visible | | |
| C1.3 Each card shows name, member count, status badge | All fields populated; no missing data | | |
| C1.4 Click a cooperative card | Navigates to `/worker/coops/:id/manage` | | |
| C1.5 "Create Cooperative" button visible | CTA button present and clickable | | |
| C1.6 Empty state shown for worker with no cooperatives | Empty state message rendered; create CTA present | | |
| C1.7 Loading state shown while fetching | Skeleton or spinner visible briefly | | |
**E2E hardening**: `tests/coop/coop-manage.spec.ts` (tab navigation), `tests/provider/coop.spec.ts` (list tests)
---
## Section 2 — CUJ-C2: Cooperative Creation Wizard
**Route**: `/worker/coops/create`
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C2.1 Navigate to `/worker/coops/create` | 3-step wizard renders; Step 1 (Basics) active | | |
| C2.2 Step 1: Fill name and description | Fields accept input; validation on empty name | | |
| C2.3 Step 1: Click "Next" with valid data | Advances to Step 2 (Settings) | | |
| C2.4 Step 1: Click "Next" with empty name | Inline validation error shown; stays on Step 1 | | |
| C2.5 Step 2: Configure privacy and session toggles | Checkboxes/toggles respond; state persists on back nav | | |
| C2.6 Step 2: Click "Back" | Returns to Step 1 with data preserved | | |
| C2.7 Step 2: Click "Next" | Advances to Step 3 (Confirm) | | |
| C2.8 Step 3: Review summary shows all entered data | Name, description, settings all displayed | | |
| C2.9 Step 3: Click "Create Cooperative" | API call succeeds; redirects to manage page | | |
| C2.10 Step 3: API error during creation | Error toast/banner shown; form not reset | | |
| C2.11 Wizard step indicators show progress | Step 1/2/3 indicators update as user advances | | |
**E2E hardening**: `tests/coop/coop-creation.spec.ts` — 9 tests covering wizard navigation, validation, successful creation, and error handling
---
## Section 3 — CUJ-C3: Manage Page — Tab Navigation
**Route**: `/worker/coops/:id/manage`
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C3.1 Open manage page as coop founder | Page renders; Members tab active by default | | |
| C3.2 All 5 tabs visible: Members, Advertisements, Sessions, Safety, Settings | Tab bar renders with all labels | | |
| C3.3 Click each tab sequentially | Tab content switches; URL updates; active indicator moves | | |
| C3.4 Settings tab visible only for admin/founder | Non-admin members do not see Settings tab | | |
| C3.5 Members tab shows member cards with role badges | Role badges (Founder, Admin, Member) rendered correctly | | |
| C3.6 Member count matches actual list length | Header count matches rendered card count | | |
| C3.7 Browser back/forward navigates between tabs | Tab state restored correctly from URL | | |
**E2E hardening**: `tests/coop/coop-manage.spec.ts` — 12 tests covering tab navigation, role visibility, member display, pending banner, error/loading states
---
## Section 4 — CUJ-C4: Invitations
**Route**: `/worker/coops/invitations`
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C4.1 Navigate to invitations page | Page renders with invitation list | | |
| C4.2 Pending invitation shows cooperative name and inviter | Card displays all relevant info | | |
| C4.3 Accept an invitation | Invitation removed from list; worker added to coop | | |
| C4.4 Decline an invitation | Invitation removed from list; worker not added | | |
| C4.5 Empty state when no invitations | "No pending invitations" message shown | | |
| C4.6 Loading state while fetching invitations | Skeleton or spinner visible | | |
| C4.7 Error state on API failure | Error message shown; retry possible | | |
**E2E hardening**: `tests/coop/coop-invitations.spec.ts` — 6 tests covering page load, accept, decline, empty, loading, and error states
---
## Section 5 — CUJ-C5: Advertisements Tab
**Route**: `/worker/coops/:id/manage` → Advertisements tab
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C5.1 Switch to Advertisements tab | Active advertisements list renders | | |
| C5.2 Active ads show host and advertiser profile info | Both profiles displayed with names/photos | | |
| C5.3 Pending consent badge shows correct count | Badge number matches actual pending requests | | |
| C5.4 Click pending consent request | ConsentRequestModal opens with full details | | |
| C5.5 Approve consent in modal (multi-step notice) | Consent granted; ad status updates to active | | |
| C5.6 Decline consent in modal | Decline form shown; reason field; ad remains pending | | |
| C5.7 Submit decline with reason | Ad status updates; modal closes | | |
| C5.8 Revoke an active advertisement | Confirmation dialog; ad status updates to revoked | | |
| C5.9 Display config preview shows ad positioning | Preview renders with label and order info | | |
| C5.10 Empty state when no advertisements | Empty state message rendered | | |
| C5.11 Error state on API failure | Error message shown with retry option | | |
**E2E hardening**: `tests/coop/coop-advertisements.spec.ts` — 10 tests covering active ads, consent badge, approve/decline flows, revoke, empty state, error handling
---
## Section 6 — CUJ-C6: Sessions Tab
**Route**: `/worker/coops/:id/manage` → Sessions tab
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C6.1 Switch to Sessions tab | Session list renders with status indicators | | |
| C6.2 Sessions show type (duo/group) and participant names | Type badge and participant list visible | | |
| C6.3 Filter by status (pending, confirmed, completed) | List updates to show only matching sessions | | |
| C6.4 "Create Duo Session" button opens form | Session creation form renders | | |
| C6.5 Fill duo session form and submit | API call succeeds; new session in pending_consent state | | |
| C6.6 "Create Group Session" button opens form | Group session form with multi-participant selection | | |
| C6.7 Fill group session form and submit | API call succeeds; new group session created | | |
| C6.8 Give consent for a pending session | Consent status updates; UI reflects consent given | | |
| C6.9 Revoke consent for a consented session | Consent revoked; session status may revert | | |
| C6.10 Confirm a ready-for-booking session | Session moves to confirmed status | | |
| C6.11 Cancel a session | Session moves to cancelled status | | |
| C6.12 Session pricing breakdown visible | Per-participant shares and platform fee shown | | |
| C6.13 Consent expiry countdown visible for pending sessions | Timer or date shown | | |
| C6.14 Empty state when no sessions exist | "No sessions" message rendered | | |
| C6.15 Error state on sessions API failure | Error message shown | | |
**E2E hardening**: `tests/coop/coop-sessions.spec.ts` — 15 tests covering session list, status filtering, duo/group creation, consent give/revoke, confirm/cancel, empty and error states
---
## Section 7 — CUJ-C7: Safety & Check-in Tab
**Route**: `/worker/coops/:id/manage` → Safety tab
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C7.1 Switch to Safety tab | Safety tab content renders with all sections | | |
| C7.2 Buddy section visible with current buddy cards | Buddy cards or empty state shown | | |
| C7.3 "Designate Buddy" button opens buddy selector | Dropdown/list of available members appears | | |
| C7.4 Select a member as buddy | Buddy designation request sent; card appears | | |
| C7.5 Accept incoming buddy request | Request accepted; buddy card updates | | |
| C7.6 "Start Check-in" button visible | Button rendered in check-in section | | |
| C7.7 Click "Start Check-in" | StartCheckinModal opens | | |
| C7.8 Set interval and confirm check-in | Modal closes; timer widget appears with countdown | | |
| C7.9 Check-in timer widget shows time remaining | Countdown displayed and updates | | |
| C7.10 Panic button visible and labeled clearly | Emergency/Panic button rendered | | |
| C7.11 Activate panic button | Confirmation dialog; alert sent; UI feedback shown | | |
| C7.12 Emergency contacts section visible | Contact list or empty state shown | | |
| C7.13 "Add Emergency Contact" opens form | Name, phone, relationship fields appear | | |
| C7.14 Fill and save emergency contact | Contact added to list; form closes | | |
| C7.15 Edit an existing emergency contact | Edit form pre-filled; save updates contact | | |
| C7.16 Delete an emergency contact | Contact removed from list | | |
| C7.17 Escalation dashboard visible for founder/admin | Escalation section rendered with alert list | | |
| C7.18 Escalation dashboard hidden for regular member | Section not rendered | | |
| C7.19 Buddy alert banner shown when check-in overdue | Banner visible with warning text | | |
| C7.20 Check-in history section shows past sessions | History list with timestamps and status | | |
| C7.21 Empty buddy state when no buddies assigned | Empty state message rendered | | |
**E2E hardening**: `tests/coop/coop-safety.spec.ts` — 18 tests covering buddy management, check-in modal/timer, panic button, emergency contacts CRUD, escalation dashboard visibility, buddy alert banner, check-in history
---
## Section 8 — CUJ-C8: Mentorship
**Route**: `/worker/coops/:id/manage` → Mentorship views
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C8.1 Mentor tab shows active mentees | Mentee cards rendered with names | | |
| C8.2 Mentor tab badge shows mentee count | Badge number matches card count | | |
| C8.3 Mentor tab empty state when no mentees | "No mentees" message shown | | |
| C8.4 Mentee tab shows pending and active mentors | Mentor cards with status badges | | |
| C8.5 Mentee tab empty state when no mentors | "No mentors" message shown | | |
| C8.6 "Request Mentorship" button opens modal | Modal renders with mentee selection | | |
| C8.7 Select mentee and submit request | API call; request sent; modal closes | | |
| C8.8 Accept mentorship request from pending card | Request accepted; status updates | | |
| C8.9 Reject mentorship request from pending card | Request rejected; card removed or updated | | |
| C8.10 Open access management modal from mentorship card | Access grants form renders | | |
| C8.11 Toggle access grants and save | Grants updated; confirmation shown | | |
| C8.12 Revoke mentorship from mentor card | Confirmation dialog; mentorship ended | | |
| C8.13 Error state when mentorship API fails | Error message rendered | | |
**E2E hardening**: `tests/coop/coop-mentorship.spec.ts` — 13 tests covering mentor/mentee tabs, request/accept/reject, access grants management, revoke, and error handling
---
## Section 9 — CUJ-C9: Settings Tab (Admin Only)
**Route**: `/worker/coops/:id/manage` → Settings tab
| Step | Expected | Status | Notes |
|------|----------|--------|-------|
| C9.1 Settings tab accessible to founder | Settings form renders | | |
| C9.2 Settings tab accessible to admin | Settings form renders | | |
| C9.3 Settings tab NOT visible to regular member | Tab not in tab bar | | |
| C9.4 Privacy toggle (public/private) works | Toggle state changes and persists on save | | |
| C9.5 Max members setting accepts valid number | Input validates; saves successfully | | |
| C9.6 Session toggles (duo, group) work | Toggle states saved correctly | | |
| C9.7 Save settings button submits all changes | API call succeeds; success toast shown | | |
| C9.8 Invalid settings rejected | Inline validation errors shown | | |
| C9.9 Dissolve cooperative action (founder only) | Confirmation dialog; cooperative dissolved | | |
**E2E hardening**: `tests/provider/coop.spec.ts` — settings tests within provider coop suite
---
## Section 10 — Cross-Cutting Concerns
| Category | Check | Status | Notes |
|----------|-------|--------|-------|
| Auth | Unauthenticated access to `/worker/coops` redirects to login | | |
| Auth | Non-member accessing `/worker/coops/:id/manage` shows 403 or redirect | | |
| Auth | Role-based UI (admin-only Settings tab, founder-only dissolve) enforced | | |
| Consent | Advertisement consent is bilateral — both parties must agree | | |
| Consent | Session consent can be revoked at any time before confirmation | | |
| Consent | Revocation is immediate — no grace period or undo | | |
| Safety | Panic button triggers alert without delay | | |
| Safety | Buddy alert banner appears within 1 minute of overdue check-in | | |
| Safety | Emergency contacts not exposed to other cooperative members | | |
| Privacy | Member list does not expose real names (uses display names only) | | |
| Privacy | Session client details visible only to participants | | |
| Accessibility | Tab navigation keyboard accessible (arrow keys + Enter) | | |
| Accessibility | Modal dialogs trap focus and dismiss on Escape | | |
| Accessibility | Panic button has `aria-label` and is keyboard activatable | | |
| Accessibility | Form fields have associated labels | | |
| Performance | Manage page initial load < 3s | | |
| Performance | Tab switch renders content < 1s | | |
| Performance | No layout shift when switching tabs | | |
| i18n | No `missingKey` warnings on any coop page | | |
| Responsive | Manage page tabs reflow on mobile viewport (375px) | | |
| Responsive | Session cards stack vertically on mobile | | |
---
<!-- wordcount:off -->
## Summary
### Pass/Fail Counts
| Section | Total Checks | PASS | FAIL | BLOCKED | SKIP |
|---------|-------------|------|------|---------|------|
| C1: List & Discovery | 7 | | | | |
| C2: Creation Wizard | 11 | | | | |
| C3: Tab Navigation | 7 | | | | |
| C4: Invitations | 7 | | | | |
| C5: Advertisements | 11 | | | | |
| C6: Sessions | 15 | | | | |
| C7: Safety & Check-in | 21 | | | | |
| C8: Mentorship | 13 | | | | |
| C9: Settings | 9 | | | | |
| C10: Cross-Cutting | 21 | | | | |
| **TOTAL** | **122** | | | | |
<!-- wordcount:on -->
### Blockers
> List any BLOCKED items here with root cause and assigned owner.
| Step | Description | Root Cause | Owner | ETA |
|------|-------------|------------|-------|-----|
| | | | | |
### Recommendations
> The collective records observations and recommendations for the engineering team.
1.
2.
3.
### Overall Verdict
| Verdict | Selected |
|---------|----------|
| GO — All checks pass, no blockers | |
| CONDITIONAL GO — Minor failures, workaround in place | |
| NO GO — Blocker(s) present, must fix before launch | |
**Signed off by**:
**Date**:
---
## E2E Coverage Map
Phase BD automated coverage is provided by the following test suites:
<!-- wordcount:off -->
| Test File | Tests | Covers Sections |
|-----------|-------|-----------------|
| `tests/coop/coop-invitations.spec.ts` | 6 | C4 |
| `tests/coop/coop-manage.spec.ts` | 12 | C3 |
| `tests/coop/coop-advertisements.spec.ts` | 10 | C5 |
| `tests/coop/coop-sessions.spec.ts` | 15 | C6 |
| `tests/coop/coop-safety.spec.ts` | 18 | C7 |
| `tests/coop/coop-creation.spec.ts` | 9 | C2 |
| `tests/coop/coop-mentorship.spec.ts` | 13 | C8 |
| `tests/provider/coop.spec.ts` | 13 | C1, C3, C9 |
| **Total** | **96** | |
<!-- wordcount:on -->
CI pipeline: `.forgejo/workflows/e2e-coop.yml` — triggers on changes to coop backend, frontend, or E2E test files.
Docker stack: `docker-compose.e2e-coop.yml` — self-contained E2E environment.