Files
school_compare/nextjs-app/QA_CHECKLIST.md

252 lines
7.3 KiB
Markdown
Raw Normal View History

# QA Checklist - SchoolCompare Next.js Migration
## Functionality Testing
### Home Page
- [ ] Page loads with SSR (view source shows rendered HTML)
- [ ] Featured schools display correctly
- [ ] Search by school name filters results
- [ ] Search by postcode finds nearby schools
- [ ] Radius filter works with postcode search
- [ ] Local authority filter updates results
- [ ] School type filter updates results
- [ ] Pagination works correctly
- [ ] "Add to Compare" button adds schools to basket
- [ ] Comparison badge shows correct count
- [ ] School cards display all information (name, type, location, metrics)
- [ ] Trend indicators show correct direction (↗ ↘ →)
- [ ] Links to school detail pages work
- [ ] Empty state shows when no results
### Individual School Pages
- [ ] School detail page loads with SSR
- [ ] URL format: `/school/{urn}` works
- [ ] School name and meta information display
- [ ] Latest results summary shows correctly
- [ ] Performance chart displays multi-year data
- [ ] All metrics sections render (Reading, Writing, Maths)
- [ ] Absence data shows if available
- [ ] Map displays school location
- [ ] Historical data table shows all years
- [ ] "Add to Compare" button works
- [ ] "In Comparison" state shows when already added
- [ ] Meta tags are correct (check view source)
- [ ] JSON-LD structured data validates
- [ ] 404 page shows for invalid URN
### Compare Page
- [ ] Compare page loads with SSR
- [ ] URL format: `/compare?urns=...` works
- [ ] Selected schools load from URL
- [ ] Schools display in comparison grid
- [ ] Metric selector changes chart
- [ ] Performance chart displays all schools
- [ ] Comparison table shows correct values
- [ ] "Remove" button removes school from comparison
- [ ] "+ Add School" opens search modal
- [ ] School search modal works
- [ ] Maximum 5 schools enforced
- [ ] URL updates when schools added/removed
- [ ] Empty state shows when no schools selected
- [ ] Comparison persists in localStorage
- [ ] Sharing URL loads same comparison
### Rankings Page
- [ ] Rankings page loads with SSR
- [ ] Default metric displays (RWM Expected)
- [ ] Metric selector updates rankings
- [ ] Area filter updates rankings
- [ ] Year filter updates rankings
- [ ] Rankings display in correct order
- [ ] Top 3 schools have special styling (medals)
- [ ] "Add to Compare" button works
- [ ] School links navigate to detail pages
- [ ] Rankings table is responsive
### Navigation & Layout
- [ ] Navigation bar displays correctly
- [ ] Active page is highlighted in nav
- [ ] Comparison badge updates in real-time
- [ ] Footer displays correctly
- [ ] Logo links to home page
- [ ] Mobile menu works (if applicable)
## Cross-Browser Testing
### Desktop Browsers
- [ ] Chrome (latest)
- [ ] Firefox (latest)
- [ ] Safari (latest)
- [ ] Edge (latest)
### Mobile Browsers
- [ ] iOS Safari
- [ ] Android Chrome
- [ ] Samsung Internet
## Responsive Design
### Breakpoints
- [ ] Desktop (1280px+): Full layout
- [ ] Tablet (768px-1279px): Adjusted layout
- [ ] Mobile (<768px): Stacked layout
### Components
- [ ] School cards adapt to screen size
- [ ] Charts are responsive
- [ ] Maps are responsive
- [ ] Tables scroll horizontally on mobile
- [ ] Navigation adapts to mobile
- [ ] Filters stack on mobile
## Performance Testing
### Lighthouse Scores (Target: 90+)
- [ ] Performance: ____
- [ ] Accessibility: ____
- [ ] Best Practices: ____
- [ ] SEO: ____
### Core Web Vitals
- [ ] LCP (Largest Contentful Paint): < 2.5s
- [ ] FID (First Input Delay): < 100ms
- [ ] CLS (Cumulative Layout Shift): < 0.1
### Load Times
- [ ] Home page: < 2s
- [ ] School detail page: < 2s
- [ ] Compare page: < 2s
- [ ] Rankings page: < 2s
## SEO Testing
- [ ] Sitemap generates correctly (`/sitemap.xml`)
- [ ] Robots.txt accessible (`/robots.txt`)
- [ ] Meta titles are unique per page
- [ ] Meta descriptions are descriptive
- [ ] Open Graph tags present
- [ ] Twitter Card tags present
- [ ] Canonical URLs set correctly
- [ ] JSON-LD structured data validates (use Google Rich Results Test)
- [ ] School pages indexed in Google (post-launch)
## Accessibility Testing
### WCAG 2.1 AA Compliance
- [ ] Keyboard navigation works
- [ ] Focus indicators visible
- [ ] Color contrast ratios meet standards
- [ ] Alt text on images (if any)
- [ ] ARIA labels on interactive elements
- [ ] Form labels present
- [ ] Headings in logical order
- [ ] No accessibility errors in axe DevTools
- [ ] No accessibility errors in WAVE
### Screen Reader Testing
- [ ] Page structure makes sense
- [ ] All interactive elements announced
- [ ] Navigation is clear
## Data Integration Testing
### API Integration
- [ ] All API endpoints respond correctly
- [ ] Error handling works (try invalid URN)
- [ ] Loading states display
- [ ] Data formats correctly
- [ ] Caching works (check Network tab)
### Edge Cases
- [ ] Schools with null data values display "-"
- [ ] Schools with no yearly data handled
- [ ] Schools with no location don't break map
- [ ] Empty search results show empty state
- [ ] Invalid postcode shows error
## Security Testing
- [ ] HTTPS enabled (production)
- [ ] Security headers present (X-Frame-Options, etc.)
- [ ] No API keys exposed in client code
- [ ] CORS configured correctly
- [ ] XSS prevention (try injecting scripts)
- [ ] No console errors or warnings
## State Management Testing
### URL State
- [ ] Filter changes update URL
- [ ] Browser back/forward buttons work
- [ ] Sharing URLs preserves state
- [ ] Page refresh preserves filters
### LocalStorage
- [ ] Comparison basket persists across sessions
- [ ] Invalid data in localStorage handled gracefully
## Error Handling
- [ ] 404 page displays for invalid routes
- [ ] API errors show user-friendly messages
- [ ] Network errors handled gracefully
- [ ] Invalid data doesn't crash app
- [ ] Error boundaries catch React errors
## Integration Testing
### User Flows
- [ ] **Flow 1**: Search → View School → Add to Compare → Go to Compare Page
- [ ] **Flow 2**: Browse Home → Add Multiple Schools → Compare → Remove School
- [ ] **Flow 3**: View Rankings → Click School → View Details → Add to Compare
- [ ] **Flow 4**: Search by Postcode → View Map → Click School → View Details
- [ ] **Flow 5**: Filter by Area & Type → View Results → Paginate
## Build & Deployment Testing
- [ ] `npm run build` succeeds without errors
- [ ] `npm run lint` passes
- [ ] `npm test` passes
- [ ] Production build runs correctly
- [ ] Docker image builds successfully (if using Docker)
- [ ] Environment variables load correctly
## Documentation Review
- [ ] README.md is complete and accurate
- [ ] DEPLOYMENT.md covers all deployment options
- [ ] Environment variables documented
- [ ] API integration documented
## Final Checks
- [ ] All console errors resolved
- [ ] All console warnings reviewed
- [ ] No TODO comments in production code
- [ ] Version numbers updated
- [ ] Change log updated (if applicable)
- [ ] Git repository clean
- [ ] All tests passing
---
## Sign-Off
| Role | Name | Date | Signature |
|------|------|------|-----------|
| Developer | | | |
| QA Lead | | | |
| Product Owner | | | |
| Tech Lead | | | |
---
## Notes
Add any additional notes or issues discovered during QA:
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________