refactor: Refactor media loading manager for improved robustness (#2464)
This commit is contained in:
committed by
dermotduffy
parent
47bcce93d3
commit
bc366626f1
@@ -0,0 +1,69 @@
|
||||
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();
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user