139 lines
4.7 KiB
Markdown
139 lines
4.7 KiB
Markdown
# Private MVP QA Checklist
|
|
|
|
Manual testing checklist for the Closer app private MVP.
|
|
|
|
## Onboarding
|
|
|
|
- [ ] App launches to onboarding screen on fresh install
|
|
- [ ] Onboarding screens advance correctly (swipe/tap)
|
|
- [ ] "Get Started" leads to sign-up screen
|
|
- [ ] Sign-up: email + password creates account
|
|
- [ ] Sign-up: validation errors show (empty fields, weak password, existing email)
|
|
- [ ] Login: existing user can sign in
|
|
- [ ] Login: "Forgot password" navigates to reset screen
|
|
- [ ] Create Profile: name + avatar saved to Firestore
|
|
- [ ] Profile creation completes and navigates to home
|
|
|
|
## Home Screen
|
|
|
|
- [ ] Home screen loads after onboarding
|
|
- [ ] Daily question card is visible
|
|
- [ ] Question pack sections display correctly
|
|
- [ ] Navigation between tabs (Home, Dates, Wheel, Settings)
|
|
- [ ] Pull-to-refresh reloads content
|
|
- [ ] Partner home view shows when coupled
|
|
|
|
## Questions
|
|
|
|
### Daily Question
|
|
- [ ] Today's question loads
|
|
- [ ] User can answer (select option or type response)
|
|
- [ ] Answer is saved to Firestore
|
|
- [ ] "Partner answered" notification flow works (if coupled)
|
|
|
|
### Question Packs
|
|
- [ ] Pack library screen lists available packs
|
|
- [ ] Premium packs show lock icon (if not subscribed)
|
|
- [ ] Free packs can be opened
|
|
- [ ] Category picker shows categories
|
|
- [ ] Selecting a category loads questions from that category
|
|
|
|
### Question Detail & Thread
|
|
- [ ] Question detail screen loads with full text
|
|
- [ ] Answer reveal shows both partner answers (if both answered)
|
|
- [ ] Discussion thread loads messages
|
|
- [ ] User can send a message in thread
|
|
- [ ] Answer history screen shows past answers
|
|
|
|
## Date Match
|
|
|
|
- [ ] Date match screen shows swipe UI
|
|
- [ ] Swipe right = "love", swipe left = "skip"
|
|
- [ ] "Maybe" button works
|
|
- [ ] Match reveal screen appears when both partners like same idea
|
|
- [ ] Date matches screen shows all mutual matches
|
|
- [ ] Empty state shows when no matches
|
|
|
|
## Date Builder
|
|
|
|
- [ ] Date builder screen loads with suggestion fields
|
|
- [ ] Date and time picker buttons present (currently TODO placeholders)
|
|
- [ ] Save date plan works (if implemented)
|
|
|
|
## Bucket List
|
|
|
|
- [ ] Bucket list screen shows saved date ideas
|
|
- [ ] Adding items works
|
|
- [ ] Completing/removing items works
|
|
|
|
## Wheel
|
|
|
|
- [ ] Spin wheel animates and selects a category
|
|
- [ ] Category picker shows available categories
|
|
- [ ] Wheel complete screen shows result
|
|
- [ ] Wheel history screen shows past spins
|
|
|
|
## Partner Pairing
|
|
|
|
### Create Invite
|
|
- [ ] Invite code generates and displays
|
|
- [ ] Copy button copies code to clipboard
|
|
- [ ] Share button opens Android share sheet (Intent.ACTION_SEND)
|
|
- [ ] "Accept instead" link navigates to AcceptInvite
|
|
|
|
### Accept Invite
|
|
- [ ] Code entry field works
|
|
- [ ] Back button navigates correctly
|
|
- [ ] Valid code proceeds to InviteConfirm
|
|
|
|
### Invite Confirm
|
|
- [ ] Partner info displays correctly
|
|
- [ ] "Confirm" button links couple in Firestore
|
|
- [ ] "Wrong code" link returns to AcceptInvite
|
|
- [ ] Back button works
|
|
|
|
## Settings
|
|
|
|
- [ ] Settings screen loads with all sections
|
|
- [ ] Profile row shows local profile state (not fake data)
|
|
- [ ] Partner row tappable, navigates to RelationshipSettings
|
|
- [ ] Account screen shows profile info
|
|
- [ ] Delete account screen requires checkbox acknowledgement
|
|
- [ ] Notification settings screen present
|
|
- [ ] Privacy screen present
|
|
- [ ] Subscription screen present
|
|
- [ ] Legal section: Privacy Policy link opens externally
|
|
- [ ] Legal section: Terms of Service link opens externally
|
|
- [ ] Sign out works
|
|
|
|
## Paywall
|
|
|
|
- [ ] Paywall screen shows benefits list
|
|
- [ ] Product options display with prices
|
|
- [ ] Purchase button triggers RevenueCat flow
|
|
- [ ] Restore purchases link works
|
|
- [ ] Privacy Policy and Terms links at bottom open externally
|
|
- [ ] "Subscription terms apply" disclaimer visible
|
|
- [ ] Thank-you overlay appears on successful purchase
|
|
- [ ] Loading and error states display correctly
|
|
|
|
## Notifications
|
|
|
|
- [ ] App requests POST_NOTIFICATIONS permission on Android 13+
|
|
- [ ] FCM token obtained and stored in Firestore
|
|
- [ ] Quiet hours can be set in notification settings
|
|
- [ ] Notification channel "Reminders" created
|
|
|
|
## Edge Cases & Crash Risks
|
|
|
|
- [ ] App works offline (local cache)
|
|
- [ ] App handles no network gracefully (error states, not crashes)
|
|
- [ ] Rapid navigation doesn't crash (tap all tabs quickly)
|
|
- [ ] Back navigation from every screen works
|
|
- [ ] Rotation doesn't crash (if not locked to portrait)
|
|
- [ ] Empty states show for: no questions, no matches, no history, no partner
|
|
|
|
## Known Issues (from code scan)
|
|
|
|
- **TODOs in code**: `DateBuilderScreen.kt` has TODO placeholders for date/time picker dialogs (lines 174, 182)
|
|
- **Debug logging**: `QuestionJsonParser.kt` uses `android.util.Log.e()` — should use Timber or remove before release |