Files
advanced-camera-card/tests/card-controller/config/load-keyboard-shortcuts.test.ts
T
Dermot Duffy fc32727860 feat: Add support for Frigate reviews / detections [initial PR] (#2315)
- Add support for Frigate reviews / detections.
 - Add support for GenAI metadata.
- Significant internal refactor to more flexible "UnifiedQuery" to allow
mixing cameras with simple metadata and review metadata (e.g. a timeline
view of a Frigate camera with reviews, and a Reolink camera with simple
metadata).
 - Add support for folder media as camera media.

There are a few more PRs to commit prior to this going live, but
commiting this for now due to the scale of the change.

BREAKING CHANGE: `media_type` and `events_type` are retired under
`live`, `viewer` and `timeline` configuration sections, instead media
type is associated (once) with the camera under `media`.
2026-01-19 13:32:50 -08:00

152 lines
4.6 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
import { setKeyboardShortcutsFromConfig } from '../../../src/card-controller/config/load-keyboard-shortcuts';
import { PTZAction } from '../../../src/config/schema/actions/custom/ptz';
import { PTZKeyboardShortcutName } from '../../../src/config/schema/view';
import { createCardAPI, createConfig } from '../../test-utils';
describe('setKeyboardShortcutsFromConfig', () => {
it('without shortcuts', () => {
const api = createCardAPI();
setKeyboardShortcutsFromConfig(api);
expect(api.getAutomationsManager().deleteAutomations).toBeCalledWith(
setKeyboardShortcutsFromConfig,
);
expect(api.getAutomationsManager().addAutomations).not.toBeCalled();
});
it('with shortcuts disabled', () => {
const api = createCardAPI();
vi.mocked(api.getConfigManager().getConfig).mockReturnValue(
createConfig({
view: {
keyboard_shortcuts: {
enabled: false,
},
},
}),
);
setKeyboardShortcutsFromConfig(api);
expect(api.getAutomationsManager().deleteAutomations).toBeCalledWith(
setKeyboardShortcutsFromConfig,
);
expect(api.getAutomationsManager().addAutomations).not.toBeCalled();
});
describe('PTZ shortcuts', () => {
describe('actions', () => {
it.each([
['ptz_left' as const, 'left' as const],
['ptz_right' as const, 'right' as const],
['ptz_up' as const, 'up' as const],
['ptz_down' as const, 'down' as const],
['ptz_zoom_in' as const, 'zoom_in' as const],
['ptz_zoom_out' as const, 'zoom_out' as const],
])('%s', (name: PTZKeyboardShortcutName, ptzAction: PTZAction) => {
const api = createCardAPI();
vi.mocked(api.getConfigManager().getConfig).mockReturnValue(
createConfig({
view: {
keyboard_shortcuts: {
enabled: true,
ptz_home: null,
ptz_left: null,
ptz_right: null,
ptz_up: null,
ptz_down: null,
ptz_zoom_in: null,
ptz_zoom_out: null,
[name]: { key: 'z' },
},
},
}),
);
setKeyboardShortcutsFromConfig(api);
expect(api.getAutomationsManager().deleteAutomations).toBeCalledWith(
setKeyboardShortcutsFromConfig,
);
expect(api.getAutomationsManager().addAutomations).toBeCalledWith([
{
actions: [
{
action: 'fire-dom-event',
advanced_camera_card_action: 'ptz_multi',
ptz_action: ptzAction,
ptz_phase: 'start',
},
],
conditions: [
{
alt: undefined,
condition: 'key',
ctrl: undefined,
key: 'z',
meta: undefined,
shift: undefined,
state: 'down',
},
],
tag: setKeyboardShortcutsFromConfig,
},
{
actions: [
{
action: 'fire-dom-event',
advanced_camera_card_action: 'ptz_multi',
ptz_action: ptzAction,
ptz_phase: 'stop',
},
],
conditions: [
{
condition: 'key',
key: 'z',
state: 'up',
},
],
tag: setKeyboardShortcutsFromConfig,
},
]);
});
it('ptz_home', () => {
const api = createCardAPI();
vi.mocked(api.getConfigManager().getConfig).mockReturnValue(createConfig());
setKeyboardShortcutsFromConfig(api);
expect(api.getAutomationsManager().deleteAutomations).toBeCalledWith(
setKeyboardShortcutsFromConfig,
);
expect(api.getAutomationsManager().addAutomations).toBeCalledWith(
expect.arrayContaining([
{
actions: [
{
action: 'fire-dom-event',
advanced_camera_card_action: 'ptz_multi',
},
],
conditions: [
{
alt: undefined,
condition: 'key',
ctrl: undefined,
key: 'h',
meta: undefined,
shift: undefined,
state: 'down',
},
],
tag: setKeyboardShortcutsFromConfig,
},
]),
);
});
});
});
});