wrolpi/app/src/components/DesktopToggle.test.js
Roland 3e559e1bf8 controller: Desktop start/stop toggle; rename hotspot/bluetooth actions to what they do
Add a Desktop toggle to the Controller (both UIs) that starts/stops
display-manager.service. Fail open: the unit is never enabled/disabled,
so the desktop always returns on reboot; users who want it disabled
across reboots can set the default target themselves.

Rename the hotspot and bluetooth actions to reflect their real behavior:
- enable/disable_hotspot -> start/stop_hotspot (/api/hotspot/start|stop)
- enable/disable_bluetooth -> unblock/block_bluetooth (rfkill semantics,
  /api/bluetooth/unblock|block)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 15:19:36 -06:00

58 lines
2.1 KiB
JavaScript

import React from 'react';
import {render, screen} from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import {DesktopToggle} from './Common';
const mockSetDesktop = jest.fn();
let mockDesktopState = {on: true};
jest.mock('../hooks/customHooks', () => ({
...jest.requireActual('../hooks/customHooks'),
useDesktop: () => ({...mockDesktopState, setDesktop: mockSetDesktop}),
}));
describe('DesktopToggle', () => {
beforeEach(() => {
mockSetDesktop.mockClear();
mockDesktopState = {on: true};
});
it('renders checked when the desktop is running', () => {
render(<DesktopToggle/>);
expect(screen.getByTestId('toggle')).toBeChecked();
});
it('starts the desktop immediately when toggled on', async () => {
mockDesktopState = {on: false};
render(<DesktopToggle/>);
await userEvent.click(screen.getByTestId('toggle'));
expect(mockSetDesktop).toHaveBeenCalledWith(true);
});
it('asks for confirmation before stopping the desktop', async () => {
render(<DesktopToggle/>);
await userEvent.click(screen.getByTestId('toggle'));
// Not stopped yet; the Confirm modal is shown instead.
expect(mockSetDesktop).not.toHaveBeenCalled();
expect(screen.getByText('Stop the desktop')).toBeInTheDocument();
await userEvent.click(screen.getByText('Stop'));
expect(mockSetDesktop).toHaveBeenCalledWith(false);
});
it('cancelling the confirmation leaves the desktop running', async () => {
render(<DesktopToggle/>);
await userEvent.click(screen.getByTestId('toggle'));
await userEvent.click(screen.getByText('Cancel'));
expect(mockSetDesktop).not.toHaveBeenCalled();
expect(screen.getByTestId('toggle')).toBeChecked();
});
it('does nothing when the desktop is not supported', async () => {
mockDesktopState = {on: null};
render(<DesktopToggle/>);
await userEvent.click(screen.getByTestId('toggle'));
expect(mockSetDesktop).not.toHaveBeenCalled();
expect(screen.queryByText('Stop the desktop')).not.toBeInTheDocument();
});
});