104 lines
3.5 KiB
TypeScript
104 lines
3.5 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
import { AdvancedCameraCardView } from '../../src/config/schema/common/const';
|
|
import { CapabilityKey } from '../../src/types';
|
|
import { getCameraIDsForViewName } from '../../src/view/view-to-cameras';
|
|
import {
|
|
createCameraConfig,
|
|
createCameraManager,
|
|
createCapabilities,
|
|
createStore,
|
|
} from '../test-utils';
|
|
|
|
describe('getCameraIDsForViewName', () => {
|
|
describe('views that are always supported', () => {
|
|
it.each([
|
|
['diagnostics' as const],
|
|
['folder' as const],
|
|
['folders' as const],
|
|
['image' as const],
|
|
['media' as const],
|
|
])('%s', (viewName: AdvancedCameraCardView) => {
|
|
const cameraManager = createCameraManager();
|
|
vi.mocked(cameraManager.getStore).mockReturnValue(
|
|
createStore([
|
|
{
|
|
cameraID: 'camera-1',
|
|
config: createCameraConfig({ dependencies: { cameras: ['camera-2'] } }),
|
|
},
|
|
{ cameraID: 'camera-2' },
|
|
]),
|
|
);
|
|
|
|
expect(getCameraIDsForViewName(cameraManager, viewName)).toEqual(
|
|
new Set(['camera-1', 'camera-2']),
|
|
);
|
|
expect(getCameraIDsForViewName(cameraManager, viewName, 'camera-1')).toEqual(
|
|
new Set(['camera-1', 'camera-2']),
|
|
);
|
|
expect(getCameraIDsForViewName(cameraManager, viewName, 'camera-2')).toEqual(
|
|
new Set(['camera-1', 'camera-2']),
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('views that respect dependencies and need a capability', () => {
|
|
it.each([
|
|
['live' as const, 'live' as const],
|
|
['timeline' as const, 'clips' as const],
|
|
['timeline' as const, 'recordings' as const],
|
|
['timeline' as const, 'snapshots' as const],
|
|
])('%s', (viewName: AdvancedCameraCardView, capabilityKey: CapabilityKey) => {
|
|
const cameraManager = createCameraManager();
|
|
vi.mocked(cameraManager.getStore).mockReturnValue(
|
|
createStore([
|
|
{
|
|
cameraID: 'camera-1',
|
|
config: createCameraConfig({ dependencies: { cameras: ['camera-2'] } }),
|
|
},
|
|
{
|
|
cameraID: 'camera-2',
|
|
capabilities: createCapabilities({ [capabilityKey]: true }),
|
|
},
|
|
]),
|
|
);
|
|
|
|
expect(getCameraIDsForViewName(cameraManager, viewName)).toEqual(
|
|
new Set(['camera-2']),
|
|
);
|
|
});
|
|
|
|
it.each([
|
|
['clip' as const, 'clips' as const],
|
|
['clips' as const, 'clips' as const],
|
|
['snapshot' as const, 'snapshots' as const],
|
|
['snapshots' as const, 'snapshots' as const],
|
|
['recording' as const, 'recordings' as const],
|
|
['recordings' as const, 'recordings' as const],
|
|
])('%s', (viewName: AdvancedCameraCardView, capabilityKey: CapabilityKey) => {
|
|
const cameraManager = createCameraManager();
|
|
vi.mocked(cameraManager.getStore).mockReturnValue(
|
|
createStore([
|
|
{
|
|
cameraID: 'camera-1',
|
|
config: createCameraConfig({ dependencies: { cameras: ['camera-2'] } }),
|
|
},
|
|
{
|
|
cameraID: 'camera-2',
|
|
capabilities: createCapabilities({ [capabilityKey]: true }),
|
|
},
|
|
]),
|
|
);
|
|
|
|
expect(getCameraIDsForViewName(cameraManager, viewName)).toEqual(
|
|
new Set(['camera-1', 'camera-2']),
|
|
);
|
|
expect(getCameraIDsForViewName(cameraManager, viewName, 'camera-1')).toEqual(
|
|
new Set(['camera-1', 'camera-2']),
|
|
);
|
|
expect(getCameraIDsForViewName(cameraManager, viewName, 'camera-2')).toEqual(
|
|
new Set(['camera-2']),
|
|
);
|
|
});
|
|
});
|
|
});
|