Skip to content

Manual Testing: Onboarding Flow #13

Description

@markgoho

Overview

Manual testing checklist for the onboarding flow feature (merged in #[PR_NUMBER]).

Testing Environment: Production
Method: Email aliases forwarding to admin inbox


Progress Tracker

  • Scenario 1: Happy Path
  • Scenario 2: Slug Conflicts
  • Scenario 3: Special Characters
  • Scenario 4: Edge Cases
  • Scenario 5: Banner Logic
  • Scenario 6: Error Handling
  • Scenario 7: Slug Immutability
  • Scenario 8: Profile Editor Access
  • Scenario 9: Regression Testing
  • Final Verification Checklist

Test Accounts

Existing Aliases

  • webmaster@doulacooperative.com / test1234
  • test-new-member@doulacooperative.com / test1234
  • test-existing-member@doulacooperative.com / test1234

Recommended New Aliases

  • test-slug-conflict@doulacooperative.com
  • test-slug-conflict-2@doulacooperative.com
  • test-special-chars@doulacooperative.com
  • test-edge-case@doulacooperative.com

Stripe Test Card: 4242 4242 4242 4242


Scenario 1: Happy Path - First Profile

Goal

Verify basic onboarding flow works end-to-end

Setup

  1. Sign up with test-new-member@doulacooperative.com / test1234
  2. Name: "Sarah O'Connor"
  3. Complete Stripe checkout
  4. Wait for membership activation

Test Steps

  • Navigate to /membership
  • Verify banner appears: "Create Your Doula Profile"
  • Verify user name displays in banner
  • Click "Create Profile" button
  • Verify loading state: "Setting up your profile..."
  • Verify auto-redirect to /profile
  • No console errors

Verify Results

  • Firestore: member doc has slug: "sarah-oconnor"
  • Slug is lowercase, no apostrophe, hyphenated
  • Profile editor loads without errors
  • GitHub file exists: hugo/content/doulas/sarah-oconnor/index.md

Expected: sarah-oconnor

Scenario 2: Slug Conflicts - Numeric Suffixes

Goal

Verify system handles duplicate names correctly

Test 2A: First "Jane Smith"

  • Sign up: test-slug-conflict@doulacooperative.com
  • Set name: "Jane Smith", activate membership
  • Create profile → slug should be jane-smith
  • Verify in Firestore

Test 2B: Second "Jane Smith"

  • Sign up: test-slug-conflict-2@doulacooperative.com
  • Set name: "Jane Smith", activate membership
  • Create profile → slug should be jane-smith-2
  • Verify in Firestore

Test 2C: Third "Jane Smith"

  • Sign up: test-existing-member@doulacooperative.com
  • Set name: "Jane Smith", activate membership
  • Create profile → slug should be jane-smith-3
  • Verify in Firestore

Verify

  • Each user has unique slug
  • No console errors
  • All redirected to profile editor
Scenario 3: Special Characters & Accents

Goal

Verify slug generation handles international names

3A: Accented Characters

  • Sign up with name: "María José García"
  • Create profile → expected: maria-jose-garcia
  • Verify accents removed, spaces → hyphens

3B: Nordic Characters

  • Update name in Firestore: "Søren Kierkegård"
  • Delete slug, refresh, create profile
  • Expected: soren-kierkegard

3C: German Characters

  • Name: "Günther Müller"
  • Expected: gunther-muller

3D: Special Characters

  • Name: "Mary-Anne O'Brien-Smith"
  • Expected: mary-anne-obrien-smith
Scenario 4: Edge Cases

Goal

Test boundary conditions

4A: Name with Emoji

  • Name: "Sarah 👶 Smith"
  • Expected: sarah-smith (emoji stripped)

4B: Very Long Name

  • Name: "Elizabeth Alexandra Mary Windsor von Hohenzollern-Sigmaringen"
  • Slug generates without error

4C: Name with Numbers

  • Name: "Sarah Smith 2nd"
  • Expected: sarah-smith-2nd

4D: Empty Name

  • Remove name field in Firestore
  • Banner should NOT appear
Scenario 5: Banner Display Logic

Goal

Verify banner only shows when appropriate

5A: No Active Membership

  • Sign up but DON'T complete Stripe payment
  • Navigate to /membership
  • NO banner should appear

5B: Already Has Slug

  • User who already created profile
  • Navigate to /membership
  • NO banner should appear

5C: All Conditions Met

  • Active membership + name + no slug
  • Navigate to /membership
  • Banner DOES appear
Scenario 6: Error Handling

Goal

Verify user-friendly error messages

6A: Race Condition

  • Open two browser tabs, same user
  • Click "Create Profile" in both simultaneously
  • One succeeds, other shows user-friendly error

6B: Network Error

  • DevTools → Network → Offline
  • Click "Create Profile"
  • Error message displays
  • Button returns to clickable state
Scenario 7: Slug Immutability

Goal

Verify slug cannot be changed after creation

  • User with existing slug
  • Navigate to /membership
  • NO "Create Profile" banner
  • Slug is immutable
Scenario 8: Profile Editor Access

Goal

Verify proper redirects/guards

8A: User Without Slug

  • Active membership, no slug
  • Navigate to /profile
  • Shows message/redirect to /membership

8B: User With Slug

  • User with slug set
  • Navigate to /profile
  • Profile editor loads normally
Scenario 9: Regression Testing

Goal

Ensure existing features still work

9A: Claim Profile

  • Sign in as webmaster@doulacooperative.com
  • Verify claim profile banner still works (if applicable)

9B: Edit Existing Profile

  • User with slug set
  • Navigate to /profile, edit and save
  • Saves correctly

Final Verification Checklist

After all scenarios:

  • All slugs are lowercase
  • All slugs match pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
  • No consecutive hyphens
  • No leading/trailing hyphens
  • Duplicate names get numeric suffixes (-2, -3, etc)
  • Special characters properly normalized
  • Error messages are user-friendly
  • Loading states work correctly
  • No console errors during happy path
  • Existing features unaffected

Helpful Commands & Tips

Delete slug for retesting:

  1. Firebase Console → Firestore
  2. Find member doc by email
  3. Delete slug field
  4. Refresh /membership page

Check GitHub files:
hugo/content/doulas/{slug}/index.md

Implementation notes:

  • Slug pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
  • Slugs are immutable (prevents broken links)
  • Transaction prevents race conditions
  • NFD normalization: é→e, ñ→n, ø→o, æ→ae, ß→ss

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions