appId: com.edde746.plezy name: TV settings stay navigable and dismiss their overlays tags: - e2e - regression - tv - settings --- # Guards ef310459 and the Apple-only gates touched by 6c14049e. # This flow intentionally does not pin 15b54e2e's row density: semantics stay # stable across that change, and Maestro has no DPR-relative height assertion. # Use D-pad only; a tap switches InputModeTracker to pointer mode and removes # the TV number spinner. - runFlow: ../subflows/onboard_jellyfin_tv_device.yaml - pressKey: "Remote Dpad Left" - extendedWaitUntil: visible: "Settings" timeout: 15000 - repeat: times: 12 while: notVisible: text: "Settings" focused: true commands: - pressKey: "Remote Dpad Down" - pressKey: "Remote Dpad Center" - extendedWaitUntil: visible: "(?s)^Appearance.*" timeout: 15000 - assertVisible: "(?s)^Video Playback.*" - assertVisible: "(?s)^Manage Libraries.*" - assertVisible: "(?s)^Services.*" # The Connections card sits below the first card, so reaching it also proves # the list scrolled or fits — not that any particular row height applies. - assertVisible: "(?s)^Add connection.*" - assertVisible: "(?s)^Profiles.*" # Manage Libraries takes the TV dialog path, not the overlay-sheet path, and # one Back has to return to Settings rather than leave it. - repeat: times: 6 while: notVisible: text: "(?s)^Manage Libraries.*" focused: true commands: - pressKey: "Remote Dpad Down" - pressKey: "Remote Dpad Center" - extendedWaitUntil: visible: "Maestro Movies" timeout: 15000 - assertVisible: "Maestro Shows" - assertNotVisible: "(?s)^Services.*" - assertNotVisible: "(?s)^Video Playback.*" - pressKey: "back" - waitForAnimationToEnd: timeout: 3000 - assertNotVisible: "Maestro Movies" - extendedWaitUntil: visible: "(?s)^Services.*" timeout: 15000 - assertVisible: "(?s)^Manage Libraries.*" # Services keeps every hub row after losing its own density overrides. - repeat: times: 6 while: notVisible: text: "(?s)^Services.*" focused: true commands: - pressKey: "Remote Dpad Down" - pressKey: "Remote Dpad Center" - extendedWaitUntil: visible: "(?s)^Trakt.*" timeout: 15000 - assertVisible: "(?s)^MyAnimeList.*" - assertVisible: "(?s)^AniList.*" - assertVisible: "(?s)^Simkl.*" - assertVisible: "(?s)^Seerr.*" - pressKey: "back" - extendedWaitUntil: visible: "(?s)^Manage Libraries.*" timeout: 15000 # Video Playback: the Atmos test screen is gated to Apple TV, and the D-pad # numeric dialog must expose the spinner's restored accessibility labels. - repeat: times: 8 while: notVisible: text: "(?s)^Video Playback.*" focused: true commands: - pressKey: "Remote Dpad Up" - pressKey: "Remote Dpad Center" - extendedWaitUntil: visible: "(?s)^Player.*" timeout: 15000 - assertNotVisible: "(?s)^Atmos Output Test.*" - repeat: times: 30 while: notVisible: text: "(?s)^Small Skip Duration.*" focused: true commands: - pressKey: "Remote Dpad Down" - pressKey: "Remote Dpad Center" - extendedWaitUntil: visible: "Decrease" timeout: 15000 - assertVisible: "Increase" - assertVisible: "(?s)^Enter duration.*" - pressKey: "back" - extendedWaitUntil: visible: "(?s)^Small Skip Duration.*" timeout: 15000 - pressKey: "back" - extendedWaitUntil: visible: "(?s)^Manage Libraries.*" timeout: 15000 # Settings is a rail tab on TV rather than a pushed route, so Back hands focus # back to the rail and expands it instead of leaving the screen. - pressKey: "back" - extendedWaitUntil: visible: text: "Settings" focused: true timeout: 20000 - assertVisible: "Home" - assertVisible: "Libraries" - assertVisible: "Downloads"