View Mode Verification (Desktop / Mobile)
How to manually verify that a screen behaves correctly in both view modes. This walkthrough is the operational counterpart of the RV-VM-* rubric (repo rule angular-styles.mdc) — see the Platform, Identification & Kiosk Services page for how the mode is detected and published.
The mode is a decision, not a viewport size
The app has exactly two view modes: desktop and mobile. The mode is decided once, at startup (device detection or a forced override), and does not change by resizing the browser window. If a layout changes when you drag the window edge without reloading, that is a residual CSS breakpoint, not mobile support — see RN-VM-02 / RV-VM-10.
Setting the mode
| # | Way | Persists | When to use it |
|---|---|---|---|
| 1 | ?mode=mobile / ?mode=desktop in the URL | No | Fastest way to alternate while verifying |
| 2 | Place configuration → Devices → forced mode | Yes (reload) | The operator-facing way |
| 3 | Real device (automatic detection) | — | Remember: tablets are classified as desktop |
Critical reminder: resizing the window does not change the mode. Use ?mode= (or the Devices tab) to switch, always with a reload.
Preparation
Most of the rubric needs real data to exercise every branch. Minimum dataset:
- A place with several tables and open tickets.
- A catalog with nested categories and products with options.
- At least one offer/menu.
- Several waiters; a customer account; cash movements.
- A month of activity (so report charts render).
- A floor plan with more than one area.
- A user account with at least one place (ideally several).
- Kiosk mode available in Devices.
- Email result routes at hand:
/on-activate,/on-password,/on-mailchng(e.g.?result=SUCCESS&lang=es).
Universal criteria (every screen)
- Nothing is cut off or unreachable in mobile.
- Every action available in desktop exists in mobile, unless the screen's
.mdcdocuments an explicit exclusion (RN-VM-06). - The layout does not change when resizing the window within the same mode.
Walkthrough per screen
For the screen under test:
- Load it with
?mode=desktop(maximized window). Check for console errors (RV-VM-01). - Without reloading, shrink the window to ~500–700 px. The layout must not reflow to a mobile disposition (
RV-VM-10). Horizontal scroll is acceptable in this state. - Reload with
?mode=mobile(maximized window). Check for console errors and confirm there is no horizontal document scroll (RV-VM-02). - Walk every interactive control in mobile: nothing is hidden behind the header, the tab bar, or the kiosk keyboard (
RV-VM-03). - Compare the actions available in desktop vs. mobile for the same screen (
RV-VM-04). - If the screen opens a full-screen panel in mobile, confirm it has a visible close/back action (
RV-VM-05). - Fill the screen with enough content to force scrolling: the header, action footer, and tab bar must stay clear of the content, and the action footer must remain reachable (
RV-VM-06,RV-VM-07). - Open every dialog/overlay reachable from the screen: bounded panel in desktop, full screen in mobile (
RV-VM-08). - With kiosk mode active, focus each field: it must stay visible above the virtual keyboard (
RV-VM-09).
Reporting a failure
| Field | Example |
|---|---|
| Active mode | ?mode=desktop |
| Approximate window width | ~700 px |
| Screen / area | Income report |
| Expected | Keeps multiple columns |
| Observed | Collapsed to one column |
The width matters: a failure that only appears at a specific width usually means a residual breakpoint.
Short regression walkthrough (shared surfaces)
Run this subset — instead of the full walkthrough above — whenever a change touches the shell, a upp-wdgt widget, or styles/theme.scss (RN-VM-08). Run each item in both modes unless noted.
| # | Mode | Action | Expected |
|---|---|---|---|
| R01/R02 | Both | Inspect <body> | Has exactly one of mobile / desktop |
| R03/R04 | Both | Login screen | Desktop: centered, bounded width. Mobile: full width |
| R05/R06 | Both | Place picker | Desktop: multi-column grid. Mobile: single column, full width |
| R07/R08 | Both | Shell (menu drawer, tabs) | Desktop: fixed-width drawer. Mobile: full-width drawer, no clock |
| R09 | Both | Bottom tabs | Same set in both modes; not covered by scroll |
| R10/R11 | Both | Open a ticket panel | Desktop: bounded side panel. Mobile: full screen with a way back |
| R12/R13 | Both | Product grid (cart) | auto-fill columns; no empty gap; large touch targets in mobile |
| R14/R15 | Both | Ticket preview (place configuration) | Desktop: two columns. Mobile: one column, or documented exclusion |
| R16/R17 | Both | A report | Desktop: multi-column. Mobile: one column, actions wrap |
| R20/R21 | Both | Short confirmation dialog | Desktop: centered bounded panel. Mobile: near-full-screen |
| R22 | Mobile | A upp-select with many options | List is scrollable, not clipped to a few rows |
| R23 | Both | Offline banner | Bounded card (~450 px), not full width |
For every item above, also confirm the negative check: resizing the window inside the same mode must not change the layout (RV-VM-10).
Known verification gaps
Some flows require live operator interaction and cannot be fully exercised from a script or from the checklist above in a single pass: kiosk keyboard with a real focused field, cash/card payment dialogs, floor-plan area editing, PDF export/print preview, and creating a ticket end-to-end in mobile. Treat these as normal exploratory testing surfaces going forward rather than a one-off signoff — report anything unexpected as it comes up rather than waiting for a full pass.
See also
- Platform, Identification & Kiosk Services — how the mode is detected, forced, and published.
- State & View —
viewService.Mobile/viewService.Desktop. - E2E Testing — this page covers manual verification; Playwright does not currently automate the desktop/mobile matrix.