Add support for pre-defined zoom/pan settings.

This commit is contained in:
Dermot Duffy
2024-04-27 14:55:38 -07:00
parent 246dd7ff54
commit 7917e5c537
59 changed files with 1981 additions and 638 deletions
+58 -2
View File
@@ -196,7 +196,6 @@ describe('ActionsManager.handleInteraction', () => {
manager.handleInteractionEvent(
new CustomEvent<Interaction>('event', {
// Malformed interaction type.
detail: { action: 'double_finger_snap' } as unknown as Interaction,
}),
@@ -800,11 +799,68 @@ describe('ActionsManager.executeAction', () => {
})!,
);
expect(api.getViewManager().setViewWithNewContext).toBeCalledWith(
expect(api.getViewManager().setViewWithMergedContext).toBeCalledWith(
expect.objectContaining({ live: { ptzVisible: true } }),
);
});
describe('should handle change_zoom action', () => {
it('default', async () => {
const api = createCardAPI();
const manager = new ActionsManager(api);
await manager.executeFrigateAction(
createAction({
frigate_card_action: 'change_zoom',
target_id: 'camera.office',
})!,
);
expect(api.getViewManager().setViewWithMergedContext).toBeCalledWith(
expect.objectContaining({
zoom: {
'camera.office': {
zoom: {},
},
},
}),
);
});
it('non-default', async () => {
const api = createCardAPI();
const manager = new ActionsManager(api);
await manager.executeFrigateAction(
createAction({
frigate_card_action: 'change_zoom',
target_id: 'camera.office',
zoom: 2,
pan: {
x: 3,
y: 4,
},
})!,
);
expect(api.getViewManager().setViewWithMergedContext).toBeCalledWith(
expect.objectContaining({
zoom: {
'camera.office': {
zoom: {
zoom: 2,
pan: {
x: 3,
y: 4,
},
},
},
},
}),
);
});
});
it('should handle unknown action', async () => {
const manager = new ActionsManager(createCardAPI());
@@ -149,7 +149,6 @@ describe('CardElementManager', () => {
element.removeEventListener = removeEventListener;
const api = createCardAPI();
vi.mocked(api.getCameraManager().reset).mockResolvedValue();
const manager = new CardElementManager(
api,
@@ -186,6 +185,6 @@ describe('CardElementManager', () => {
);
expect(windowRemoveEventListener).toBeCalledWith('popstate', expect.anything());
expect(api.getCameraManager().reset).toBeCalled();
expect(api.getInitializationManager().uninitialize).toBeCalledWith('cameras');
});
});
@@ -1,10 +1,10 @@
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { mock } from 'vitest-mock-extended';
import { loadLanguages } from '../../src/localize/localize';
import {
InitializationAspect,
InitializationManager,
} from '../../src/card-controller/initialization-manager';
import { loadLanguages } from '../../src/localize/localize';
import { sideLoadHomeAssistantElements } from '../../src/utils/ha';
import { Initializer } from '../../src/utils/initializer/initializer';
import { createCardAPI, createConfig, createHASS } from '../test-utils';
@@ -184,6 +184,22 @@ describe('InitializationManager', () => {
expect(await manager.initializeMandatory()).toBeFalsy();
});
it('with existing view', async () => {
const api = createCardAPI();
vi.mocked(api.getHASSManager().getHASS).mockReturnValue(createHASS());
vi.mocked(api.getConfigManager().getConfig).mockReturnValue(createConfig());
vi.mocked(api.getViewManager().hasView).mockReturnValue(true);
const initializer = mock<Initializer>();
const manager = new InitializationManager(api, initializer);
initializer.initializeMultipleIfNecessary
.mockResolvedValueOnce(true)
.mockResolvedValueOnce(true);
expect(await manager.initializeMandatory()).toBeTruthy();
expect(api.getCardElementManager().update).toBeCalled();
});
});
describe('should initialize background', () => {
+2 -2
View File
@@ -81,7 +81,7 @@ describe('ViewManager.setView', () => {
const context = { live: { fetchThumbnails: false } };
// Setting context with no existing view does nothing.
manager.setViewWithNewContext(context);
manager.setViewWithMergedContext(context);
expect(manager.getView()).toBeNull();
const view = createView({
@@ -89,7 +89,7 @@ describe('ViewManager.setView', () => {
camera: 'camera',
});
manager.setView(view);
manager.setViewWithNewContext(context);
manager.setViewWithMergedContext(context);
expect(manager.getView()?.camera).toBe('camera');
expect(manager.getView()?.view).toBe('live');