Allow camera capabilities to be configured.
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { Capabilities } from '../../src/camera-manager/capabilities';
|
||||
import { CapabilityKey, PTZCapabilities, capabilityKeys } from '../../src/types';
|
||||
|
||||
describe('Capabilities', () => {
|
||||
it('default capabilities', () => {
|
||||
const capabilities = new Capabilities({});
|
||||
for (const key of capabilityKeys) {
|
||||
expect(capabilities.has(key)).toBeFalsy();
|
||||
}
|
||||
});
|
||||
|
||||
describe('simple presence checks', () => {
|
||||
it.each([
|
||||
'clips',
|
||||
'favorite-events',
|
||||
'favorite-recordings',
|
||||
'live',
|
||||
'menu',
|
||||
'recordings',
|
||||
'seek',
|
||||
'snapshots',
|
||||
'substream',
|
||||
] as const)('%s', (capability: CapabilityKey) => {
|
||||
const capabilities = new Capabilities({
|
||||
[capability]: true,
|
||||
});
|
||||
expect(capabilities.has(capability)).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('complex matches', () => {
|
||||
it('string matcher', () => {
|
||||
const capabilities = new Capabilities({
|
||||
live: true,
|
||||
});
|
||||
expect(capabilities.matches('live')).toBeTruthy();
|
||||
expect(capabilities.matches('clips')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('allCapabilities matcher', () => {
|
||||
const capabilities = new Capabilities({
|
||||
live: true,
|
||||
clips: true,
|
||||
});
|
||||
expect(capabilities.matches({ allCapabilities: ['live', 'clips'] })).toBeTruthy();
|
||||
expect(
|
||||
capabilities.matches({ allCapabilities: ['live', 'snapshots'] }),
|
||||
).toBeFalsy();
|
||||
});
|
||||
|
||||
it('anyCapabilities matcher', () => {
|
||||
const capabilities = new Capabilities({
|
||||
live: true,
|
||||
clips: true,
|
||||
});
|
||||
expect(capabilities.matches({ anyCapabilities: ['live', 'clips'] })).toBeTruthy();
|
||||
expect(
|
||||
capabilities.matches({ anyCapabilities: ['live', 'snapshots'] }),
|
||||
).toBeTruthy();
|
||||
expect(
|
||||
capabilities.matches({ anyCapabilities: ['snapshots', 'menu'] }),
|
||||
).toBeFalsy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('getPTZCapabilities', () => {
|
||||
it('when unset', () => {
|
||||
const capabilities = new Capabilities({});
|
||||
expect(capabilities.getPTZCapabilities()).toBeNull();
|
||||
});
|
||||
|
||||
it('when set', () => {
|
||||
const ptz: PTZCapabilities = {
|
||||
panTilt: ['continuous' as const],
|
||||
presets: ['1', '2'],
|
||||
};
|
||||
const capabilities = new Capabilities({
|
||||
ptz: ptz,
|
||||
});
|
||||
expect(capabilities.getPTZCapabilities()).toBe(ptz);
|
||||
});
|
||||
});
|
||||
|
||||
describe('disable capabilities', () => {
|
||||
it('disable', () => {
|
||||
const capabilities = new Capabilities(
|
||||
{
|
||||
live: true,
|
||||
clips: true,
|
||||
snapshots: true,
|
||||
},
|
||||
{
|
||||
disable: ['live', 'clips'],
|
||||
},
|
||||
);
|
||||
expect(capabilities.has('live')).toBeFalsy();
|
||||
expect(capabilities.has('clips')).toBeFalsy();
|
||||
expect(capabilities.has('snapshots')).toBeTruthy();
|
||||
});
|
||||
|
||||
it('disableExcept', () => {
|
||||
const capabilities = new Capabilities(
|
||||
{
|
||||
live: true,
|
||||
clips: true,
|
||||
snapshots: true,
|
||||
},
|
||||
{
|
||||
disableExcept: ['live', 'clips'],
|
||||
},
|
||||
);
|
||||
expect(capabilities.has('live')).toBeTruthy();
|
||||
expect(capabilities.has('clips')).toBeTruthy();
|
||||
expect(capabilities.has('snapshots')).toBeFalsy();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user