Testing Scenarios Library
Document Purpose: Comprehensive test case library covering all business flows, edge cases, and integration scenarios for the MyStoryFlow application.
Last Updated: July 12, 2025
Version: 1.0
Test Framework: Playwright, Jest, React Testing Library
📋 Table of Contents
- Testing Overview
- Critical User Flows
- Business Logic Testing
- Integration Testing
- Edge Case Testing
- Performance Testing
- Test Execution Guide
Testing Overview
Testing Philosophy
- User-Centric: Test from the user’s perspective
- Business-Critical: Focus on revenue and user experience paths
- Comprehensive: Cover happy paths, edge cases, and error scenarios
- Maintainable: Use Page Object Model and reusable test utilities
Test Categories
- Unit Tests: Individual component and function testing
- Integration Tests: API and database interaction testing
- E2E Tests: Complete user journey testing
- Performance Tests: Load and response time testing
- Accessibility Tests: WCAG compliance and screen reader testing
Critical User Flows
CUF-001: Complete Gift Purchase Journey
Priority: P0 (Critical Revenue Path)
Test Scenarios
-
Authenticated User Gift Purchase
- Login → Gift Details → Family Setup → Message → Books → Payment → Thank You
- Verify family creation, invoice generation, email sending
- Test family workspace access after purchase
-
Anonymous User Gift Purchase
- Gift Details → Family Setup → Message → Books → Info Collection → Payment → Thank You
- Verify email collection and account creation prompt
- Test purchase completion without registration
-
Gift Purchase Error Recovery
- Test payment failures and retry mechanisms
- Test family creation failures with graceful degradation
- Test email sending failures with warning display
Key Validations
- Family workspace access without setup completion
- Invoice generation with correct pricing breakdown
- Email automation triggers at correct times
- Thank you page displays with complete purchase details
CUF-002: User Onboarding & Campaign Creation
Priority: P0 (User Activation)
Test Scenarios
-
First-Time User Setup
- Signup → Profile Setup → Campaign Creation → First Story
- Verify middleware routing to campaign creation
- Test setup completion flag setting
-
Incomplete Campaign Resume
- User with incomplete campaign accesses dashboard
- Verify redirect to campaign creation with ID
- Test campaign completion and dashboard access
Key Validations
- Middleware enforces setup completion
- Campaign creation saves progress
- Dashboard access after completion
CUF-003: Family Collaboration Workflow
Priority: P1 (Core Feature)
Test Scenarios
-
Family Creation and Invitation
- Create family → Add members → Send invitations → Accept invitations
- Test family workspace access for all members
- Verify role-based permissions
-
Family Campaign Collaboration
- Family member creates campaign
- Other members contribute stories
- Test campaign visibility across family
Key Validations
- Family member permissions work correctly
- Campaign sharing within families
- Invitation email delivery and acceptance
Business Logic Testing
BLT-001: Gift Purchase Pricing Logic
Components: BooksStep, PaymentStep, InvoiceService
Test Cases
describe('Gift Purchase Pricing', () => {
test('calculates single book pricing correctly', () => {
expect(calculateBookPricing(1)).toEqual({
total: 79.00,
savings: 0
})
})
test('calculates bulk pricing with discount', () => {
expect(calculateBookPricing(5)).toEqual({
total: 315.00,
savings: 80.00
})
})
test('generates correct invoice line items', () => {
const lineItems = InvoiceService.createGiftPurchaseLineItems(3)
expect(lineItems).toHaveLength(2) // Books + Bulk discount
expect(lineItems[0].description).toBe('Story Collection Books')
expect(lineItems[1].description).toBe('Bulk Discount (2 books)')
})
})
``` -->
### BLT-002: Family Creation Business Logic
**Components**: `FamilyService`, `GiftFamilyService`
#### Test Cases
```javascript
describe('Family Creation for Gifts', () => {
test('bypasses subscription checks for gift purchases', async () => {
const result = await familyService.createFamilyGroup(
familyData,
userId,
true // skipSubscriptionCheck
)
expect(result.id).toBeDefined()
})
test('creates family with gift purchaser and recipient as contributors', async () => {
const result = await giftFamilyService.createGiftFamily(giftData)
expect(result.success).toBe(true)
expect(result.family_id).toBeDefined()
})
})
``` -->
### BLT-003: Middleware Routing Logic
**Component**: `middleware.ts`
#### Test Cases
```javascript
describe('Middleware Routing', () => {
test('redirects incomplete users from dashboard to campaign creation', () => {
// Mock incomplete user accessing /dashboard
// Verify redirect to /campaigns/create
})
test('allows gift purchasers to access family workspace', () => {
// Mock incomplete user accessing /families/123
// Verify no redirect (allow access)
})
test('allows gift purchase flow for incomplete users', () => {
// Mock incomplete user accessing /dashboard/purchase-gift
// Verify no redirect (allow access)
})
})
``` -->
---
## Integration Testing
### INT-001: Database Integration
**Focus**: Data persistence and consistency
#### Test Scenarios
1. **Gift Purchase Data Flow**
- Test gift record creation
- Test invoice generation with line items
- Test family creation with member relationships
- Verify RLS policies enforce correct access
2. **Campaign and Family Integration**
- Test campaign creation with family linkage
- Test family member access to campaigns
- Verify campaign visibility queries
#### Database Test Setup
```javascript
beforeEach(async () => {
// Clean test database
await supabase.from('gifts').delete().neq('id', '')
await supabase.from('invoices').delete().neq('id', '')
await supabase.from('family_groups').delete().neq('id', '')
// Create test user
testUser = await createTestUser()
})
``` -->
### INT-002: Email Integration
**Focus**: Email delivery and automation
#### Test Scenarios
1. **Gift Purchase Email Flow**
- Test immediate delivery for today's date
- Test scheduled delivery for future dates
- Test email template rendering with gift data
2. **Family Invitation Emails**
- Test invitation email sending
- Test email template personalization
- Test invitation link generation
#### Email Test Utilities
```javascript
const mockEmailService = {
sendGiftPurchaseEmails: jest.fn().mockResolvedValue({ success: true }),
sendFamilyInvitation: jest.fn().mockResolvedValue({ success: true })
}
``` -->
### INT-003: Payment Integration
**Focus**: Stripe integration and error handling
#### Test Scenarios
1. **Successful Payment Processing**
- Test payment intent creation
- Test payment confirmation
- Test invoice generation after payment
2. **Payment Error Handling**
- Test declined card handling
- Test network error recovery
- Test partial payment failures
---
## Edge Case Testing
### ECT-001: Concurrent User Actions
**Scenario**: Multiple users performing actions simultaneously
#### Test Cases
1. **Concurrent Gift Purchases**
- Multiple users purchasing gifts simultaneously
- Verify invoice number uniqueness
- Test family creation race conditions
2. **Concurrent Family Invitations**
- Multiple invitations to same email
- Test duplicate invitation prevention
- Verify family member limits
### ECT-002: Data Validation Edge Cases
**Scenario**: Invalid or boundary data inputs
#### Test Cases
1. **Gift Purchase Validation**
- Empty recipient name/email
- Invalid email formats
- Self-gifting attempts
- Maximum family member limits
2. **Campaign Creation Validation**
- Duplicate campaign names
- Invalid storyteller information
- Missing required fields
### ECT-003: Network and System Failures
**Scenario**: External system failures and recovery
#### Test Cases
1. **Database Connection Failures**
- Test fallback behaviors
- Verify error logging
- Test retry mechanisms
2. **Email Service Failures**
- Test email sending failures
- Verify warning display to users
- Test retry queuing
---
## Performance Testing
### PERF-001: Page Load Performance
**Target**: < 2s page load time
#### Test Scenarios
1. **Gift Purchase Flow Performance**
- Measure each step load time
- Test with varying data sizes
- Verify optimal bundle sizes
2. **Dashboard Performance**
- Test with multiple campaigns
- Test with large family groups
- Measure query performance
### PERF-002: API Response Times
**Target**: < 500ms API response time
#### Test Scenarios
1. **Gift Purchase API**
- Test under load
- Measure database query times
- Test with complex family structures
2. **Family and Campaign APIs**
- Test member addition performance
- Test campaign creation speed
- Measure pagination performance
---
## Test Execution Guide
### Running Tests
#### Unit Tests
```bash
npm run test # Run all unit tests
npm run test:watch # Run tests in watch mode
npm run test:coverage # Run with coverage report
``` -->
#### E2E Tests
```bash
npm run test:e2e # Run all E2E tests
npm run test:e2e:critical # Run critical path tests
npm run test:e2e:headed # Run with browser UI
``` -->
#### Integration Tests
```bash
npm run test:integration # Run API integration tests
npm run test:db # Run database integration tests
``` -->
### Test Environment Setup
#### Database Setup
```bash
# Create test database
npm run test:db:setup
# Run migrations
npm run test:db:migrate
# Seed test data
npm run test:db:seed
``` -->
#### Environment Variables
```env
# Test environment variables
NEXT_PUBLIC_SUPABASE_URL=test_url
SUPABASE_SERVICE_ROLE_KEY=test_key
STRIPE_SECRET_KEY=test_stripe_key
EMAIL_SERVICE_API_KEY=test_email_key
``` -->
### Continuous Integration
#### GitHub Actions Workflow
```yaml
name: Test Suite
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm ci
- run: npm run test
- run: npm run test:e2e:critical
- run: npm run test:integration
``` -->
### Test Data Management
#### Test User Creation
```javascript
export const createTestUser = async (overrides = {}) => {
const userData = {
email: `test-${Date.now()}@example.com`,
password: 'testpassword123',
full_name: 'Test User',
setup_completed: false,
...overrides
}
const { user } = await supabase.auth.signUp(userData)
return user
}
``` -->
#### Test Cleanup
```javascript
afterEach(async () => {
// Clean up test data
await cleanupTestData()
})
const cleanupTestData = async () => {
// Remove test gifts, invoices, families
await supabase.from('gifts').delete().like('giver_email', '%@example.com')
await supabase.from('invoices').delete().like('user_id', 'test-%')
}
``` -->
---
## Reporting and Monitoring
### Test Metrics
- **Test Coverage**: Aim for >80% code coverage
- **Test Execution Time**: Monitor for regression
- **Flaky Test Rate**: Track and fix unstable tests
- **Critical Path Success Rate**: Monitor business-critical flows
### Test Reports
- **Coverage Reports**: Generated after each test run
- **Performance Reports**: Track API and page load times
- **E2E Test Reports**: Video recordings of failures
- **Accessibility Reports**: WCAG compliance scores
---
*Last Updated: July 12, 2025*
*Maintained by: QA & Development Teams*