Files
frigate/web/src/routes/__tests__/Camera.test.jsx
T

77 lines
3.0 KiB
React
Raw Normal View History

2021-02-12 16:30:14 -08:00
import { h } from 'preact';
import * as AutoUpdatingCameraImage from '../../components/AutoUpdatingCameraImage';
import * as Context from '../../context';
2022-03-05 22:16:31 -06:00
import * as Mqtt from '../../api/mqtt';
2021-02-12 16:30:14 -08:00
import Camera from '../Camera';
2021-06-18 21:21:25 -04:00
import * as JSMpegPlayer from '../../components/JSMpegPlayer';
2022-03-05 22:16:31 -06:00
import { fireEvent, render, screen, waitForElementToBeRemoved } from 'testing-library';
2021-02-12 16:30:14 -08:00
describe('Camera Route', () => {
let mockUsePersistence, mockSetOptions;
beforeEach(() => {
mockSetOptions = jest.fn();
mockUsePersistence = jest.spyOn(Context, 'usePersistence').mockImplementation(() => [{}, mockSetOptions, true]);
2021-02-12 16:30:14 -08:00
jest.spyOn(AutoUpdatingCameraImage, 'default').mockImplementation(({ searchParams }) => {
return <div data-testid="mock-image">{searchParams.toString()}</div>;
});
2021-06-18 21:21:25 -04:00
jest.spyOn(JSMpegPlayer, 'default').mockImplementation(() => {
return <div data-testid="mock-jsmpeg" />;
});
2022-03-05 22:16:31 -06:00
jest.spyOn(Mqtt, 'MqttProvider').mockImplementation(({ children }) => children);
2021-02-12 16:30:14 -08:00
});
test('reads camera feed options from persistence', async () => {
mockUsePersistence.mockReturnValue([
{
bbox: true,
timestamp: false,
zones: true,
mask: false,
motion: true,
regions: false,
},
mockSetOptions,
true,
2021-02-12 16:30:14 -08:00
]);
2021-06-13 14:49:13 -05:00
2021-02-12 16:30:14 -08:00
render(<Camera camera="front" />);
2021-06-13 14:49:13 -05:00
await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading…'), { timeout: 10 });
2022-03-05 22:16:31 -06:00
2021-06-13 14:49:13 -05:00
fireEvent.click(screen.queryByText('Debug'));
2021-02-12 16:30:14 -08:00
fireEvent.click(screen.queryByText('Show Options'));
expect(screen.queryByTestId('mock-image')).toHaveTextContent(
'bbox=1&timestamp=0&zones=1&mask=0&motion=1&regions=0'
);
});
test('updates camera feed options to persistence', async () => {
mockUsePersistence
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{}, mockSetOptions, true])
.mockReturnValueOnce([{ bbox: true }, mockSetOptions, true])
.mockReturnValueOnce([{ bbox: true, timestamp: true }, mockSetOptions, true]);
2021-02-12 16:30:14 -08:00
render(<Camera camera="front" />);
await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading…'), { timeout: 10 });
2022-03-05 22:16:31 -06:00
2021-06-13 14:49:13 -05:00
fireEvent.click(screen.queryByText('Debug'));
2021-02-12 16:30:14 -08:00
fireEvent.click(screen.queryByText('Show Options'));
fireEvent.change(screen.queryByTestId('bbox-input'), { target: { checked: true } });
fireEvent.change(screen.queryByTestId('timestamp-input'), { target: { checked: true } });
fireEvent.click(screen.queryByText('Hide Options'));
expect(mockUsePersistence).toHaveBeenCalledTimes(10);
2021-06-18 21:21:25 -04:00
expect(mockSetOptions).toHaveBeenCalledTimes(2);
2021-02-12 16:30:14 -08:00
expect(screen.queryByTestId('mock-image')).toHaveTextContent('bbox=1&timestamp=1');
});
});