Skip to content

Live Sessions - QA Test Plan

The Live Sessions app enables instructors to host live classes, set availability for bookable meetings, and track attendance. Routes are under /business/apps/live-sessions/.

  • live_class — Live Class
  • webinar — Webinar
  • workshop — Workshop
  • office_hours — Office Hours
  • Custom Link (empty value)
  • zoom — Zoom
  • agora — Agora
  • google_meet — Google Meet
  • scheduled — Upcoming session
  • live — Currently in progress
  • ended — Session has concluded
  • cancelled — Session was cancelled
  • confirmed — Booking confirmed
  • completed — Meeting completed
  • cancelled — Booking cancelled
  • no_show — Attendee did not show
  • present — Attended on time
  • late — Joined late
  • absent — Did not attend

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-001Dashboard loadsUser is logged inNavigate to /business/apps/live-sessionsPage shows header, “New Session” button, quick nav cards (Sessions, New Session, Availability, Meetings), upcoming sessions, and recent meetingsP0
LS-002Quick nav cards link correctlyUser is logged inView nav gridFour cards link to correct routes: sessions, sessions/new, availability, meetingsP0
LS-003Upcoming sessions displayUpcoming sessions existView upcoming sectionUp to 5 sessions shown with title, date, time, duration, participant count, and status badgeP0
LS-004Session status badges renderSessions with various statusesView listScheduled = secondary, Live = default, Ended = outline, Cancelled = destructiveP1
LS-005Recent meetings displayMeeting bookings existView meetings sectionUp to 5 meetings shown with date, time range, notes, and status badgeP1
LS-006Empty upcoming sessionsNo upcoming sessionsView upcoming section”No upcoming sessions” message with CTAP1
LS-007Empty meetingsNo bookings existView meetings section”No meeting bookings yet” messageP1
LS-008Session row links to detailSessions existClick on a session rowNavigates to /business/apps/live-sessions/sessions/{id}P0

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-010Sessions list page loadsUser is logged inNavigate to /business/apps/live-sessions/sessionsHeader with back arrow, “Sessions” title, count badge, “New Session” button, search bar, status filter pills, and session listP0
LS-011Search sessionsSessions existEnter search term, press EnterURL updates with ?search=term; sessions filtered by title matchP0
LS-012Filter by status - ScheduledVarious sessions existClick “Scheduled” pillURL updates with ?status=scheduled; only scheduled sessions shownP0
LS-013Filter by status - LiveLive sessions existClick “Live” pillOnly live sessions shownP0
LS-014Filter by status - EndedEnded sessions existClick “Ended” pillOnly ended sessions shownP0
LS-015Clear status filterStatus filter appliedClick “All” pillStatus param removed; all sessions shownP1
LS-016Active filter pill highlightedStatus filter appliedView filter pillsActive pill has bg-primary text-primary-foreground stylingP1
LS-017Empty state with CTANo sessions existView list”No sessions found” with icon and “Create your first session” buttonP1
LS-018Session cards show all infoSessions existView listEach row shows title, formatted date and time, duration, participant count, and status badgeP0

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-020Create page loadsUser is logged inNavigate to /business/apps/live-sessions/sessions/newForm shows Session Details (title, description), Schedule (date/time, duration, type), Meeting (provider, join URL, capacity), and Pricing (price) sectionsP0
LS-021Create session with all fieldsUser is logged in1. Enter title “Live Q&A Session” 2. Enter description 3. Set date/time 4. Set duration to 60min 5. Select “Live Class” type 6. Select “Zoom” provider 7. Enter meeting URL 8. Set capacity to 50 9. Set price to 9.99 10. SubmitSession created; user redirected to session detail pageP0
LS-022Title is requiredUser is logged inLeave title empty, submitValidation error on title fieldP0
LS-023Date/time is requiredUser is logged inFill title, leave date empty, submitValidation error on scheduled_at fieldP0
LS-024All session types availableUser is logged inClick Type dropdownFour options: Live Class, Webinar, Workshop, Office HoursP0
LS-025All meeting providers availableUser is logged inClick Provider dropdownFour options: Custom Link, Zoom, Agora, Google MeetP0
LS-026Select Zoom providerUser is logged inSelect “Zoom” from provider dropdownProvider value set to zoomP1
LS-027Select Google Meet providerUser is logged inSelect “Google Meet” from provider dropdownProvider value set to google_meetP1
LS-028Select Agora providerUser is logged inSelect “Agora” from provider dropdownProvider value set to agoraP1
LS-029Price defaults to freeUser is logged inDo not set pricePrice defaults to 0 (free session)P1
LS-030Capacity is optionalUser is logged inLeave capacity empty, submitSession created with unlimited participantsP1
LS-031Cancel returns to sessions listUser is on create pageClick “Cancel”Navigates to /business/apps/live-sessions/sessionsP2
LS-032Submit shows loading stateUser submits formObserve button”Creating…” with spinner; button disabledP1
LS-033Server error shows toastServer error on createSubmit (simulated failure)Error toast with server messageP1
LS-034Unauthenticated user redirectedNot logged inNavigate to create pageRedirected to /loginP0

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-040Detail page loads for ownerSession exists, user is hostNavigate to /business/apps/live-sessions/sessions/{id}Page shows title, status badge, type, scheduled date/time, duration, participant count (with capacity if set), description, meeting URL link, and attendance sectionP0
LS-041Meeting URL renders as linkSession has meeting_urlView detailURL shown as clickable link opening in new tabP1
LS-042Participant count with capacitySession has max_participantsView detailShows “X / Y” format (e.g., “15 / 50”)P1
LS-043Participant count without capacityNo max_participants setView detailShows only count without capacityP1
LS-044Description renders with whitespaceSession has multiline descriptionView descriptionText renders with whitespace-pre-wrapP2

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-050Start scheduled sessionSession status is scheduledClick “Start” buttonSession status changes to live; toast “Session started!”P0
LS-051Cancel scheduled sessionSession status is scheduledClick “Cancel” buttonSession is cancelled; toast “Session cancelled.”P0
LS-052End live sessionSession status is liveClick “End” buttonSession status changes to ended; toast “Session ended.”P0
LS-053Start/Cancel buttons for scheduled onlySession status is scheduledView action buttons”Start” and “Cancel” buttons visibleP0
LS-054End button for live onlySession status is liveView action buttonsOnly “End” button visible (no Start/Cancel)P0
LS-055No lifecycle buttons for ended/cancelledSession is ended or cancelledView action buttonsNo Start/Cancel/End buttons renderedP1
LS-056Delete sessionAny sessionClick trash iconSession deleted; user redirected to /business/apps/live-sessions/sessionsP0
LS-057Non-owner gets 403Logged in as different userNavigate to another host’s session403 error thrownP0
LS-058Non-existent session returns 404Invalid session IDNavigate to /business/apps/live-sessions/sessions/nonexistent404 “Session not found” errorP1

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-060Attendance section displaysSession has attendance recordsView detail pageAttendance header shows total expected count with badge, and Present/Absent/Late summary countsP0
LS-061Attendance table rendersAttendance records existView tableColumns: User, Status (badge), Joined time, Left time, Duration (in minutes)P0
LS-062Attendance status badgesVarious attendance statusesView tablePresent = default, Late = secondary, Absent = destructiveP1
LS-063Duration calculated correctlyAttendance with duration_secondsView Duration columnDuration shown in minutes (e.g., “45min”), or dash if 0P1
LS-064Joined/Left times formatAttendance has joined_at and left_atView time columnsTimes formatted as “H:MM AM/PM”, or dash if nullP2
LS-065Empty attendanceNo attendance recordsView attendance section”No attendance records yet” messageP1

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-070Availability page loadsUser is logged inNavigate to /business/apps/live-sessions/availabilityPage shows 7 day cards (Sunday through Saturday), each with “Add Slot” button and existing slotsP0
LS-071Add availability slotUser is logged in1. Click “Add Slot” on a day 2. Set start time, end time, duration, and priceNew slot row added to that day with default values (09:00-10:00, 30min, $0)P0
LS-072Edit slot timesSlot existsChange start and end time inputsSlot times update in the form stateP0
LS-073Edit slot durationSlot existsChange duration to 45Duration updates (minimum 5, step 5)P1
LS-074Edit slot priceSlot existsSet price to 25.00Price updates (minimum 0, step 0.01)P1
LS-075Remove slotSlot existsClick trash icon on a slotSlot row removed from the dayP0
LS-076Save availabilitySlots configuredClick “Save Availability”All slots saved as JSON payload; toast “Availability saved!”P0
LS-077Save shows loading stateUser clicks saveObserve button”Saving…” with spinner; button disabledP2
LS-078Save failure shows toastServer errorClick save (simulated failure)Error toast “Failed to save availability”P1
LS-079Empty day shows messageNo slots for a dayView day card”No slots for this day.” messageP2
LS-080Existing slots pre-populatedSlots saved previouslyNavigate to availability pageAll previously saved slots rendered in correct day cards with saved valuesP0

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-090Meetings page loadsUser is logged inNavigate to /business/apps/live-sessions/meetingsHeader with back arrow, “Meeting Bookings” title, count badge, and booking listP0
LS-091Booking cards display correctlyBookings existView listEach card shows date, time range, guest ID, notes (if any), and status badgeP0
LS-092Booking status badges renderVarious booking statusesView listConfirmed = default, Completed = secondary, Cancelled = destructive, No Show = outlineP1
LS-093Cancel confirmed bookingBooking status is confirmedClick “Cancel” button on booking rowBooking cancelled; toast “Meeting cancelled.”P0
LS-094Cancel button only for confirmedBooking is not confirmedView booking rowNo “Cancel” button renderedP1
LS-095Empty bookings stateNo bookings existView page”No meeting bookings yet” message with calendar iconP1
LS-096Cancel meeting failureServer errorClick cancel (simulated failure)500 error returned with messageP1

IDDescriptionPreconditionsStepsExpected ResultPriority
LS-100Unauthenticated user sees empty dataNot logged inNavigate to dashboardEmpty arrays for sessions and meetings; no server errorP1
LS-101Unauthenticated user gets 401 on detailNot logged inNavigate to session detail401 error thrownP0
LS-102Non-host gets 403 on session detailDifferent userNavigate to another host’s session403 error thrownP0
LS-103Unauthenticated user gets 401 on actionsNot logged inSubmit start/end/cancel/delete action401 failure returnedP0