- Limit reached: Add 10 recipes as a free user → verify redirected to upgrade screen
- No loop: From upgrade screen, tap Go Back → verify returns to Recipes tab (no loop)
- Coming Soon state: With no RevenueCat keys in
.env.local→ verify "Coming Soon" box renders cleanly - Pricing loads: With RevenueCat keys configured → verify package cards render with correct price strings
- Trial badge: If offering has intro price configured → verify trial text appears on package card
- Successful purchase: Tap a package → complete sandbox purchase → verify "Welcome to Premium!" alert
- Navigate after purchase: Confirm success alert → tap "Let's Go!" → verify taken to Add screen with no recipe limit
- Cancelled purchase: Start purchase → cancel from system dialog → verify no error alert, user still on upgrade screen
- Failed purchase: Simulate payment failure → verify user-friendly error alert with OK button
- Premium gate bypassed: Sign in as premium user → navigate to Add → verify no limit alert fires
- Restore with existing sub: Reinstall app / sign in fresh → tap "Restore Purchases" → verify premium re-granted
- Restore with no sub: Tap "Restore Purchases" on a free account → verify "No Active Subscription" alert
- Restore failure: Simulate network error during restore → verify "Restore Failed" alert with message
- Restore hidden without RC keys: With no RevenueCat keys → verify "Restore Purchases" button is not shown
- Free user at limit: Sign in as free user with 10 recipes → tap Add tab → verify redirected to upgrade screen
- Premium user at 10+: Sign in as premium user with 10+ recipes → tap Add tab → verify full Add screen shown normally
- RevenueCat entitlement takes priority: Ensure
PurchaseService.isPremium()is checked beforesubscription_tiermetadata
- Login links customer: Sign in with existing account → verify RevenueCat
loginUsercalled (check RC dashboard customer list) - Logout anonymises customer: Sign out → verify
logoutUsercalled and no entitlement carried over - Session restore links customer: Kill and reopen app with active session → verify customer re-linked on load
- Quick Categories: Rapidly click Italian → Mexican → Asian categories - verify no "Maximum update depth exceeded" errors
- Search Filter Stress: Open filters → select ingredients → clear filters → repeat 10 times - verify no crashes
- Recipe List Navigation: Scroll through recipes → toggle favorites → delete items rapidly - verify smooth performance
- [ x Tab Switching: Switch between tabs while operations are running - verify no render conflicts
- Simultaneous Operations: Try to load recipes while another load is in progress - verify guard prevents issues
- Demo Data Initialization: Restart app multiple times - verify demo data only initializes once per session
- Background Tasks: Navigate away and back while recipe is processing - verify stable state
- Long Sessions: Use app for extended periods - verify no memory leaks or performance degradation
- Large Recipe Lists: Test with 50+ recipes - verify smooth scrolling and filtering
- Network Interruptions: Test recipe processing with poor network - verify graceful handling
- URL Processing: Process a recipe from URL → Click "View Recipe" in success alert → Verify navigation to recipe view
- Manual Entry: Create a manual recipe → Click "View Recipe" in success alert → Verify navigation to recipe view
- Existing Recipe: Process a URL for existing recipe → Click "View Recipe" → Verify shows correct existing recipe
- Add Screen Navigation: From Add tab, create recipe and view → Verify navigates to Recipes tab
- Mobile Testing: Verify no
window.confirmerrors on mobile devices - Alert Consistency: All alerts use React Native Alert.alert() format
- Button Actions: Test all alert buttons ("OK", "View Recipe", "Cancel") work correctly
- Alert Content: Verify alert messages are properly formatted and informative
- Edit Mode: Open recipe → Tap edit → Verify form pre-populated with existing data
- Spell Check: Verify spell check enabled on title, ingredients, directions fields
- Validation: Test form validation with empty/invalid inputs
- Save Updates: Make changes → Save → Verify recipe updated in list
- Cancel Edit: Open edit → Make changes → Cancel → Verify no changes saved
- Touch Targets: Verify all buttons are easily tappable on mobile (44pt minimum)
- Button Feedback: Test button press states and visual feedback
- Modal Responsiveness: Test modal sizing on different screen sizes
- Keyboard Handling: Test text input with on-screen keyboard
- Open app and navigate to Recipes tab
- Test text search with recipe names (e.g., "pasta", "chicken")
- Verify search results update in real-time
- Test empty search returns all recipes
- Tap "Filter by Ingredients" to expand
- Select multiple ingredients (e.g., "tomato", "cheese")
- Verify only recipes with selected ingredients show
- Test ingredient deselection removes filter
- Tap "Filter by Cuisine" to expand
- Select cuisine types (e.g., "Italian", "Mexican")
- Verify cuisine filter works correctly
- Test combining ingredient + cuisine filters
- Type search term AND select ingredients/cuisines
- Verify all filters work together correctly
- Test clearing all filters returns full list
- Check "No recipes found" message for empty results
- Navigate to Recipes tab
- Tap ⭐ icon next to any recipe (should fill star)
- Tap filled ⭐ to remove favorite (should empty star)
- Open recipe in RecipeViewer
- Test "Add to Favorites" / "Remove from Favorites" button
- Verify favorite status syncs between RecipeList and RecipeViewer
- On home screen, enter a recipe URL (e.g., "allrecipes.com")
- Tap "Continue" to open action modal
- Tap "⭐ Add to Favorites" button
- Verify URL is saved to favorites
- Test adding same URL again (should show already favorited)
- Navigate to new "Favorites" tab in bottom navigation
- Verify favorited recipes appear in "Recipes" tab
- Verify favorited URLs appear in "URLs" tab
- Test "All" tab shows both recipes and URLs
- Tap recipe favorite to open RecipeViewer
- Tap URL favorite to open in browser
- In Favorites tab, tap ❌ next to any favorite
- Verify favorite is removed from list
- Go back to RecipeList and verify star is empty
- Test removing URL favorites
- In Favorites tab, tap 📤 next to any favorite
- Verify share dialog opens correctly
- Test sharing recipe vs URL favorites
- Empty URL: Test submitting empty URL → Verify error alert
- Invalid URL: Test malformed URLs → Verify validation error
- Auto-Protocol: Test URL without https:// → Verify auto-addition of https://
- Various Domains: Test different recipe sites (AllRecipes, Food Network, etc.)
- Valid Recipe Page: Test URL with recipe → Verify successful extraction
- Non-Recipe Page: Test non-recipe URL → Verify "No Recipe Found" alert
- Complex Recipes: Test recipes with many ingredients/steps → Verify complete extraction
- Missing Elements: Test pages with partial recipe data → Verify graceful handling
- First Time: Process new recipe URL → Verify saves successfully
- Duplicate URL: Process same URL again → Verify "Recipe Already Saved" alert
- View Existing: From duplicate alert → Click "View Recipe" → Verify shows existing recipe
- Network Error: Test with no internet → Verify network error alert
- CORS Issues: Test blocked websites → Verify CORS error with alternatives
- Timeout: Test slow-loading sites → Verify timeout handling
- Manual Fallback: From error alerts → Click "Enter Manually" → Verify manual entry opens
- Loading Indicator: Verify spinner shows during processing
- Button Disabled: Verify process button disabled during processing
- Cancel During Process: Test closing modal during processing → Verify graceful cancellation
- Test all 5 bottom tabs work: Home, Recipes, Favorites, Inventory, Profile
- Verify favorites badge/icon shows correct state
- Test tab switching preserves state
- Check all new components match app color scheme
- Verify proper spacing and typography
- Test on different screen sizes (if possible)
- Check dark/light mode compatibility (if implemented)
- Test app startup time with favorites data
- Check recipe list scrolling performance
- Verify search typing is responsive
- Test favorites loading speed
- Add favorite with internet connection
- Check if favorite persists after app restart
- Test favorites sync across devices (if multiple devices)
- Verify database schema matches documentation
- Turn off internet/wifi
- Add recipes to favorites
- Restart app and verify favorites persist
- Turn internet back on and test sync
- Test app upgrade with existing favorites
- Verify no favorites are lost during updates
- Check proper data format in both storage systems
- Test adding favorites with poor internet
- Verify graceful fallback to local storage
- Test sync when connection restored
- Test with very long recipe names
- Add 100+ favorites and test performance
- Test with special characters in URLs
- Try invalid URLs in favorites
- Test rapid favorite toggling (stress test)
- Verify proper loading states/spinners
- Check error messages are user-friendly
- Test accessibility features (if implemented)
- Search for recipe → Filter results → Favorite recipe
- Open recipe → Read details → Add to favorites
- Go to favorites → Open recipe → Remove from favorites
- Verify entire flow works smoothly
- Enter URL → Add to favorites → View in favorites
- Open URL from favorites → Bookmark externally
- Test with various recipe website URLs
- Verify URL validation works correctly
- Search + Filter + Favorite workflow
- Recipe sharing with favorites integration
- Inventory tracking with favorite recipes
- Profile data with favorites statistics
- ⭐ Favorite toggle button on all recipes
- Favorites tab shows all favorited items
- Favorites persist after app restart
- Search and filters work correctly
- URL favorites open in browser
- Fast performance on large recipe lists
- Intuitive user interface
- Proper error messages
- Offline functionality
- Theme consistency
- Advanced filtering combinations
- Social sharing features
- Cross-device sync
- Advanced search options
- Analytics/statistics
- All core functionality tested ✅
- No critical bugs found ✅
- Performance acceptable ✅
- User interface polished ✅
- Documentation updated ✅
- Database schema finalized ✅
- Error handling implemented ✅
- Offline mode working ✅
- Premium purchase flow tested on device ✅
- Restore Purchases tested ✅
- Favorites usage rate
- Search/filter engagement
- App performance with favorites
- User retention with favorites
- Error rates in favorites system
- Ease of favoriting recipes
- Usefulness of search/filters
- Performance with many favorites
- Missing features or improvements
- UI/UX suggestions
Testing Notes:
- Test on multiple devices if available
- Try both Android and iOS if possible
- Test with different data volumes (few vs many recipes)
- Focus on real-world usage scenarios
- Document any bugs or issues found
- Add 10+ recipes with a variety of cuisines, ingredient counts, and difficulty levels
- Include recipes with long ingredient lists (20+ items)
- Include recipes with minimal ingredients (3-5 items)
- Add recipes with and without images
- Add recipes with special characters and emojis in titles/ingredients
- Add recipes with missing optional fields (e.g., no image, no description)
- Add recipes with step-by-step images (if supported)
- Use URLs from major recipe sites (AllRecipes, Food Network, NYT Cooking, etc.)
- Include valid and invalid URLs
- Test with recipe URLs that require scrolling or login
- Add duplicate URLs for duplicate handling tests
- Favorite a mix of recipes and URLs
- Add/remove favorites rapidly to test edge cases
- Test favorites with and without internet connection
- Add recipes with very long names and directions
- Add recipes with non-English characters
- Add recipes with accessibility tags (if supported)
Ready to Ship: ✅ All tests passing, features complete, documentation ready!