47 KiB
🧪 KROW Workforce Platform - QA Testing Checklist
Version: 1.0
Date: February 1, 2026
Coverage: Client App + Staff App
Purpose: Manual QA and Regression Testing
📋 TABLE OF CONTENTS
- Feature-Level QA Checklist
- Cross-Application Test Scenarios
- Shared Infrastructure Validation
- Regression & Release Checklist
1️⃣ FEATURE-LEVEL QA CHECKLIST
CLIENT APP FEATURES
📱 CLIENT-001: Authentication
Applications: Client
Entry Points:
- Launch app → Get Started → Sign In
- Launch app → Get Started → Sign Up
Happy Path Test Cases:
- Sign in with valid email and password displays home dashboard
- Sign up with business details creates account and navigates to home
Validation & Error States:
- Invalid email format shows validation error
- Incorrect password shows authentication error
- Weak password in sign-up shows strength requirements
- Duplicate email in sign-up shows "already registered" error
- Empty fields show required field errors
Loading & Empty States:
- Loading spinner displays during authentication
- OAuth redirect shows appropriate loading state
📱 CLIENT-002: Home Dashboard
Applications: Client
Entry Points:
- Home tab (bottom navigation)
Happy Path Test Cases:
- Dashboard displays current day coverage widget
- Spending analytics widget shows correct totals
- Recent reorders display completed shift roles
- Quick action buttons navigate to correct features
- Drag-and-drop widget reordering works correctly
Validation & Error States:
- Empty state shows "No data available" when no orders exist
Loading & Empty States:
- Empty coverage shows "No shifts today"
- Empty reorders shows "No recent orders"
📱 CLIENT-003: Create Order
Applications: Client
Entry Points:
- Home → Create Order button
- Orders tab → + FAB button
- Order type → One-Time
Happy Path Test Cases:
- Order type selection displays.
- Hub selection shows list of business hubs
- Role selection displays vendor roles
- Position quantity can be incremented/decremented (min 1)
- Date picker displays correct calendar
- Time pickers show valid time ranges
- Break duration affects total hours calculation
- Cost preview calculates correctly (rate × positions × hours)
- Order submission creates order, shift, and shift roles
- Success confirmation displays after submission
- New order appears in View Orders list
Validation & Error States:
- Empty hub field shows validation error
- Empty role field shows validation error
- Zero positions shows validation error
- Invalid date (past) shows validation error
- Start time after end time shows validation error
- Missing required fields prevent submission
- Backend validation errors display appropriately
Loading & Empty States:
- Hub list shows "No hubs" if none exist
- Role list shows "No roles" if none configured
- Loading spinner displays during submission
- Submission progress indicator updates
📱 CLIENT-004: View Orders
Applications: Client
Entry Points:
- Orders tab (bottom navigation)
Happy Path Test Cases:
- Orders list displays orders for selected date
- Calendar date selection updates order list
- Each order card shows hub name and address
- Each order card shows shift time range
- Each order card shows role positions (filled/total)
- Each order card shows hourly rate and total cost
- Accepted applications section displays confirmed staff
- Staff names and photos display correctly
- Order list scrolls smoothly with many orders
Validation & Error States:
-
Invalid date selection shows error
-
Missing staff data shows placeholder
Loading & Empty States:
- Empty date shows "No orders for this date"
- Empty accepted applications shows "No confirmed staff"
📱 CLIENT-005: Coverage Monitoring
Applications: Client
Entry Points:
- Coverage tab (bottom navigation)
Happy Path Test Cases:
- Coverage overview displays current date
- Coverage stats show needed/confirmed/checked-in counts
- Shift cards display hub name and time range
- Worker cards show staff name and photo
- Check-in status indicators update correctly (late, en-route, checked-in)
- Late workers display with warning indicator
- Coverage progress bar updates correctly
Validation & Error States:
- Missing worker photo shows default avatar
Loading & Empty States:
- Skeleton loaders display while fetching data
- Empty coverage shows "No shifts today"
- No workers show "No staff assigned"
State Persistence:
- Coverage data refreshes automatically every X minutes
- Manual refresh via pull-to-refresh gesture
Backend Dependency Validation:
listShiftRolesByBusinessAndDateRangereturns shift requirementslistStaffsApplicationsByBusinessForDayreturns staff status- Attendance status correctly mapped from backend
📱 CLIENT-006: Billing & Invoices
Applications: Client
Entry Points:
- Billing tab (bottom navigation)
Happy Path Test Cases:
- Current bill amount displays correctly
- Pending invoices list shows open invoices
- Invoice history shows paid invoices
- Savings amount displays correctly
- Spending breakdown shows costs by role
- Period filter (weekly/monthly) updates data
- Invoice detail view shows line items
- Invoice PDF download works (if implemented)
Validation & Error States:
- Zero billing shows $0.00 (not error)
- Negative savings shows correctly
- Missing invoice data shows placeholder
Loading & Empty States:
- Skeleton loaders display while fetching data
- Empty pending invoices shows "No pending invoices"
- Empty history shows "No invoice history"
- Empty spending breakdown shows "No spending data"
State Persistence:
- Selected period persists after navigating away
- Billing data refreshes after returning from background
Backend Dependency Validation:
listInvoicesByBusinessIdreturns invoice recordslistShiftRolesByBusinessAndDatesSummaryreturns spending aggregates- Period date range correctly calculated
- Business ID correctly filtered
📱 CLIENT-007: Hub Management
Applications: Client
Entry Points:
- Settings → Hubs
- Create Order → Add Hub button
Happy Path Test Cases:
- Hubs list displays all business hubs
- Hub cards show name and full address
- Add hub button opens creation form
- Google Places autocomplete suggests addresses
- Address selection auto-fills all address fields
- Hub name can be customized
- Hub creation adds to list immediately
- Hub deletion removes from list (with confirmation)
- Team entity auto-created for business if missing
Validation & Error States:
- Empty hub name shows validation error
- Empty address shows validation error
- Invalid address format shows error
- Duplicate hub name shows warning
- Hub with active orders prevents deletion (validation error)
Loading & Empty States:
- Skeleton loaders display while fetching hubs
- Empty hubs list shows "No hubs configured"
- Address autocomplete shows loading during search
- Hub creation shows loading spinner
State Persistence:
- Hub list refreshes after creation/deletion
- Hub data persists across app sessions
Backend Dependency Validation:
getBusinessesByUserIdretrieves business IDgetTeamsByOwnerIdchecks for existing teamcreateTeamcreates team if missinggetTeamHubsByTeamIdfetches hub listcreateTeamHubcreates hub with geocoded datadeleteTeamHubremoves hub entitylistOrdersByBusinessAndTeamHubvalidates no active orders- Google Places API returns valid address components
📱 CLIENT-008: Settings
Applications: Client
Entry Points:
- Settings (navigation menu)
Happy Path Test Cases:
- User profile displays name and email
- Business name displays correctly
- Hubs link navigates to hub management
- Sign out logs out user and returns to auth screen
Validation & Error States:
- Missing profile photo shows default avatar
- Sign out error shows retry option
Loading & Empty States:
- Profile data loads on page mount
State Persistence:
- User data refreshes on page focus
Backend Dependency Validation:
- Firebase Auth signOut called
- Session data cleared
📱 CLIENT-009: Client Main Navigation
Applications: Client
Entry Points:
- Main app shell after authentication
Happy Path Test Cases:
- Bottom navigation displays 5 tabs (Home, Coverage, Billing, Orders, Reports)
- Tab selection updates active indicator
- Tab selection navigates to correct feature
- Deep links navigate to correct tab
- Back button navigates correctly within nested routes
- Tab state persists after device rotation
Validation & Error States:
- Invalid route shows 404 or redirects to home
- Reports tab shows placeholder (not yet implemented)
Loading & Empty States:
- Navigation bar displays immediately
- Initial tab loads first
State Persistence:
- Active tab persists after app background → foreground
- Tab state resets to home on app restart
Backend Dependency Validation:
- No direct backend calls (navigation only)
STAFF APP FEATURES
📱 STAFF-001: Authentication
Applications: Staff
Entry Points:
- Launch app → Get Started → Phone Verification
Happy Path Test Cases:
- Phone number entry accepts valid formats
- OTP sent confirmation displays
- OTP verification succeeds with valid code
- Profile setup wizard displays for new users
- Authenticated users bypass auth and show home
- Session persists after app restart
Validation & Error States:
- Invalid phone format shows validation error
- Incorrect OTP shows verification error
- Expired OTP shows re-send option
- Empty fields show required field errors
- Network error displays retry option
Loading & Empty States:
- Loading spinner displays during phone verification
- OTP input shows countdown timer
- Profile setup shows progress indicator
State Persistence:
- Authenticated session persists after app background → foreground
- Session expires appropriately after logout
Backend Dependency Validation:
- Firebase Auth phone verification flow completes
getUserByIdreturns user datagetStaffByUserIdretrieves staff profile- Staff profile created if missing
📱 STAFF-002: Home Dashboard
Applications: Staff
Entry Points:
- Home tab (bottom navigation)
Happy Path Test Cases:
- Today's shifts display with time and location
- Tomorrow's shifts display correctly
- Recommended shifts show available opportunities
- Shift cards show role, location, and pay rate
- Quick actions navigate to correct features
- Dashboard refreshes on pull-to-refresh
Validation & Error States:
- Missing shift data shows placeholder
Loading & Empty States:
- Skeleton loaders display while fetching data
- Empty today's shifts shows "No shifts today"
- Empty recommended shows "No available shifts"
State Persistence:
- Dashboard data refreshes after returning from background
- Shift status updates reflected immediately
Backend Dependency Validation:
getApplicationsByStaffIdfetches staff assignmentslistShiftsreturns available shifts- Date filtering correctly applied
📱 STAFF-003: Profile
Applications: Staff
Entry Points:
- Profile tab (bottom navigation)
Happy Path Test Cases:
- Profile displays name, email, phone, and photo
- Statistics show total shifts, ratings, reliability score
- Profile sections list displays all sections
- Section navigation works correctly
- Sign out logs out user and returns to auth screen
Validation & Error States:
- Missing profile photo shows default avatar
- Missing statistics show 0 or default values
- Sign out error shows retry option
Loading & Empty States:
- Profile data loads on page mount
- Statistics display placeholders while loading
State Persistence:
- Profile data refreshes on page focus
- Profile updates reflect immediately
Backend Dependency Validation:
getStaffByUserIdretrieves complete staff profile- Firebase Auth signOut called
- Session data cleared
📱 STAFF-004: Shifts Management
Applications: Staff
Entry Points:
- Shifts tab (bottom navigation)
- Tab navigation: My Shifts / Available / Pending / Cancelled / History
Happy Path Test Cases:
- My Shifts tab displays assigned shifts
- Available Shifts tab shows open positions
- Pending tab shows applications awaiting approval
- Cancelled tab shows cancelled shifts
- History tab shows past shifts
- Shift detail view displays full information
- Accept shift updates status to confirmed
- Decline shift updates status to declined
- Apply for shift creates application
- Shift cards show time, location, role, and pay
Validation & Error States:
-
Empty tabs show appropriate empty state messages
-
Already applied shift prevents duplicate application
-
Past shifts cannot be applied to
-
Cancelled shifts show cancellation reason
Loading & Empty States:
- Skeleton loaders display while fetching shifts
- Empty My Shifts shows "No assigned shifts"
- Empty Available shows "No open shifts"
- Empty Pending shows "No pending applications"
- Empty History shows "No past shifts"
State Persistence:
- Active tab persists after navigating away
- Shift list refreshes after status changes
- Shift data refreshes after returning from background
Backend Dependency Validation:
getApplicationsByStaffIdfetches applications by statusgetShiftByIdretrieves shift detailsupdateApplicationStatuschanges application statecreateApplicationcreates new applicationdeleteApplicationremoves applicationupdateShiftupdates filled count
📱 STAFF-005: Availability Management
Applications: Staff
Entry Points:
- Worker Main → Availability
- Profile → Availability section
Happy Path Test Cases:
- Weekly grid displays Monday-Sunday
- Time slots (Morning/Afternoon/Evening) toggle correctly
- Quick-set buttons work (Weekdays/Weekends/All Week)
- Individual day/slot updates save correctly
- Green checkmarks indicate availability
- Gray states indicate unavailability
- Changes save automatically
Validation & Error States:
- Save failure shows error message
Loading & Empty States:
- Loading spinner displays while fetching availability
- Default state shows all unavailable
State Persistence:
- Availability persists across app sessions
- Changes reflect immediately in shift matching
Backend Dependency Validation:
getStaffByUserIdretrieves staff IDlistStaffAvailabilitiesByStaffIdfetches availability recordsgetStaffAvailabilityByKeychecks existing recordupdateStaffAvailabilityupdates existing slotcreateStaffAvailabilitycreates new slot
📱 STAFF-006: Clock In/Out
Applications: Staff
Entry Points:
- Clock In tab (bottom navigation)
Happy Path Test Cases:
- Today's shift displays with clock in button
- Clock in button creates attendance record
- Clock in time displays correctly
- Clock out button appears after clocking in
- Clock out creates end time record
- Total hours calculated correctly
- Attendance status updates immediately
Validation & Error States:
-
No shift today shows "No shifts to clock in"
-
Already clocked in prevents duplicate clock in
-
Clock in outside shift time shows warning
Loading & Empty States:
- Loading spinner displays while fetching shift
- Empty state shows "No shifts scheduled"
State Persistence:
- Attendance status persists across app sessions
- Clock in/out times display correctly
Backend Dependency Validation:
getApplicationsByStaffIdfetches today's shiftscreateAttendancerecords clock inupdateAttendancerecords clock outlistAttendancesByApplicationIdgets attendance statusupdateApplicationStatusupdates application state
📱 STAFF-007: Payments
Applications: Staff
Entry Points:
- Payments tab (bottom navigation)
Happy Path Test Cases:
- Payment summary displays total earnings
- Payment history lists all transactions
- Payment cards show amount, date, and status
- Payment detail view shows breakdown
- Filter by date range works correctly
Validation & Error States:
- Zero earnings show $0.00 (not error)
- Missing payment data shows placeholder
Loading & Empty States:
- Skeleton loaders display while fetching payments
- Empty history shows "No payment history"
State Persistence:
- Payment data refreshes after returning from background
- Filter state persists after navigating away
Backend Dependency Validation:
getStaffByUserIdretrieves staff IDgetPaymentsByStaffIdfetches payment records- Mock summary data calculated correctly
📱 STAFF-008: Personal Info (Onboarding)
Applications: Staff
Entry Points:
- Profile → Personal Info
- Onboarding wizard
Happy Path Test Cases:
- Form displays current profile data
- Name field allows text input
- Email field validates email format
- Phone field validates phone format
- Photo upload works correctly
- Preferred locations multi-select works
- Save button updates profile
Validation & Error States:
-
Empty required fields show validation errors
-
Invalid email format shows error
-
Invalid phone format shows error
-
Photo upload failure shows error
Loading & Empty States:
- Form loads with skeleton placeholders
- Photo upload shows progress indicator
- Save button shows loading spinner
State Persistence:
- Changes persist after save
- Unsaved changes show confirmation dialog on exit
Backend Dependency Validation:
getStaffByUserIdfetches profileupdateStaffsaves profile changes
📱 STAFF-009: Emergency Contact (Onboarding)
Applications: Staff
Entry Points:
- Profile → Emergency Contact
- Onboarding wizard
Happy Path Test Cases:
- Contact list displays all contacts
- Add contact button opens form
- Contact form validates name and phone
- Relationship dropdown shows options (Family/Spouse/Friend/Other)
- Remove contact deletes from list
- Save updates all contacts
- Multiple contacts supported
Validation & Error States:
- Empty name shows validation error
- Invalid phone format shows error
- At least one contact required (if applicable)
Loading & Empty States:
- Loading spinner displays while fetching contacts
- Empty state shows "No emergency contacts"
- Save button shows loading spinner
State Persistence:
- Contacts persist after save
- Unsaved changes show confirmation dialog on exit
Backend Dependency Validation:
getStaffByUserIdretrieves staff IDgetEmergencyContactsByStaffIdfetches contactsdeleteEmergencyContactremoves contacts (replace-all pattern)createEmergencyContactcreates new contacts
📱 STAFF-010: Experience & Skills (Onboarding)
Applications: Staff
Entry Points:
- Profile → Experience
- Onboarding wizard
Happy Path Test Cases:
- Industries multi-select displays options
- Skills multi-select displays options
- Selected items show checkmarks
- Deselection removes items
- Save updates profile
Validation & Error States:
- At least one industry required (if applicable)
- At least one skill required (if applicable)
Loading & Empty States:
- Loading spinner displays while fetching data
- Save button shows loading spinner
State Persistence:
- Selections persist after save
- Unsaved changes show confirmation dialog on exit
Backend Dependency Validation:
getStaffByUserIdfetches profile with industries and skillsupdateStaffupdates industries and skills arrays
📱 STAFF-011: Attire Selection (Onboarding)
Applications: Staff
Entry Points:
- Profile → Attire
- Onboarding wizard
Happy Path Test Cases:
- Attire options list displays all items
- Item selection toggles checkmark
- Photo upload button opens camera/gallery
- Photos display in grid
- Save updates selections and photos
Validation & Error States:
- At least one attire item required (if applicable)
- Photo upload failure shows error
Loading & Empty States:
- Loading spinner displays while fetching options
- Photo upload shows progress indicator
- Save button shows loading spinner
State Persistence:
- Selections and photos persist after save
- Unsaved changes show confirmation dialog on exit
Backend Dependency Validation:
listAttireOptionsfetches available items- Photo upload and save mutations (pending implementation)
📱 STAFF-012: Bank Account (Finances)
Applications: Staff
Entry Points:
- Profile → Bank Account
Happy Path Test Cases:
- Account list displays all accounts
- Add account button opens form
- Form validates routing and account numbers
- Account type dropdown shows options (Checking/Savings)
- First account auto-sets as primary
- Save adds account to list
- Primary account indicator displays
Validation & Error States:
- Empty routing number shows validation error
- Invalid routing number format shows error
- Empty account number shows validation error
- Invalid account number format shows error
- Duplicate account shows warning
Loading & Empty States:
- Loading spinner displays while fetching accounts
- Empty state shows "No bank accounts"
- Save button shows loading spinner
State Persistence:
- Accounts persist after save
- Account list refreshes after addition
Backend Dependency Validation:
getAccountsByOwnerIdfetches staff accountscreateAccountcreates new account- First account auto-flagged as primary
📱 STAFF-013: Time Card History (Finances)
Applications: Staff
Entry Points:
- Profile → Time Card
Happy Path Test Cases:
- Time card list displays all records
- Each card shows shift details (date, time, location)
- Each card shows clock in/out times
- Each card shows total hours worked
- Scrolling loads more records (pagination)
Validation & Error States:
- Missing attendance data shows "Not recorded"
Loading & Empty States:
- Skeleton loaders display while fetching records
- Empty state shows "No time card history"
State Persistence:
- Time card data refreshes after returning from background
Backend Dependency Validation:
getStaffByUserIdretrieves staff IDgetApplicationsByStaffIdfetches applications with attendance- Attendance records mapped to time card format
📱 STAFF-014: Tax Forms (Compliance)
Applications: Staff
Entry Points:
- Profile → Tax Forms
Happy Path Test Cases:
- Forms list displays required forms (I-9, W-4)
- Form status shows completed/incomplete
- I-9 form opens editor
- I-9 form validates all fields
- W-4 form opens editor
- W-4 form validates all fields
- Form submission updates status to completed
- Completed forms show edit option
Validation & Error States:
- Empty required fields show validation errors
- Invalid SSN format shows error
- Invalid date format shows error
- Signature required validation
Loading & Empty States:
- Loading spinner displays while fetching forms
- Form editor loads with skeleton placeholders
- Save button shows loading spinner
State Persistence:
- Form data persists after save
- Unsaved changes show confirmation dialog on exit
- Form status updates immediately
Backend Dependency Validation:
getTaxFormsByStaffIdfetches formscreateTaxForminitializes missing formsupdateTaxFormsaves form data and status
📱 STAFF-015: Documents (Compliance)
Applications: Staff
Entry Points:
- Profile → Documents
Happy Path Test Cases:
- Documents list displays required documents
- Document status shows verified/pending/expired
- Document detail view shows requirements
- Expiry dates display correctly
- Expired documents highlight in red
Validation & Error States:
- Missing documents show incomplete status
Loading & Empty States:
- Skeleton loaders display while fetching documents
- Empty state shows "No documents required"
State Persistence:
- Document data refreshes after returning from background
Backend Dependency Validation:
- Mock implementation currently
- ⚠️ Requires clarification: Real Data Connect integration pending
📱 STAFF-016: Certificates (Compliance)
Applications: Staff
Entry Points:
- Profile → Certificates
Happy Path Test Cases:
- Certificates list displays all certificates
- Certificate cards show name, status, and expiry
- Certificate detail view shows full information
- Expired certificates highlight in red
- Certificate verification status displays
Validation & Error States:
- Missing certificates show placeholder
Loading & Empty States:
- Skeleton loaders display while fetching certificates
- Empty state shows "No certificates"
State Persistence:
- Certificate data refreshes after returning from background
Backend Dependency Validation:
listStaffDocumentsByStaffIdfetches certificate documents- Document data mapped to certificate entities
📱 STAFF-017: Staff Main Navigation
Applications: Staff
Entry Points:
- Main app shell after authentication
Happy Path Test Cases:
- Bottom navigation displays 5 tabs (Shifts, Payments, Home, Clock In, Profile)
- Tab selection updates active indicator
- Tab selection navigates to correct feature
- Deep links navigate to correct tab and nested route
- Back button navigates correctly within nested routes
- Tab state persists after device rotation
- Nested routes (onboarding, emergency-contact, etc.) accessible
Validation & Error States:
- Invalid route shows 404 or redirects to home
- Navigation errors log appropriately
Loading & Empty States:
- Navigation bar displays immediately
- Initial tab loads first
State Persistence:
- Active tab persists after app background → foreground
- Tab state resets to home on app restart
Backend Dependency Validation:
- No direct backend calls (navigation only)
2️⃣ CROSS-APPLICATION TEST SCENARIOS
Scenario 1: Order Creation → Staff Application Flow
Preconditions:
- Client user authenticated
- Staff user authenticated
- At least one hub configured
Steps:
-
CLIENT APP:
- Create one-time order with specific hub, role, date, and time
- Verify order appears in View Orders list
- Verify shift shows as unfilled (0/X positions)
-
STAFF APP:
- Open Shifts tab → Available tab
- Verify new shift appears in available list
- Verify shift details match order (hub, role, time, pay)
- Apply for shift position
-
CLIENT APP:
- Refresh View Orders
- Verify shift shows pending application (0/X filled, pending)
-
STAFF APP:
- Verify application appears in Pending tab
- Verify shift removed from Available tab
Expected Results:
- ✅ Order created in Client appears in Staff Available Shifts
- ✅ Application in Staff shows pending in both apps
- ✅ Shift counts update correctly in real-time
Scenario 2: Shift Acceptance → Coverage Tracking
Preconditions:
- Scenario 1 completed (pending application exists)
Steps:
-
STAFF APP:
- Go to Shifts → Pending tab
- Accept pending shift assignment
-
CLIENT APP:
- Refresh View Orders
- Verify shift shows as filled (1/X positions)
- Verify staff name and photo appear in accepted applications
- Navigate to Coverage tab
- Verify shift appears with assigned staff
-
STAFF APP:
- Verify shift moved from Pending to My Shifts tab
- Verify shift appears on Home dashboard
Expected Results:
- ✅ Accepted shift reflects in Client orders immediately
- ✅ Staff appears in Coverage monitoring
- ✅ Shift moves to My Shifts in Staff app
Scenario 3: Clock In → Real-Time Coverage Update
Preconditions:
- Scenario 2 completed (staff has accepted shift)
- Current date/time is during shift window
Steps:
-
STAFF APP:
- Navigate to Clock In tab
- Verify today's shift displays
- Click Clock In button
- Verify clock in time recorded
-
CLIENT APP:
- Navigate to Coverage tab
- Verify staff status changed to "Checked In"
- Verify check-in time displays
- Verify coverage stats updated (checked-in count incremented)
-
STAFF APP:
- Wait until shift end time
- Click Clock Out button
- Verify clock out time recorded
-
CLIENT APP:
- Refresh Coverage tab
- Verify staff status changed to "Completed"
-
STAFF APP:
- Navigate to Time Card
- Verify attendance record appears with correct times and hours
Expected Results:
- ✅ Clock in updates Coverage status in Client
- ✅ Clock out completes attendance record
- ✅ Time card displays correct hours in Staff app
- ✅ Coverage monitoring reflects real-time status
Scenario 4: Hub Creation → Order Placement
Preconditions:
- Client user authenticated
- No existing hubs
Steps:
-
CLIENT APP:
- Navigate to Settings → Hubs
- Verify empty state "No hubs configured"
- Click Add Hub button
- Enter hub name and use Google Places autocomplete
- Select address from suggestions
- Verify address fields auto-filled
- Save hub
-
CLIENT APP:
- Navigate to Create Order
- Verify new hub appears in hub selection list
- Select new hub and complete order creation
-
STAFF APP:
- Navigate to Shifts → Available
- Verify shift shows correct hub name and address
Expected Results:
- ✅ Hub created in Settings appears in order creation
- ✅ Hub address propagates to shift details in Staff app
Scenario 5: Shift Cancellation → Staff Notification
Preconditions:
- Staff has accepted shift assignment
Steps:
-
CLIENT APP:
- Navigate to View Orders
- Select order with assigned staff
- Cancel shift (if feature exists) or delete order
-
STAFF APP:
- Refresh Shifts tab
- Verify shift moved to Cancelled tab
- Verify shift removed from My Shifts
- Verify cancellation reason displays
-
STAFF APP:
- Verify shift removed from Home dashboard
Expected Results:
- ✅ Cancelled shift moves to Cancelled tab
- ✅ Shift removed from active assignments
- ⚠️ Requires clarification: Cancellation feature may not be fully implemented
Scenario 6: Authentication State Sharing
Preconditions:
- Neither app authenticated
Steps:
-
CLIENT APP:
- Sign in with email/password
- Verify Firebase Auth token generated
-
STAFF APP:
- Launch app
- Verify Staff app requires separate authentication
- Verify Client session does not carry over
-
CLIENT APP:
- Sign out
-
STAFF APP:
- Verify Staff app session persists (independent)
Expected Results:
- ✅ Client and Staff apps maintain independent auth sessions
- ✅ Signing out of one app does not affect the other
Scenario 7: Data Created in Client → Visible in Staff
Preconditions:
- Client creates multiple orders
Steps:
-
CLIENT APP:
- Create 5 orders on different dates
- Create 3 orders on same date with different hubs
-
STAFF APP:
- Navigate to Shifts → Available
- Verify all 8 shifts appear
- Verify date grouping correct
- Verify hub addresses correct
- Apply for 2 shifts
-
CLIENT APP:
- Navigate to View Orders
- Verify 2 shifts show pending applications
- Navigate to Coverage
- Verify 0 checked-in (pending acceptance)
Expected Results:
- ✅ All orders visible in both apps
- ✅ Application states sync correctly
- ✅ Data consistency maintained across apps
Scenario 8: Role-Based Access Differences
Preconditions:
- Client user authenticated
- Staff user authenticated
Steps:
-
CLIENT APP:
- Navigate to Billing
- Verify billing data displays (Client-only feature)
- Navigate to Create Order
- Verify order creation available (Client-only feature)
-
STAFF APP:
- Verify no Billing tab exists
- Verify no Create Order feature
- Navigate to Availability
- Verify availability editing available (Staff-only feature)
-
CLIENT APP:
- Verify no Availability feature exists
- Verify no Clock In feature exists
Expected Results:
- ✅ Client app has business management features (orders, billing, hubs)
- ✅ Staff app has worker features (availability, clock in, payments)
- ✅ No feature overlap or unauthorized access
Scenario 9: Race Condition - Concurrent Shift Application
Preconditions:
- One available shift with 1 position
- Two staff users authenticated on separate devices
Steps:
-
STAFF APP (Device 1):
- Navigate to Shifts → Available
- View shift details
-
STAFF APP (Device 2):
- Navigate to Shifts → Available
- View same shift details
-
STAFF APP (Device 1):
- Apply for shift
- Verify application created
-
STAFF APP (Device 2):
- Attempt to apply for same shift
- Verify appropriate behavior (position filled message or pending status)
-
CLIENT APP:
- Navigate to View Orders
- Verify only 1 application shows (not 2)
- Accept Device 1 application
-
STAFF APP (Device 2):
- Refresh Available shifts
- Verify shift removed or shows as filled
Expected Results:
- ✅ Only first application succeeds (or both go to pending)
- ✅ No double-booking occurs
- ✅ Race condition handled gracefully
- ⚠️ Requires clarification: Backend concurrency control behavior
Scenario 10: Network Failure During Critical Operation
Preconditions:
- Staff has pending shift application
Steps:
-
STAFF APP:
- Navigate to Shifts → Pending
- Disable network connection
- Attempt to accept shift
- Verify offline error message displays
- Re-enable network
- Retry accept shift
- Verify acceptance succeeds
-
CLIENT APP:
- Verify shift shows as filled after network restored
Expected Results:
- ✅ Offline state handled gracefully with clear messaging
- ✅ Retry succeeds after network restored
- ✅ Data consistency maintained
3️⃣ SHARED INFRASTRUCTURE VALIDATION
Domain Entity Consistency
Test: Entity Field Validation
-
Staff Entity:
- Verify all required fields populate (id, userId, firstName, lastName, email, phone)
- Verify optional fields handle null correctly (photoUrl, preferredLocations)
- Verify enum fields map correctly (UserStatus)
-
Order Entity:
- Verify all required fields populate
- Verify OrderStatus enum maps correctly
- Verify OrderType enum maps correctly
-
Shift Entity:
- Verify date/time fields parse correctly
- Verify ShiftStatus enum maps correctly
- Verify location data (hub) links correctly
-
Application Entity:
- Verify ApplicationStatus enum maps correctly
- Verify relationships (staff, shift, role) link correctly
-
Invoice Entity:
- Verify amount calculations correct
- Verify date fields parse correctly
- Verify InvoiceStatus enum maps correctly
-
Hub Entity:
- Verify address components parse correctly
- Verify geocoding (lat/lng) present and valid
- Verify placeId populated
Data Connect Schema Alignment
Test: Backend Operation Contracts
-
User Operations:
getUserById(userId)returns expected fieldscreateUser(...)accepts all required parametersupdateUser(...)updates only specified fields
-
Staff Operations:
getStaffByUserId(userId)returns staff profileupdateStaff(...)updates specified fieldslistStaffs()returns paginated results
-
Order Operations:
createOrder(...)creates order with shiftslistOrdersByBusinessId(...)filters by business correctlyupdateOrder(...)updates order fields
-
Shift Operations:
createShift(...)creates shift with locationgetShiftById(id)returns full shift detailslistShiftRolesByBusinessAndDateRange(...)returns correct date range
-
Application Operations:
createApplication(...)creates pending applicationupdateApplicationStatus(...)changes status correctlygetApplicationsByStaffId(...)filters by staff and date
-
Attendance Operations:
createAttendance(...)records clock inupdateAttendance(...)records clock outlistAttendancesByApplicationId(...)returns attendance records
-
Hub Operations:
createTeamHub(...)creates hub with location datagetTeamHubsByTeamId(...)returns hubs for teamdeleteTeamHub(id)removes hub entity
Error Handling Consistency
Test: Standard Error Patterns
-
Network Errors:
- All features show "Network error" message
- All features show "Retry" button
- Retry button re-attempts operation
-
Authentication Errors:
- Expired token redirects to login
- Invalid credentials show appropriate message
- Auth failures log out user
-
Validation Errors:
- Field-level validation shows inline errors
- Form-level validation prevents submission
- Error messages are user-friendly
-
Backend Errors:
- 400 errors show validation details
- 404 errors show "Not found" message
- 500 errors show "Server error, try again" message
-
Data Not Found:
- Empty lists show appropriate empty state
- Missing entities show "Not found" message
- Deleted entities handle gracefully
Version Mismatch Tolerance
Test: App Version Compatibility
-
Client App Updated, Staff App Not:
- Backend operations remain compatible
- Shared domain entities parse correctly
- New fields in Client don't break Staff
-
Staff App Updated, Client App Not:
- Backend operations remain compatible
- Shared domain entities parse correctly
- New fields in Staff don't break Client
-
Backend Schema Updated:
- Apps handle new optional fields gracefully
- Apps ignore unknown fields
- Required fields validated correctly
4️⃣ REGRESSION & RELEASE CHECKLIST
Smoke Testing (Critical Path)
Authentication Flow (5 minutes)
-
Client App:
- Launch app shows Get Started screen
- Sign in with valid credentials succeeds
- Home dashboard displays
-
Staff App:
- Launch app shows Get Started screen
- Phone verification sends OTP
- OTP verification succeeds
- Home dashboard displays
Order Creation & Application (10 minutes)
-
Client App:
- Create one-time order succeeds
- Order appears in View Orders list
- Order details display correctly
-
Staff App:
- Available shift appears in Shifts tab
- Apply for shift succeeds
- Application appears in Pending tab
-
Client App:
- Pending application displays in View Orders
- Coverage shows staff as pending
Clock In/Out Flow (5 minutes)
-
Staff App:
- Accept shift from Pending tab
- Clock in on Clock In tab
- Clock in time recorded
-
Client App:
- Coverage shows staff as checked in
- Staff status updates in real-time
-
Staff App:
- Clock out succeeds
- Time card displays attendance record
Critical Path Validation (Must Pass Before Release)
Client App Critical Features
-
Authentication:
- Sign in with email/password works
- Session persists after restart
-
Order Management:
- Create order succeeds
- View orders displays correctly
- Order details accurate
-
Coverage Monitoring:
- Coverage stats display correctly
- Staff status updates reflect backend
-
Billing:
- Invoice list displays
- Spending breakdown calculates correctly
Staff App Critical Features
-
Authentication:
- Phone verification works
- Session persists after restart
-
Shift Management:
- Available shifts display
- Apply for shift succeeds
- Accept shift succeeds
- My Shifts displays assigned shifts
-
Clock In/Out:
- Clock in records attendance
- Clock out completes record
-
Profile:
- View profile displays data
- Update personal info succeeds
High-Risk Features (Require Extra Scrutiny)
Payment Processing
-
Staff App:
- Payment history displays correctly
- Payment amounts accurate
- No double-payment scenarios
-
Client App:
- Invoice amounts correct
- Billing calculations accurate
- No overcharging scenarios
Data Integrity
-
Order → Shift → Application Chain:
- Order creation creates shifts
- Shift deletion cascades correctly
- Application deletion updates shift counts
-
Attendance Records:
- Clock in/out times accurate
- Hours calculation correct
- No duplicate attendance records
Concurrency Issues
-
Multiple Staff Applying:
- Race condition handled correctly
- No double-booking
- First-come-first-served logic works
-
Shift Cancellation:
- Staff notified appropriately
- Applications updated correctly
- No orphaned assignments
Release-Blocking Failures
The following issues MUST be fixed before release:
- Authentication fails completely (users cannot log in)
- Order creation fails completely (clients cannot create orders)
- Shift application fails completely (staff cannot apply for shifts)
- Clock in/out fails completely (staff cannot track attendance)
- Payment data displays incorrectly (financial inaccuracies)
- Data loss occurs (orders, shifts, or applications deleted unintentionally)
- App crashes on launch (unrecoverable error)
- Backend connection fails (cannot communicate with Data Connect)
- Critical security vulnerability (unauthorized access, data exposure)
📊 TESTING METRICS & REPORTING
Test Execution Summary
Date: __________
Tester: __________
Build Version: __________
| Category | Total Tests | Passed | Failed | Blocked | Pass Rate |
|---|---|---|---|---|---|
| Client Features | __ | __ | __ | __ | __% |
| Staff Features | __ | __ | __ | __ | __% |
| Cross-App Scenarios | __ | __ | __ | __ | __% |
| Infrastructure | __ | __ | __ | __ | __% |
| Smoke Tests | __ | __ | __ | __ | __% |
| TOTAL | __ | __ | __ | __ | __% |
Defect Severity Classification
Critical (P0): Release-blocking, affects core functionality
High (P1): Major functionality broken, workaround exists
Medium (P2): Minor functionality affected, low impact
Low (P3): Cosmetic issue, no functional impact
Sign-Off Criteria
Release can proceed when:
- All P0 defects resolved
- 95%+ pass rate on Critical Path tests
- 85%+ pass rate on all Feature tests
- No unresolved P1 defects in core features
- Cross-app scenarios pass 90%+
- Backend integration stable (no frequent failures)
- QA lead approval obtained
- Product owner approval obtained
📝 NOTES & CLARIFICATIONS NEEDED
The following items require clarification before full QA execution:
-
⚠️ Documents Feature (STAFF-015): Real Data Connect integration status unclear. Currently using mock implementation.
-
⚠️ Shift Cancellation: Feature existence and behavior not confirmed in current implementation.
-
⚠️ Race Condition Handling (Scenario 9): Backend concurrency control mechanism needs documentation.
-
⚠️ Payment Processing: End-to-end payment flow from shift completion to payment disbursement not fully implemented.
-
⚠️ NFC Tag Assignment: Hub NFC functionality interface exists but implementation status unclear.
-
⚠️ Recurring & Permanent Orders: Placeholder screens exist but full workflow not implemented.
-
⚠️ Reports Feature (Client): Currently shows placeholder, implementation status unknown.
-
⚠️ Notification System: Push notifications for shift assignments, cancellations, and status updates not covered in current analysis.
🎯 CONCLUSION
This QA checklist provides comprehensive coverage of all implemented features across both Client and Staff applications. It is designed for manual testing by QA engineers and supports release sign-off decisions based on structured test execution and clear pass/fail criteria.
Key Strengths:
- ✅ Feature-by-feature detailed test cases
- ✅ Cross-application integration scenarios
- ✅ Infrastructure and data consistency validation
- ✅ Clear release-blocking criteria
- ✅ Based on actual implemented code (not speculative)
Recommended Usage:
- Execute smoke tests before each build
- Run full feature regression weekly
- Execute cross-app scenarios before major releases
- Validate infrastructure after backend schema updates
- Use sign-off checklist for release go/no-go decisions
Document Maintainer: KROW QA Team
Last Updated: February 1, 2026
Next Review: Upon next major feature release