Files
advanced-camera-card/tests/view/target-id.test.ts
T

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();
},
);
});
});