Files

91 lines
3.1 KiB
TypeScript

import { vi } from 'vitest';
import { mock } from 'vitest-mock-extended';
import { Camera } from '../../src/camera-manager/camera';
import { Capabilities } from '../../src/camera-manager/capabilities';
import type { CameraManagerEngine } from '../../src/camera-manager/engine';
import { GenericCameraManagerEngine } from '../../src/camera-manager/generic/engine-generic';
import type { CameraManager } from '../../src/camera-manager/manager';
import { CameraManagerStore } from '../../src/camera-manager/store';
import { type CameraEventCallback } from '../../src/camera-manager/types';
import type { StateWatcherSubscriptionInterface } from '../../src/card-controller/hass/state-watcher';
import { type CameraConfig } from '../../src/config/schema/cameras';
import type { EntityRegistryManager } from '../../src/ha/registry/entity/types';
import type { CapabilitiesRaw } from '../../src/types';
import { createCameraConfig } from '../config/test-utils';
import { createHASSManager } from '../test-utils';
export const createCapabilities = (capabilities?: CapabilitiesRaw): Capabilities => {
return new Capabilities({
'favorite-events': false,
'favorite-recordings': false,
'remote-control-entity': true,
clips: false,
live: false,
recordings: false,
seek: false,
snapshots: false,
trigger: true,
...capabilities,
});
};
export const createInitializedCamera = async (
config: CameraConfig,
engine: CameraManagerEngine,
capabilities?: Capabilities,
stateWatcher?: StateWatcherSubscriptionInterface,
): Promise<Camera> => {
const camera = new Camera(config, engine);
await camera.initialize({
hassManager: createHASSManager({ stateWatcher }),
...(capabilities ? { capabilityOptions: { capabilities } } : {}),
});
return camera;
};
export const createStore = (
cameras?: {
cameraID: string;
engine?: CameraManagerEngine;
config?: CameraConfig;
capabilities?: Capabilities | null;
eventCallback?: CameraEventCallback;
}[],
): CameraManagerStore => {
const store = new CameraManagerStore();
for (const cameraProps of cameras ?? []) {
const eventCallback = cameraProps.eventCallback ?? vi.fn();
const capabilities =
cameraProps.capabilities === undefined
? createCapabilities()
: cameraProps.capabilities ?? undefined;
const camera = new Camera(
cameraProps.config ?? createCameraConfig(),
cameraProps.engine ??
new GenericCameraManagerEngine(
createHASSManager(),
mock<EntityRegistryManager>(),
eventCallback,
),
{ eventCallback, capabilities },
);
camera.setID(cameraProps.cameraID);
store.addCamera(camera);
}
return store;
};
export const createCameraManager = (store?: CameraManagerStore): CameraManager => {
const cameraStore = store ?? createStore();
const cameraManager = mock<CameraManager>();
vi.mocked(cameraManager.getStore).mockReturnValue(cameraStore);
vi.mocked(cameraManager.getCameraCapabilities).mockImplementation(
(cameraID: string): Capabilities | null => {
return cameraStore.getCamera(cameraID)?.getCapabilities() ?? null;
},
);
return cameraManager;
};