Refactor menu button logic out of main card.
This commit is contained in:
+82
-4
@@ -1,19 +1,31 @@
|
||||
import { HomeAssistant } from 'custom-card-helpers';
|
||||
import { HassEntities, HassEntity } from 'home-assistant-js-websocket';
|
||||
import { vi } from 'vitest';
|
||||
import { mock } from 'vitest-mock-extended';
|
||||
import { CameraManagerEngineFactory } from '../src/camera-manager/engine-factory';
|
||||
import { FrigateEvent, FrigateRecording } from '../src/camera-manager/frigate/types';
|
||||
import { CameraManager } from '../src/camera-manager/manager';
|
||||
import { CameraManagerStore } from '../src/camera-manager/store';
|
||||
import {
|
||||
CameraConfigs,
|
||||
CameraManagerCameraCapabilities,
|
||||
CameraManagerMediaCapabilities,
|
||||
} from '../src/camera-manager/types';
|
||||
import {
|
||||
CameraConfig,
|
||||
FrigateCardCondition,
|
||||
FrigateCardConfig,
|
||||
MediaLoadedInfo,
|
||||
RawFrigateCardConfig,
|
||||
cameraConfigSchema,
|
||||
frigateCardConditionSchema,
|
||||
frigateCardConfigSchema,
|
||||
} from '../src/types';
|
||||
import { Entity } from '../src/utils/ha/entity-registry/types';
|
||||
import { View, ViewParameters } from '../src/view/view';
|
||||
|
||||
export const createCameraConfig = (config: unknown): CameraConfig => {
|
||||
return cameraConfigSchema.parse(config);
|
||||
export const createCameraConfig = (config?: unknown): CameraConfig => {
|
||||
return cameraConfigSchema.parse(config ?? {});
|
||||
};
|
||||
|
||||
export const createCondition = (
|
||||
@@ -22,8 +34,12 @@ export const createCondition = (
|
||||
return frigateCardConditionSchema.parse(condition ?? {});
|
||||
};
|
||||
|
||||
export const createConfig = (config?: Partial<FrigateCardConfig>): FrigateCardConfig => {
|
||||
return frigateCardConfigSchema.parse(config);
|
||||
export const createConfig = (config?: RawFrigateCardConfig): FrigateCardConfig => {
|
||||
return frigateCardConfigSchema.parse({
|
||||
type: 'frigate-hass-card',
|
||||
cameras: [],
|
||||
...config,
|
||||
});
|
||||
};
|
||||
|
||||
export const createHASS = (states?: HassEntities): HomeAssistant => {
|
||||
@@ -89,3 +105,65 @@ export const createFrigateRecording = (recording?: Partial<FrigateRecording>) =>
|
||||
...recording,
|
||||
};
|
||||
};
|
||||
|
||||
export const createView = (options?: Partial<ViewParameters>): View => {
|
||||
return new View({
|
||||
view: 'live',
|
||||
camera: 'camera',
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export const createCameraManager = (options?: {
|
||||
store?: CameraManagerStore;
|
||||
configs?: CameraConfigs;
|
||||
}): CameraManager => {
|
||||
const cameraManager = new CameraManager(mock<CameraManagerEngineFactory>(), {});
|
||||
let store: CameraManagerStore | undefined = options?.store;
|
||||
if (!store) {
|
||||
store = mock<CameraManagerStore>();
|
||||
const configs = options?.configs ?? new Map([['camera', createCameraConfig()]]);
|
||||
vi.mocked(store.getCameras).mockReturnValue(configs);
|
||||
vi.mocked(store.getVisibleCameras).mockReturnValue(configs);
|
||||
vi.mocked(store.getCameraConfig).mockImplementation((cameraID): CameraConfig => {
|
||||
return configs.get(cameraID) ?? createCameraConfig();
|
||||
});
|
||||
}
|
||||
vi.mocked(cameraManager.getStore).mockReturnValue(store);
|
||||
return cameraManager;
|
||||
};
|
||||
|
||||
export const createCameraCapabilities = (
|
||||
options?: Partial<CameraManagerCameraCapabilities>,
|
||||
): CameraManagerCameraCapabilities => {
|
||||
return {
|
||||
canFavoriteEvents: false,
|
||||
canFavoriteRecordings: false,
|
||||
canSeek: false,
|
||||
supportsClips: false,
|
||||
supportsRecordings: false,
|
||||
supportsSnapshots: false,
|
||||
supportsTimeline: false,
|
||||
...options,
|
||||
};
|
||||
};
|
||||
|
||||
export const createMediaCapabilities = (
|
||||
options?: Partial<CameraManagerMediaCapabilities>,
|
||||
): CameraManagerMediaCapabilities => {
|
||||
return {
|
||||
canFavorite: false,
|
||||
canDownload: false,
|
||||
...options,
|
||||
};
|
||||
};
|
||||
|
||||
export const createMediaLoadedInfo = (
|
||||
options?: Partial<MediaLoadedInfo>,
|
||||
): MediaLoadedInfo => {
|
||||
return {
|
||||
width: 100,
|
||||
height: 100,
|
||||
...options,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import { mock } from 'vitest-mock-extended';
|
||||
import { CameraManagerEngineFactory } from '../../src/camera-manager/engine-factory.js';
|
||||
import { CameraManager } from '../../src/camera-manager/manager.js';
|
||||
import { CameraManagerStore } from '../../src/camera-manager/store.js';
|
||||
import { CameraConfigs } from '../../src/camera-manager/types.js';
|
||||
import { getAllDependentCameras, getCameraID } from '../../src/utils/camera.js';
|
||||
import { createCameraConfig } from '../test-utils.js';
|
||||
import { createCameraConfig, createCameraManager } from '../test-utils.js';
|
||||
|
||||
vi.mock('../../src/camera-manager/manager.js');
|
||||
|
||||
@@ -54,11 +52,7 @@ describe('getAllDependentCameras', () => {
|
||||
['two', createCameraConfig({})],
|
||||
]);
|
||||
|
||||
const cameraManager = new CameraManager(mock<CameraManagerEngineFactory>(), {});
|
||||
const store = mock<CameraManagerStore>();
|
||||
vi.mocked(cameraManager.getStore).mockReturnValue(store);
|
||||
store.getCameras.mockReturnValue(cameraConfigs);
|
||||
|
||||
const cameraManager = createCameraManager({ configs: cameraConfigs });
|
||||
expect(getAllDependentCameras(cameraManager, 'one')).toEqual(
|
||||
new Set(['one', 'two']),
|
||||
);
|
||||
@@ -76,11 +70,7 @@ describe('getAllDependentCameras', () => {
|
||||
['two', createCameraConfig({})],
|
||||
]);
|
||||
|
||||
const cameraManager = new CameraManager(mock<CameraManagerEngineFactory>(), {});
|
||||
const store = mock<CameraManagerStore>();
|
||||
vi.mocked(cameraManager.getStore).mockReturnValue(store);
|
||||
store.getCameras.mockReturnValue(cameraConfigs);
|
||||
|
||||
const cameraManager = createCameraManager({ configs: cameraConfigs });
|
||||
expect(getAllDependentCameras(cameraManager, 'one')).toEqual(
|
||||
new Set(['one', 'two']),
|
||||
);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import { mock } from 'vitest-mock-extended';
|
||||
import { CameraManager } from '../../src/camera-manager/manager';
|
||||
import { getAllDependentCameras } from '../../src/utils/camera';
|
||||
import {
|
||||
createViewWithNextStream,
|
||||
@@ -9,7 +7,9 @@ import {
|
||||
hasSubstream,
|
||||
} from '../../src/utils/substream';
|
||||
import { View } from '../../src/view/view';
|
||||
import { createCameraManager } from '../test-utils';
|
||||
|
||||
vi.mock('../../src/camera-manager/manager.js');
|
||||
vi.mock('../../src/utils/camera');
|
||||
|
||||
describe('createViewWithSelectedSubstream', () => {
|
||||
@@ -95,7 +95,7 @@ describe('createViewWithNextStream', () => {
|
||||
camera: 'camera',
|
||||
});
|
||||
vi.mocked(getAllDependentCameras).mockReturnValue(new Set(['camera']));
|
||||
const cameraManager = mock<CameraManager>();
|
||||
const cameraManager = createCameraManager()
|
||||
const newView = createViewWithNextStream(cameraManager, view);
|
||||
expect(newView.camera).toBe(view.camera);
|
||||
expect(newView.view).toBe(view.view);
|
||||
@@ -107,7 +107,7 @@ describe('createViewWithNextStream', () => {
|
||||
camera: 'camera',
|
||||
});
|
||||
vi.mocked(getAllDependentCameras).mockReturnValue(new Set(['camera', 'camera2']));
|
||||
const cameraManager = mock<CameraManager>();
|
||||
const cameraManager = createCameraManager()
|
||||
const newView = createViewWithNextStream(cameraManager, view);
|
||||
expect(newView.context?.live?.overrides).toEqual(new Map([['camera', 'camera2']]));
|
||||
});
|
||||
@@ -122,7 +122,7 @@ describe('createViewWithNextStream', () => {
|
||||
},
|
||||
});
|
||||
vi.mocked(getAllDependentCameras).mockReturnValue(new Set(['camera', 'camera2']));
|
||||
const cameraManager = mock<CameraManager>();
|
||||
const cameraManager = createCameraManager()
|
||||
const newView = createViewWithNextStream(cameraManager, view);
|
||||
expect(newView.context?.live?.overrides).toEqual(new Map([['camera', 'camera']]));
|
||||
});
|
||||
@@ -137,7 +137,7 @@ describe('createViewWithNextStream', () => {
|
||||
},
|
||||
});
|
||||
vi.mocked(getAllDependentCameras).mockReturnValue(new Set(['camera', 'camera2']));
|
||||
const cameraManager = mock<CameraManager>();
|
||||
const cameraManager = createCameraManager()
|
||||
const newView = createViewWithNextStream(cameraManager, view);
|
||||
expect(newView.context?.live?.overrides).toEqual(new Map([['camera', 'camera']]));
|
||||
});
|
||||
|
||||
+3
-15
@@ -1,22 +1,10 @@
|
||||
import { describe, it, expect, vi, test } from 'vitest';
|
||||
import { describe, expect, it, test, vi } from 'vitest';
|
||||
import { QueryType } from '../../src/camera-manager/types';
|
||||
import { ViewMedia } from '../../src/view/media';
|
||||
import { EventMediaQueries, RecordingMediaQueries } from '../../src/view/media-queries';
|
||||
import { MediaQueriesResults } from '../../src/view/media-queries-results';
|
||||
import {
|
||||
View,
|
||||
ViewParameters,
|
||||
dispatchViewContextChangeEvent,
|
||||
} from '../../src/view/view';
|
||||
import { ViewContext } from 'view';
|
||||
|
||||
const createView = (options?: Partial<ViewParameters>): View => {
|
||||
return new View({
|
||||
...options,
|
||||
view: options?.view ?? 'live',
|
||||
camera: options?.camera ?? 'camera',
|
||||
});
|
||||
};
|
||||
import { View, dispatchViewContextChangeEvent } from '../../src/view/view';
|
||||
import { createView } from '../test-utils';
|
||||
|
||||
// @vitest-environment jsdom
|
||||
describe('View Basics', () => {
|
||||
|
||||
Reference in New Issue
Block a user