Files
PoleDanceApp/MANUAL_TESTS.md
Dianaka123 789d2bf0a6 Full app rebuild: FastAPI backend + React Native mobile with auth, championships, admin
Backend (FastAPI + SQLAlchemy + SQLite):
- JWT auth with access/refresh tokens, bcrypt password hashing
- User model with member/organizer/admin roles, auto-approve members
- Championship, Registration, ParticipantList, Notification models
- Alembic async migrations, seed data with test users
- Registration endpoint returns tokens for members, pending for organizers
- /registrations/my returns championship title/date/location via eager loading
- Admin endpoints: list users, approve/reject organizers

Mobile (React Native + Expo + TypeScript):
- Zustand auth store, Axios client with token refresh interceptor
- Role-based registration (Member vs Organizer) with contextual form labels
- Tab navigation with Ionicons, safe area headers, admin tab for admin role
- Championships list with status badges, detail screen with registration progress
- My Registrations with championship title, progress bar, and tap-to-navigate
- Admin panel with pending/all filter, approve/reject with confirmation
- Profile screen with role badge, Ionicons info rows, sign out
- Password visibility toggle (Ionicons), keyboard flow hints (returnKeyType)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 22:46:50 +03:00

6.3 KiB

Manual Test Tracker — Pole Championships App

Mark each item with PASS / FAIL / ⏭ SKIP


Setup

# Action Expected Result
S1 Backend running at http://localhost:8000 {"status":"ok"} at /internal/health
S2 Expo app loaded on phone Login screen visible
S3 Seed data present Run backend/.venv/Scripts/python seed.py — no errors

1. Registration (new account)

# Action Expected Result Notes
1.1 Tap "Don't have an account? Register" Register screen opens
1.2 Submit form with all fields empty Error: "fill in all required fields"
1.3 Fill: Name=Test User, Email=test@test.com, Password=Test1234 → Submit "Application Submitted" screen shown
1.4 Tap "Go to Sign In" Login screen shown
1.5 Try to register same email again Error: "Email already registered"

2. Login — Pending account (cannot access app)

# Action Expected Result Notes
2.1 Login with pending@pole.dev / Pending1234 Login succeeds but stays on auth screen (status=pending)
2.2 Login with wrong password pending@pole.dev / wrongpass Error: "Invalid credentials"
2.3 Login with non-existent email Error: "Invalid credentials"

3. Login — Approved member

# Action Expected Result Notes
3.1 Login with member@pole.dev / Member1234 App opens, Championships tab visible
3.2 Championships list loads 2 championships shown (Spring Open 2026, Summer Championship 2026)
3.3 Spring Open 2026 shows green OPEN badge Green badge visible
3.4 Summer Championship 2026 shows grey DRAFT badge Grey badge visible
3.5 Spring Open shows entry fee 50 BYN "💰 Entry fee: 50 BYN" visible
3.6 Spring Open shows location "📍 Cultural Center, Minsk" visible
3.7 Spring Open shows image Banner image loads

4. Championship Detail

# Action Expected Result Notes
4.1 Tap "Spring Open 2026" Detail screen opens
4.2 Detail shows title, location, date All fields visible
4.3 Categories shown: Novice, Amateur, Professional 3 purple tags visible
4.4 Judges section shows 2 judges Oksana Ivanova + Marta Sokolova
4.5 "Open Registration Form ↗" button visible Tapping opens link in browser
4.6 "Register for Championship" button visible Button at bottom
4.7 Tap "Summer Championship 2026" Detail opens, no Register button (status=draft)

5. Registration Flow

# Action Expected Result Notes
5.1 On Spring Open detail, tap "Register for Championship" Confirmation alert appears
5.2 Tap Cancel in alert Alert dismisses, no registration created
5.3 Tap Register → confirm Success alert shown
5.4 After registering: progress steps appear "Application submitted" step shown as green
5.5 "Register for Championship" button disappears No duplicate registration possible
5.6 Go back, tap Spring Open again Progress steps still visible
5.7 Try registering for same championship again (via API or re-tap) Error: "Already registered"

6. My Registrations Tab

# Action Expected Result Notes
6.1 Tap "My Registrations" tab Screen opens
6.2 Registration for Spring Open visible Shows reg ID + SUBMITTED badge (yellow)
6.3 Pull to refresh List refreshes
6.4 Login as pending@pole.dev My Registrations shows empty

7. Profile Tab

# Action Expected Result Notes
7.1 Tap Profile tab Profile screen opens
7.2 Shows full name, email, role=member, status=approved All correct
7.3 Avatar shows first letter of name "A" for Anna Petrova
7.4 Tap "Sign Out" Confirmation alert appears
7.5 Confirm sign out Redirected to Login screen
7.6 After logout, reopen app Login screen shown (not auto-logged in)

8. Token Persistence (session restore)

# Action Expected Result Notes
8.1 Login as member, close Expo Go completely
8.2 Reopen Expo Go, scan QR App opens directly on Championships (no re-login)
8.3 Restart backend server while logged in App still works after backend restarts

9. Admin user (via API — no admin UI yet)

# Action Expected Result Notes
9.1 Login as admin@pole.dev / Admin1234 App opens (role=admin, status=approved)
9.2 Championships visible Same list as member
9.3 Approve pending user via API:
curl -X PATCH http://localhost:8000/api/v1/users/<user_id>/approve -H "Authorization: Bearer <token>"
Returns status: approved

10. Edge Cases & Error Handling

# Action Expected Result Notes
10.1 Stop backend server, open app Championships shows "Failed to load championships"
10.2 Stop backend, try login Login shows error message (not crash)
10.3 Pull to refresh on Championships Spinner appears, list reloads
10.4 Very slow network (throttle in phone settings) Loading spinners show while waiting

Summary

Section Total Pass Fail Skip
1. Registration 5
2. Login — Pending 3
3. Login — Member 7
4. Championship Detail 7
5. Registration Flow 7
6. My Registrations 4
7. Profile 6
8. Session Restore 3
9. Admin 3
10. Edge Cases 4
Total 49

Known Limitations (not bugs)

  • No admin UI — user approval done via API only
  • Organizer role has no extra UI in the mobile app yet
  • Push notifications not implemented
  • Instagram sync not implemented (requires credentials)