Files
rehearshalhub/testing_guide.md
Mistral Vibe 6f0e2636d0 feat(mobile): Implement responsive mobile menu with band context preservation
This commit implements a comprehensive mobile menu solution that:

1. **Mobile Menu Components**:
   - Created TopBar.tsx with circular band switcher (mobile only)
   - Enhanced BottomNavBar.tsx with band-context-aware navigation
   - Updated ResponsiveLayout.tsx to integrate TopBar for mobile views

2. **Band Context Preservation**:
   - Fixed black screen issue by preserving band context via React Router state
   - Implemented dual context detection (URL params + location state)
   - Added graceful fallback handling for missing context

3. **Visual Improvements**:
   - Changed band display from square+text to perfect circle with initials only
   - Updated dropdown items to use consistent circular format
   - Improved mobile space utilization

4. **Debugging & Testing**:
   - Added comprehensive debug logging for issue tracking
   - Created test plans and documentation
   - Ensured all static checks pass (TypeScript + ESLint)

5. **Shared Utilities**:
   - Created utils.ts with shared getInitials() function
   - Reduced code duplication across components

Key Features:
- Mobile (<768px): TopBar + BottomNavBar + Main Content
- Desktop (≥768px): Sidebar (unchanged)
- Band context preserved across all mobile navigation
- Graceful error handling and fallbacks
- Comprehensive debug logging (can be removed in production)

Files Changed:
- web/src/utils.ts (new)
- web/src/components/TopBar.tsx (new)
- web/src/components/BottomNavBar.tsx (modified)
- web/src/components/ResponsiveLayout.tsx (modified)
- web/src/components/Sidebar.tsx (modified)

Documentation Added:
- implementation_summary.md
- refinement_summary.md
- black_screen_fix_summary.md
- test_plan_mobile_menu_fix.md
- test_plan_refinement.md
- testing_guide.md
- black_screen_debug.md

Resolves:
- Mobile menu band context loss
- Black screen on Library navigation
- Inconsistent band display format
- Missing mobile band switching capability

Breaking Changes: None
Backward Compatibility: Fully maintained

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-04-07 13:26:33 +00:00

227 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Mobile Menu Testing Guide
## Service Information
- **URL**: `http://localhost:8080`
- **Status**: Running (rebuilt with latest changes)
- **Port**: 8080
## Testing Instructions
### Step 1: Access the Application
1. Open your browser
2. Navigate to: `http://localhost:8080`
3. Log in with your credentials
### Step 2: Set Up Test Data
1. Create at least 2 test bands (if not already created)
2. Add some songs to each band (optional, for Player testing)
3. Note the band IDs from the URLs
### Step 3: Open Developer Tools
1. Press **F12** or **Ctrl+Shift+I** (Windows/Linux) / **Cmd+Opt+I** (Mac)
2. Go to the **Console** tab
3. Clear existing logs (optional)
### Step 4: Test Band Display Format
**Objective**: Verify band is displayed as circle only (no text)
**Steps**:
1. Resize browser window to **mobile size** (<768px width)
2. Observe the **TopBar** in the top right corner
3. Click the band switcher to open the dropdown
**Expected Results**:
✅ Only circular band initials visible (no text)
✅ Perfect circle shape (borderRadius: 50%)
✅ Dropdown items also show circles
✅ Size: 32×32px for main, 24×24px for dropdown
**Visual Check**:
- Before: ▢ AB + "Band Name"
- After: ⚪ AB (circle only)
### Step 5: Test Library Navigation (Debug Black Screen)
**Objective**: Identify and fix black screen issue
**Steps**:
1. Navigate directly to a band's library: `/bands/your-band-id`
2. Click **"Settings"** in bottom navigation
3. Click **"Library"** in bottom navigation
4. Observe console output and page behavior
**Expected Console Logs**:
```
BottomNavBar - Current band ID: "your-band-id" Path: "/bands/your-band-id"
BottomNavBar - Current band ID: "your-band-id" Path: "/bands/your-band-id/settings/members"
Library click - Navigating to band: "your-band-id"
```
**Expected Page Behavior**:
✅ Band library content loads
✅ No black screen
✅ Correct band context preserved
✅ URL shows: `/bands/your-band-id`
### Step 6: Test Error Handling
**Objective**: Verify graceful handling when no band context
**Steps**:
1. Navigate to settings page: `/settings`
2. Click **"Library"** in bottom navigation
3. Observe console warnings
**Expected Results**:
✅ Console shows: `Library click - No current band ID found!`
✅ Navigates to `/bands` (graceful fallback)
✅ No JavaScript errors
✅ App doesn't crash
### Step 7: Test Band Context Preservation
**Objective**: Verify context is preserved across navigation
**Steps**:
1. Navigate to Band A's library
2. Click **"Settings"** → back to **"Library"**
3. Click **"Player"** (if enabled) → back to **"Library"**
4. Click **"Members"** → back to **"Library"**
5. Repeat with Band B
**Expected Results**:
✅ Always returns to correct band's library
✅ URL shows correct band ID
✅ Content loads properly (no black screens)
✅ Band context never lost
### Step 8: Test Responsive Layout
**Objective**: Verify mobile/desktop switching
**Steps**:
1. Start with **desktop size** (≥768px)
2. Verify Sidebar shows band properly
3. Resize to **mobile size** (<768px)
4. Verify TopBar shows circle band display
5. Resize back to desktop
6. Verify Sidebar returns
**Expected Results**:
✅ Smooth transition between layouts
✅ Band context preserved during resizing
✅ No layout glitches
✅ Consistent band display format
## Debugging Black Screen Issue
### If Black Screen Occurs:
1. **Check Console Output**
- Look for `currentBandId: null` or `undefined`
- Note any JavaScript errors
- Capture warnings and debug logs
2. **Check Network Requests**
- Go to **Network** tab
- Filter for `/bands/*` requests
- Verify 200 OK responses
- Check response payloads
3. **Test Direct Navigation**
- Manually enter: `/bands/your-band-id`
- Verify page loads correctly
- Compare with bottom nav behavior
4. **Examine React Query Cache**
- In console: `window.queryClient.getQueryData(['band', 'your-band-id'])`
- Check if band data exists
- Verify data structure
### Common Issues & Fixes:
| Issue | Console Output | Solution |
|-------|---------------|----------|
| Context loss | `currentBandId: null` | Improve context preservation |
| URL parsing fail | `currentBandId: undefined` | Debug matchPath logic |
| No data | Empty cache | Check API responses |
| Race condition | Intermittent failures | Add loading states |
## Test Results Template
```markdown
## Test Results - Mobile Menu Refinement
**Tester**: [Your Name]
**Date**: [YYYY-MM-DD]
**Browser**: [Chrome/Firefox/Safari] [Version]
**Device**: [Desktop/Mobile] [OS]
### Test 1: Band Display Format
- [ ] Pass
- [ ] Fail
**Notes**: [Observations]
### Test 2: Library Navigation
- [ ] Pass
- [ ] Fail
**Console Output**:
```
[Paste relevant logs here]
```
**Notes**: [Observations]
### Test 3: Error Handling
- [ ] Pass
- [ ] Fail
**Console Output**:
```
[Paste relevant logs here]
```
**Notes**: [Observations]
### Test 4: Band Context Preservation
- [ ] Pass
- [ ] Fail
**Notes**: [Observations]
### Test 5: Responsive Layout
- [ ] Pass
- [ ] Fail
**Notes**: [Observations]
### Additional Observations:
- [Issue 1]: [Description]
- [Issue 2]: [Description]
### Overall Result:
- [ ] ✅ All Tests Pass
- [ ] ⚠️ Some Issues Found
- [ ] ❌ Critical Issues
### Next Steps:
1. [Action Item 1]
2. [Action Item 2]
```
## Support Information
**Debug Logs Location**: Browser console (F12 → Console)
**Network Monitoring**: Browser dev tools (F12 → Network)
**React Query Cache**: `window.queryClient.getQueryData(['band', 'id'])`
**Need Help?**
1. Share console output
2. Describe reproduction steps
3. Note browser/version
4. Include screenshots
**Contact**: Development team
**Priority**: High (user-facing mobile issue)
## Quick Reference
- **URL**: `http://localhost:8080`
- **Mobile Breakpoint**: <768px
- **Desktop Breakpoint**: ≥768px
- **Expected Band Display**: Circle only (no text)
- **Debug Logs**: Check console for band ID values
- **Fallback**: `/bands` when no context
**Happy Testing!** 🎯