Files
Classroom_Desktop/docs/testing.md
T
ekklesiaandClaude Opus 5 c81fc1b0b9 feat: dress VLC down to an appliance screen
Stock VLC looks like a desktop media player, which is wrong for a room
where the TV is the whole interface. VLC stays the backend because its
dvdnav module is what provides the disc menus, and menus are the part
that matters on a commercial disc.

It is dressed down with documented VLC 3.x options, all verified against
the 3.0.23 build in Debian Trixie: minimal view, dark palette, no cone,
no tray, no now-playing popups, no resume prompt, no recent-disc
history, no title banner. sway draws no border on the window either, so
there is nothing above the video.

The auto-hiding fullscreen controller is deliberately kept: it is not
persistent chrome, and it is the only way a volunteer with a mouse can
pause or change chapter.

No skin is involved. Skins replace the interface wholesale and take the
keyboard and mouse handling that DVD menu navigation depends on with
them, as would --intf dummy.

Also drops --no-qt-updates-notif, which was not an option in Debian's
VLC at all. It made VLC exit before it started, so the DVD button could
never have launched a disc.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-04 21:33:22 -05:00

126 lines
5.1 KiB
Markdown

# Classroom test checklist
Run against the exact artifact published to canary, on the real endpoint,
before promoting to stable with `./update_stable.sh`.
## Boot
- [ ] Cold boot reaches the classroom shell with no terminal or window junk
- [ ] Reboot does the same
- [ ] Wallpaper appears
- [ ] Dock appears, centred
- [ ] Clock appears, bottom right
## UI scale
- [ ] `UI_SCALE=1.0` looks exactly as it did before scaling existed
- [ ] `UI_SCALE=1.25`, then `sudo systemctl restart getty@tty1`:
dock, icons, clock and notifications all grow together
- [ ] `UI_SCALE=0.8` shrinks them together
- [ ] The reserved bottom strip grows and shrinks with the dock, and a
maximised Chrome window still stops above it
- [ ] A nonsense value (`UI_SCALE=banana`) still gives a working shell
- [ ] An extreme value (`UI_SCALE=9`) is clamped, not obeyed
## Reserved bottom shell (regression)
The bottom strip is one full-width layer-shell surface with a 76px
exclusive zone. Dock and clock live inside it. Do not split them back
into separate layer-shell windows.
- [ ] A maximised Chrome window stops above the bottom strip
- [ ] The clock does not float over Chrome
- [ ] Dock stays centred, clock stays bottom right
- [ ] Wallpaper shows through the unused parts of the strip
- [ ] Every dock button still responds to clicks
- [ ] A fullscreen application covers the whole display, dock included
## Browser
- [ ] First Browser click launches Chrome
- [ ] Chrome opens on Wonder Ink (https://app.wonderink.org/)
- [ ] Clicking Browser while Chrome is focused minimises it
- [ ] Clicking Browser again restores it **maximised, not floating or draggable**
- [ ] Clicking Browser while Chrome is running but unfocused focuses it
- [ ] `Super+M` minimises the focused window
- [ ] `Super+Shift+M` restores the most recently minimised window
- [ ] Normal navigation to any other site works
- [ ] The Home button returns to Wonder Ink
- [ ] Fullscreen YouTube video uses the whole display
- [ ] Leaving fullscreen restores the correct geometry above the dock
- [ ] No first-run, default-browser or sign-in nag appears
- [ ] `chrome://policy` lists the Ekklesia policies as applied, with no
"unknown policy" entries
- [ ] Chrome does not start by itself at boot
- [ ] After a reboot, cookies and site logins are still there
- [ ] After an OTA update, cookies and site logins are still there
Known limitation: Chrome's own minimise button in its title bar does
nothing. Sway ignores the Wayland minimise request and gives no event to
hook. Minimising is the dock's Browser button or `Super+M`.
## Notifications
- [ ] `classroom-notify-test` renders with the classroom styling:
dark translucent, rounded, white text, top right
- [ ] `classroom-notify-test --critical "Parent Call" "Room 3 needs a parent."`
renders in the critical style and does not time out
- [ ] Notifications appear over a fullscreen video
Over SSH from an administrator account, run it with sudo:
```
sudo classroom-notify-test --dry-run # show the session it resolved
sudo classroom-notify-test # send into the classroom desktop
```
The classroom desktop belongs to the classroom user, and mako sits on
that user's D-Bus session. A plain notify-send from an SSH session lands
in the administrator's own session, where nothing owns
org.freedesktop.Notifications, so D-Bus tries to start a second mako with
no display and the call times out with NoReply. The script finds the
running sway process for the classroom user and delivers into its
session instead. It never starts mako.
- [ ] `sudo classroom-notify-test` from an SSH session displays on the
classroom screen
- [ ] `sudo classroom-notify-test --dry-run` reports the resolved
XDG_RUNTIME_DIR, bus address and Wayland display
- [ ] Running it as an unprivileged admin account explains it needs sudo
- [ ] `tests/test-classroom-notify-test.sh` passes (also run by the build)
## DVD
With `DVD_ENABLED=false`:
- [ ] No DVD button in the dock
With `DVD_ENABLED=true`:
- [ ] Drive unplugged: button present, icon held back, friendly notification on click
- [ ] Drive present, no disc: friendly notification on click, nothing crashes
- [ ] Inserting a disc produces one **DVD Ready** notification
- [ ] The DVD icon comes up to full strength while a disc is in
- [ ] Nothing plays until the button is pressed
- [ ] Clicking plays the disc
- [ ] Menus work
- [ ] Audio works
- [ ] Chapter navigation works
- [ ] Fullscreen works
- [ ] `Super+M` minimises the player, the DVD button restores it
- [ ] Closing the player works
- [ ] Ejecting is detected, the icon goes back
- [ ] Reinserting is detected again
- [ ] VLC opens fullscreen, dark, with no menu bar, no orange cone and
no sway title bar
- [ ] The fullscreen controller still appears on mouse movement
- [ ] Commercial CSS disc, after `classroom-dvd-css-setup`
## OTA
- [ ] `./update_canary.sh` publishes package first, manifest last
- [ ] The endpoint on the canary channel picks the update up
- [ ] SHA-256 verification passes
- [ ] Install succeeds and the endpoint reboots
- [ ] Everything above still works after the update