Test Cases: Event Attendance Reports
GET /admin/events/:eventId/attendance, real handler getAttendanceReport) is correctly CSV-only — no xlsx here (unlike invoices/payments/treasury/event-registrations, which now support ?format=xlsx per #228). New: the export applies NO status filter, so NO_SHOW/CANCELLED/WAITLISTED rows are all present; the separate stats endpoint (GET /events/:eventId/attendance/stats) EXCLUDES NO_SHOW/WAITLISTED from its checked-in/total ratio. A consolidated reconciliation block (registered, checkedIn, walkIns, noShow, cancelled, stillPending, capacity, attendanceRate, eventEnded) is now returned — noShow only populates once the event has ended. Also note: all dates/timestamps in this export are raw UTC, not tenant-local. See TC-RPT-004 for full coverage.
Module: Reporting & Analytics - Event Attendance Reports
Priority: P3
Phase: 5
Backend Endpoint: GET /api/reporting/reports/events/attendance
Frontend Pages: AdminEventAttendanceReportPage, ExecutiveDashboardPage
Prerequisites
- Multiple events with varying attendance data exist.
- Test data from
00_MASTER_TEST_DATA.mdis seeded. - User has appropriate manager role permissions.
- Events have registrations with check-in data.
Test Data Reference
- Events: 10+ past events with attendance records
- Registrations: Mix of checked-in and no-show attendees
- Event Types: General Assembly, Workshop, Seminar, Social
- Date ranges: Events spanning 12+ months
Test Cases
TC-RPT-003-001: View Event Attendance Report - Default
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as Admin User (ADMIN). | Dashboard displayed. |
| 2 | Navigate to Reports > Event Attendance. | Attendance report page displayed. |
| 3 | Verify report loads with recent events. | Default event list shown. |
| 4 | Verify summary statistics visible. | Total events, total attendance, avg attendance rate. |
TC-RPT-003-002: Select Single Event for Report
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report page. | Report displayed. |
| 2 | Locate event selector/dropdown. | Event list available. |
| 3 | Select event: "Q4 General Assembly". | Event selected. |
| 4 | Verify event details load. | Event name, date, location shown. |
| 5 | Verify attendance metrics displayed. | Registered, Checked-in, No-show counts. |
TC-RPT-003-003: View Event Attendance Details
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event: "Annual Engineers Summit 2024". | Event selected. |
| 2 | Verify registration count. | Total registrations displayed. |
| 3 | Verify check-in count. | Checked-in count displayed. |
| 4 | Verify no-show count. | No-show count = Registered - Checked-in. |
| 5 | Verify attendance rate percentage. | (Checked-in / Registered) * 100. |
TC-RPT-003-004: View Attendee List
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select specific event. | Event selected. |
| 2 | View attendee list section. | List displayed. |
| 3 | Verify columns: Name, Member ID, Status. | Columns visible. |
| 4 | Verify check-in timestamp column. | Check-in time for attended. |
| 5 | Verify no-show attendees marked. | Status shows "No Show". |
TC-RPT-003-005: Filter Events by Date Range - This Month
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report. | Report displayed. |
| 2 | Locate date range filter. | Date filter available. |
| 3 | Select preset: "This Month". | Filter applied. |
| 4 | Verify only events in current month shown. | Event dates within range. |
| 5 | Verify summary updates accordingly. | Totals reflect filtered events. |
TC-RPT-003-006: Filter Events by Date Range - Last Quarter
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report. | Report displayed. |
| 2 | Select preset: "Last Quarter". | Filter applied. |
| 3 | Verify events from last 3 months displayed. | Event dates within range. |
| 4 | Verify multiple events listed. | At least 2-3 events if available. |
TC-RPT-003-007: Filter Events by Date Range - Custom
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report. | Report displayed. |
| 2 | Select "Custom" date range. | Date pickers enabled. |
| 3 | Enter start date: 2024-01-01. | Start date set. |
| 4 | Enter end date: 2024-06-30. | End date set. |
| 5 | Apply filter. | Filter applied. |
| 6 | Verify events fall within specified range. | Only matching events shown. |
TC-RPT-003-008: Filter Events by Date Range - Full Year
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report. | Report displayed. |
| 2 | Select preset: "This Year" or enter Jan 1 - Dec 31. | Filter applied. |
| 3 | Verify all events for the year displayed. | Complete year's events. |
| 4 | Verify summary shows yearly totals. | Accurate aggregate stats. |
TC-RPT-003-009: Filter by Specific Event
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report. | Report displayed. |
| 2 | Use event search or filter. | Search field available. |
| 3 | Search for "Summit". | Results filtered. |
| 4 | Verify only events with "Summit" in name shown. | Matching events displayed. |
| 5 | Select event from results. | Detailed view for selected event. |
TC-RPT-003-010: Filter by Event Type
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report. | Report displayed. |
| 2 | Locate event type filter. | Filter control available. |
| 3 | Select type: "General Assembly". | Filter applied. |
| 4 | Verify only General Assembly events shown. | Event type matches filter. |
| 5 | Verify attendance metrics for type. | Aggregate for filtered events. |
TC-RPT-003-011: Check-In Statistics - Attendance Rate
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event with mixed attendance. | Event selected. |
| 2 | Verify attendance rate calculation. | Rate = (Checked-in / Registered) * 100. |
| 3 | Verify rate displayed as percentage. | e.g., "88.2%" format. |
| 4 | Verify visual indicator (if any). | Progress bar or gauge. |
TC-RPT-003-012: Check-In Statistics - No-Show Rate
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event with no-shows. | Event selected. |
| 2 | Verify no-show count displayed. | Number of no-shows shown. |
| 3 | Verify no-show rate calculation. | Rate = (No-show / Registered) * 100. |
| 4 | Verify rate displayed correctly. | e.g., "11.8%" format. |
TC-RPT-003-013: Check-In Statistics - Peak Check-In Time
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event with check-in timestamps. | Event selected. |
| 2 | View check-in statistics section. | Stats displayed. |
| 3 | Identify peak check-in time if available. | Busiest check-in period shown. |
| 4 | Verify time range displayed. | e.g., "8:30 AM - 9:00 AM". |
TC-RPT-003-014: Check-In Statistics - Early vs Late Arrivals
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event with varied check-in times. | Event selected. |
| 2 | View arrival distribution if available. | Early, On-time, Late breakdown. |
| 3 | Verify calculations based on event start time. | Categories correctly assigned. |
TC-RPT-003-015: Check-In Statistics - Aggregate by Event Type
| Step | Action | Expected Result |
|---|---|---|
| 1 | View attendance report with multiple event types. | Report displayed. |
| 2 | Compare attendance rates by type. | Workshop vs Assembly rates. |
| 3 | Identify best performing event type. | Highest attendance rate. |
| 4 | Identify event type with most no-shows. | Lowest attendance rate. |
TC-RPT-003-016: Export Attendance Report to CSV - Single Event
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select specific event. | Event details displayed. |
| 2 | Locate "Export CSV" button. | Button visible. |
| 3 | Click "Export CSV". | Download initiated. |
| 4 | Verify file downloads. | CSV file in downloads folder. |
| 5 | Open CSV file. | File opens correctly. |
| 6 | Verify column headers. | Event Name, Attendee Name, Check-in Status, Check-in Time. |
| 7 | Verify row count matches attendee count. | All attendees included. |
TC-RPT-003-017: Export Attendance Report to CSV - Date Range
| Step | Action | Expected Result |
|---|---|---|
| 1 | Apply date range filter: Last Quarter. | Filter applied. |
| 2 | Click "Export CSV". | Download initiated. |
| 3 | Open CSV file. | File opens correctly. |
| 4 | Verify events from date range included. | Multiple events in export. |
| 5 | Verify each event's attendees listed. | Complete attendee data. |
TC-RPT-003-018: Export Attendance Report to CSV - Summary Only
| Step | Action | Expected Result |
|---|---|---|
| 1 | View attendance report summary. | Summary displayed. |
| 2 | Select "Export Summary" option if available. | Export option chosen. |
| 3 | Click export. | Download initiated. |
| 4 | Verify summary data in CSV. | Event names, dates, attendance rates. |
| 5 | Verify aggregate statistics. | Total events, avg attendance. |
TC-RPT-003-019: Export CSV - Filename Convention
| Step | Action | Expected Result |
|---|---|---|
| 1 | Export attendance report for single event. | Download initiated. |
| 2 | Check downloaded filename. | Follows convention: event_attendance_EVENTID_YYYY-MM-DD.csv |
| 3 | Export date range report. | New download. |
| 4 | Check filename includes date range. | attendance_report_STARTDATE_ENDDATE.csv |
TC-RPT-003-020: Export CSV - Large Attendance List
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event with 200+ registrations. | Large event selected. |
| 2 | Export to CSV. | Download initiated. |
| 3 | Verify export completes without timeout. | Download successful. |
| 4 | Verify all attendees included. | Row count matches registration count. |
| 5 | Verify no data truncation. | All fields complete. |
TC-RPT-003-021: Role-Based Access - ADMIN Full Access
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as ADMIN role. | Login successful. |
| 2 | Navigate to Event Attendance Report. | Access granted. |
| 3 | Verify all events accessible. | All events in list. |
| 4 | Verify all filters available. | Date, Event, Type filters. |
| 5 | Verify export functionality available. | Export button works. |
TC-RPT-003-022: Role-Based Access - EVENT_MANAGER Access
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as EVENT_MANAGER role. | Login successful. |
| 2 | Navigate to Event Attendance Report. | Access granted. |
| 3 | Verify full functionality available. | All features work. |
| 4 | Verify can view all event attendance. | No restrictions on events. |
TC-RPT-003-023: Role-Based Access - OFFICER Access
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as OFFICER role. | Login successful. |
| 2 | Navigate to Event Attendance Report. | Access granted. |
| 3 | Verify report functionality. | Can view and filter. |
| 4 | Verify export available. | Can export CSV. |
TC-RPT-003-024: Role-Based Access - MEMBERSHIP_MANAGER Access
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as MEMBERSHIP_MANAGER role. | Login successful. |
| 2 | Navigate to Event Attendance Report. | Access granted. |
| 3 | Verify report displays. | Data visible. |
TC-RPT-003-025: Role-Based Access - FINANCE_MANAGER Access
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as FINANCE_MANAGER role. | Login successful. |
| 2 | Navigate to Event Attendance Report. | Access granted. |
| 3 | Verify report displays. | Data visible. |
TC-RPT-003-026: Role-Based Access - MEMBER Denied
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as regular MEMBER. | Login successful. |
| 2 | Attempt to navigate to Event Attendance Report. | Access denied. |
| 3 | Verify 403 Forbidden or redirect. | Not authorized message. |
| 4 | Verify navigation menu hides report option. | Menu item not visible. |
TC-RPT-003-027: Report with No Events
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Event Attendance Report. | Report displayed. |
| 2 | Apply filter with no matching events. | e.g., Date range with no events. |
| 3 | Verify empty state displayed. | "No events found" message. |
| 4 | Verify export button disabled. | Cannot export empty data. |
| 5 | Verify suggestion to adjust filters. | Helpful message shown. |
TC-RPT-003-028: Event with Zero Registrations
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event with no registrations. | Event selected. |
| 2 | Verify attendance metrics show zeros. | 0 registered, 0 checked-in. |
| 3 | Verify attendance rate handled. | 0% or "N/A" displayed. |
| 4 | Verify empty attendee list message. | "No registrations" message. |
TC-RPT-003-029: Event with 100% Attendance
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event where all registered attended. | Event selected. |
| 2 | Verify attendance rate shows 100%. | "100%" displayed. |
| 3 | Verify no-show count is zero. | 0 no-shows. |
| 4 | Verify visual indicator reflects success. | Green/positive indicator. |
TC-RPT-003-030: Pagination - Large Attendee List
| Step | Action | Expected Result |
|---|---|---|
| 1 | Select event with many attendees. | Event selected. |
| 2 | View attendee list. | List displayed. |
| 3 | Verify pagination controls. | Page numbers, next/prev. |
| 4 | Navigate through pages. | Different attendees on each page. |
| 5 | Verify total count unchanged. | Accurate total. |
TC-RPT-003-031: Sort Attendees by Name
| Step | Action | Expected Result |
|---|---|---|
| 1 | View attendee list for event. | List displayed. |
| 2 | Click "Name" column header. | Sort applied. |
| 3 | Verify alphabetical sorting. | A-Z order. |
| 4 | Click again to reverse. | Z-A order. |
TC-RPT-003-032: Sort Attendees by Check-In Time
| Step | Action | Expected Result |
|---|---|---|
| 1 | View attendee list for event. | List displayed. |
| 2 | Click "Check-in Time" column. | Sort applied. |
| 3 | Verify earliest first. | Chronological order. |
| 4 | Click again for latest first. | Reverse chronological. |
TC-RPT-003-033: Filter Attendees by Check-In Status
| Step | Action | Expected Result |
|---|---|---|
| 1 | View attendee list for event. | List displayed. |
| 2 | Filter by status: "Checked In". | Filter applied. |
| 3 | Verify only checked-in attendees shown. | No-shows hidden. |
| 4 | Filter by status: "No Show". | Filter changed. |
| 5 | Verify only no-show attendees shown. | Checked-in hidden. |
TC-RPT-003-034: Real-Time Data - Recent Check-In Reflected
| Step | Action | Expected Result |
|---|---|---|
| 1 | View attendance for ongoing event. | Current data shown. |
| 2 | In another tab, check in an attendee. | Check-in recorded. |
| 3 | Refresh attendance report. | Report updates. |
| 4 | Verify new check-in reflected. | Count increased, attendee shows checked-in. |
TC-RPT-003-035: Compare Multiple Events
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access event comparison view if available. | Comparison mode. |
| 2 | Select 3 events for comparison. | Events selected. |
| 3 | View side-by-side attendance rates. | Rates displayed for each. |
| 4 | Identify best and worst performing. | Clear comparison. |
API Test Cases
TC-RPT-003-API-001: GET /api/reporting/reports/events/attendance - Single Event
Request: GET /api/reporting/reports/events/attendance?eventId=EVT-2024-002
Auth: ADMIN token
Expected Response: 200 OK
{
"event": {
"id": "EVT-2024-002",
"name": "Annual Engineers Summit 2024",
"date": "2024-11-15",
"location": "Manila Convention Center"
},
"registrations": 85,
"checkedIn": 75,
"noShow": 10,
"attendanceRate": 88.2,
"attendees": [
{
"memberId": "MEM-2023-001",
"name": "Maria Cruz",
"checkedInAt": "2024-11-15T08:30:00Z",
"status": "CHECKED_IN"
},
{
"memberId": "MEM-2023-045",
"name": "Ana Reyes",
"checkedInAt": null,
"status": "NO_SHOW"
}
]
}
TC-RPT-003-API-002: GET /api/reporting/reports/events/attendance - Date Range
Request: GET /api/reporting/reports/events/attendance?startDate=2024-01-01&endDate=2024-06-30
Auth: EVENT_MANAGER token
Expected Response: 200 OK
{
"dateRange": {
"start": "2024-01-01",
"end": "2024-06-30"
},
"totalEvents": 5,
"aggregateStats": {
"totalRegistrations": 350,
"totalCheckedIn": 295,
"totalNoShow": 55,
"averageAttendanceRate": 84.3
},
"events": [
{
"id": "EVT-2024-001",
"name": "Q1 General Assembly",
"date": "2024-03-15",
"registrations": 120,
"checkedIn": 105,
"attendanceRate": 87.5
},
{
"id": "EVT-2024-003",
"name": "Technical Workshop",
"date": "2024-05-20",
"registrations": 45,
"checkedIn": 38,
"attendanceRate": 84.4
}
]
}
TC-RPT-003-API-003: GET /api/reporting/reports/events/attendance - All Events
Request: GET /api/reporting/reports/events/attendance
Auth: OFFICER token
Expected Response: 200 OK
{
"totalEvents": 12,
"aggregateStats": {
"totalRegistrations": 850,
"totalCheckedIn": 720,
"totalNoShow": 130,
"averageAttendanceRate": 84.7
},
"events": [...]
}
TC-RPT-003-API-004: GET /api/reporting/reports/events/attendance - Export CSV
Request: GET /api/reporting/reports/events/attendance?eventId=EVT-2024-002&format=csv
Auth: ADMIN token
Expected Response: 200 OK
Headers: Content-Type: text/csv, Content-Disposition: attachment; filename=event_attendance_EVT-2024-002.csv
Event Name,Event Date,Member ID,Attendee Name,Check-in Status,Check-in Time
"Annual Engineers Summit 2024","2024-11-15","MEM-2023-001","Maria Cruz","CHECKED_IN","2024-11-15 08:30:00"
"Annual Engineers Summit 2024","2024-11-15","MEM-2023-045","Ana Reyes","NO_SHOW",""
...
TC-RPT-003-API-005: GET /api/reporting/reports/events/attendance - Check-In Statistics
Request: GET /api/reporting/reports/events/attendance?eventId=EVT-2024-002&includeStats=true
Auth: ADMIN token
Expected Response: 200 OK
{
"event": {
"id": "EVT-2024-002",
"name": "Annual Engineers Summit 2024"
},
"registrations": 85,
"checkedIn": 75,
"noShow": 10,
"attendanceRate": 88.2,
"checkInStats": {
"peakTime": "08:30-09:00",
"earlyArrivals": 25,
"onTime": 45,
"lateArrivals": 5,
"averageCheckInTime": "08:42:00"
}
}
TC-RPT-003-API-006: GET /api/reporting/reports/events/attendance - Invalid Event ID
Request: GET /api/reporting/reports/events/attendance?eventId=INVALID-ID
Auth: ADMIN token
Expected Response: 404 Not Found
{
"error": "Not Found",
"message": "Event not found with ID: INVALID-ID"
}
TC-RPT-003-API-007: GET /api/reporting/reports/events/attendance - Unauthorized (MEMBER role)
Request: GET /api/reporting/reports/events/attendance
Auth: MEMBER token
Expected Response: 403 Forbidden
{
"error": "Forbidden",
"message": "Insufficient permissions to access this resource"
}
TC-RPT-003-API-008: GET /api/reporting/reports/events/attendance - No Auth
Request: GET /api/reporting/reports/events/attendance
Auth: None
Expected Response: 401 Unauthorized
{
"error": "Unauthorized",
"message": "Authentication required"
}
TC-RPT-003-API-009: GET /api/reporting/reports/events/attendance - Invalid Date Range
Request: GET /api/reporting/reports/events/attendance?startDate=2024-12-31&endDate=2024-01-01
Auth: ADMIN token
Expected Response: 400 Bad Request
{
"error": "Bad Request",
"message": "Start date must be before end date"
}
TC-RPT-003-API-010: GET /api/reporting/reports/events/attendance - Paginated Results
Request: GET /api/reporting/reports/events/attendance?eventId=EVT-2024-002&page=1&limit=20
Auth: ADMIN token
Expected Response: 200 OK
{
"event": {
"id": "EVT-2024-002",
"name": "Annual Engineers Summit 2024"
},
"pagination": {
"page": 1,
"limit": 20,
"totalItems": 85,
"totalPages": 5
},
"attendees": [
{...}
]
}
Summary Statistics
| Category | Count |
|---|---|
| UI Test Cases | 35 |
| API Test Cases | 10 |
| Total Test Cases | 45 |
Traceability
| Test Case ID | Requirement | API Endpoint |
|---|---|---|
| TC-RPT-003-001 to 010 | Event Selection & Filtering | GET /api/reporting/reports/events/attendance |
| TC-RPT-003-011 to 015 | Check-In Statistics | GET /api/reporting/reports/events/attendance?includeStats=true |
| TC-RPT-003-016 to 020 | CSV Export | GET /api/reporting/reports/events/attendance?format=csv |
| TC-RPT-003-021 to 026 | Role-Based Access | GET /api/reporting/reports/events/attendance |
| TC-RPT-003-027 to 035 | Edge Cases & UX | GET /api/reporting/reports/events/attendance |