71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { QueryResults } from '../../src/view/query-results';
|
|
import {
|
|
getViewTargetID,
|
|
IMAGE_VIEW_TARGET_ID_SENTINEL,
|
|
} from '../../src/view/target-id';
|
|
import { createView, generateViewMediaArray } from '../test-utils';
|
|
|
|
describe('getViewTargetID', () => {
|
|
describe('live', () => {
|
|
it('should return the base camera ID', () => {
|
|
const view = createView({ view: 'live', camera: 'camera.front_door' });
|
|
expect(getViewTargetID(view)).toBe('camera.front_door');
|
|
});
|
|
|
|
it('should return the base camera ID even though substream override is active', () => {
|
|
// Substream is a playback-layer detail; targetID stays the base camera
|
|
// throughout substream toggles so consumers above the provider don't
|
|
// need to know about substreams.
|
|
const view = createView({
|
|
view: 'live',
|
|
camera: 'camera.front_door',
|
|
context: {
|
|
live: {
|
|
overrides: new Map([['camera.front_door', 'camera.front_door_lq']]),
|
|
},
|
|
},
|
|
});
|
|
expect(getViewTargetID(view)).toBe('camera.front_door');
|
|
});
|
|
});
|
|
|
|
describe('viewer', () => {
|
|
it('should return the selected media ID', () => {
|
|
const media = generateViewMediaArray({ count: 3 });
|
|
const view = createView({
|
|
view: 'media',
|
|
camera: 'camera.front_door',
|
|
queryResults: new QueryResults({ results: media, selectedIndex: 1 }),
|
|
});
|
|
expect(getViewTargetID(view)).toBe(media[1].getID());
|
|
});
|
|
|
|
it('should return null when there is no selection', () => {
|
|
const view = createView({
|
|
view: 'media',
|
|
camera: 'camera.front_door',
|
|
});
|
|
expect(getViewTargetID(view)).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe('image', () => {
|
|
it('should return the sentinel', () => {
|
|
const view = createView({ view: 'image', camera: 'camera.front_door' });
|
|
expect(getViewTargetID(view)).toBe(IMAGE_VIEW_TARGET_ID_SENTINEL);
|
|
});
|
|
});
|
|
|
|
describe('other view types', () => {
|
|
it.each(['clips', 'snapshots', 'recordings', 'recording'] as const)(
|
|
'should return null for %s',
|
|
(viewName) => {
|
|
const view = createView({ view: viewName, camera: 'camera.front_door' });
|
|
expect(getViewTargetID(view)).toBeNull();
|
|
},
|
|
);
|
|
});
|
|
});
|