mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 02:48:38 -04:00
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>
58 lines
2.1 KiB
JavaScript
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();
|
|
});
|
|
});
|