CameraImage.test.jsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { h } from 'preact';
  2. import * as Api from '../../api';
  3. import * as Hooks from '../../hooks';
  4. import CameraImage from '../CameraImage';
  5. import { render, screen } from '@testing-library/preact';
  6. jest.mock('../../api/baseUrl');
  7. describe('CameraImage', () => {
  8. beforeEach(() => {
  9. jest.spyOn(Api, 'useConfig').mockImplementation(() => {
  10. return { data: { cameras: { front: { name: 'front', width: 1280, height: 720 } } } };
  11. });
  12. jest.spyOn(Api, 'useApiHost').mockReturnValue('http://base-url.local:5000');
  13. jest.spyOn(Hooks, 'useResizeObserver').mockImplementation(() => [{ width: 0 }]);
  14. });
  15. test('renders an activity indicator while loading', async () => {
  16. render(<CameraImage camera="front" />);
  17. expect(screen.queryByLabelText('Loading…')).toBeInTheDocument();
  18. });
  19. test('creates a scaled canvas using the available width & height, preserving camera aspect ratio', async () => {
  20. jest.spyOn(Hooks, 'useResizeObserver').mockReturnValueOnce([{ width: 720 }]);
  21. render(<CameraImage camera="front" />);
  22. expect(screen.queryByLabelText('Loading…')).toBeInTheDocument();
  23. const canvas = screen.queryByTestId('cameraimage-canvas');
  24. expect(canvas).toHaveAttribute('height', '405');
  25. expect(canvas).toHaveAttribute('width', '720');
  26. });
  27. test('allows camera image to stretch to available space', async () => {
  28. jest.spyOn(Hooks, 'useResizeObserver').mockReturnValueOnce([{ width: 1400 }]);
  29. render(<CameraImage camera="front" stretch />);
  30. expect(screen.queryByLabelText('Loading…')).toBeInTheDocument();
  31. const canvas = screen.queryByTestId('cameraimage-canvas');
  32. expect(canvas).toHaveAttribute('height', '787');
  33. expect(canvas).toHaveAttribute('width', '1400');
  34. });
  35. });