From b62bd497ba155197943acd4ad1b1e32344dbddc0 Mon Sep 17 00:00:00 2001 From: Quinn Ftw Date: Mon, 2 Mar 2026 21:13:21 -0800 Subject: [PATCH] =?UTF-8?q?docs(qa):=20=F0=9F=93=9D=20Add=20COOP=20feature?= =?UTF-8?q?=20QA=20documentation=20with=20test=20cases,=20pass/fail=20stat?= =?UTF-8?q?uses,=20and=20bug=20tracking=20in=20Markdown.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- qa/COOP_QA_RESULTS.md | 343 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) create mode 100644 qa/COOP_QA_RESULTS.md diff --git a/qa/COOP_QA_RESULTS.md b/qa/COOP_QA_RESULTS.md new file mode 100644 index 0000000..f0f9c5d --- /dev/null +++ b/qa/COOP_QA_RESULTS.md @@ -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 B–D 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 | | | + +--- + + + +## 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** | | | | | + + + +### 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 B–D automated coverage is provided by the following test suites: + + + +| 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** | | + + + +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.