QA Test Guide — performance branch
What changed: Auth flow, API response formats, query limits, admin dashboard stats, appointment handling, activity submission, approval slips, notifications. All changes are under-the-hood — no UI was redesigned.
How to test: Run both servers (npm run dev in sroapp/ and srobackend/). Test as each role.
Before testing: Run database/migrations/20260413_performance_safety_constraints.sql in Supabase SQL Editor. This adds unique constraints for account email, appointment slots, and activity IDs.
1. Login & Navigation
Changed: Token caching, user sync only fires once per session, lazy-loaded routes.
2. Admin Dashboard
Changed: Stats use count queries instead of loading all rows. Calendar data capped at 200.
3. Student Activities List
Changed: /api/activities/incoming and /summary now return paginated responses.
4. Student Requests Page
Changed: /activities/user/:id now returns paginated response.
5. Activity Submission
Changed: Activity IDs use 5-digit random with retry. Schedule failure cleans up activity record.
6. Activity Edit/Appeal
Changed: Schedule update failure now returns error instead of silent 200.
7. Appointment Booking
Changed: Unique constraint on slots, 409 on conflict.
8. Appointment Settings
Changed: Expired appointments detected server-side, queries limited to 200, narrowed selects.
9. Org Applications
Changed: Query capped at 200.
10. Approval Slip Generation
Changed: DB updates batched, fetch limited to 50, status uses count query.
11. Notifications
Changed: Proper subscription cleanup, deduplication on real-time notifications.
12. Email Notifications
Changed: SMTP transporter reused instead of created per request.
What NOT to test
- UI styling/layout — nothing changed visually
- File uploads to Google Drive — upload flow unchanged
- Supabase auth (Google OAuth) — untouched
- Annual reports page — no changes
- Super admin page — no changes
- Organization profiles — no changes
QA Test Guide —
performancebranchWhat changed: Auth flow, API response formats, query limits, admin dashboard stats, appointment handling, activity submission, approval slips, notifications. All changes are under-the-hood — no UI was redesigned.
How to test: Run both servers (
npm run devinsroapp/andsrobackend/). Test as each role.1. Login & Navigation
Changed: Token caching, user sync only fires once per session, lazy-loaded routes.
/dashboard/admin/adviser2. Admin Dashboard
Changed: Stats use count queries instead of loading all rows. Calendar data capped at 200.
/admin→ all 6 stat cards show correct numbers3. Student Activities List
Changed:
/api/activities/incomingand/summarynow return paginated responses./admin/student-activities→ table loads with activities4. Student Requests Page
Changed:
/activities/user/:idnow returns paginated response./requests→ activities appear in correct tabs5. Activity Submission
Changed: Activity IDs use 5-digit random with retry. Schedule failure cleans up activity record.
/requests/admin/create-activity→ appears as auto-approved6. Activity Edit/Appeal
Changed: Schedule update failure now returns error instead of silent 200.
7. Appointment Booking
Changed: Unique constraint on slots, 409 on conflict.
8. Appointment Settings
Changed: Expired appointments detected server-side, queries limited to 200, narrowed selects.
/admin/appointment-settings→ appointments load9. Org Applications
Changed: Query capped at 200.
/admin/org-applications→ applications load and display10. Approval Slip Generation
Changed: DB updates batched, fetch limited to 50, status uses count query.
11. Notifications
Changed: Proper subscription cleanup, deduplication on real-time notifications.
12. Email Notifications
Changed: SMTP transporter reused instead of created per request.
What NOT to test