refactor: Refactor entity register manager (#1597)

This commit is contained in:
Dermot Duffy
2024-09-29 15:55:28 -07:00
committed by GitHub
parent 24603af277
commit 02fb6e1d4c
28 changed files with 290 additions and 91 deletions
@@ -2,10 +2,10 @@ import { describe, expect, it } from 'vitest';
import { mock } from 'vitest-mock-extended';
import { BrowseMediaCamera } from '../../../src/camera-manager/browse-media/camera';
import { CameraManagerEngine } from '../../../src/camera-manager/engine';
import { EntityRegistryManager } from '../../../src/utils/ha/entity-registry';
import { Entity } from '../../../src/utils/ha/entity-registry/types';
import { createCameraConfig, createHASS } from '../../test-utils';
import { StateWatcherSubscriptionInterface } from '../../../src/card-controller/hass/state-watcher';
import { EntityRegistryManager } from '../../../src/utils/ha/registry/entity';
import { Entity } from '../../../src/utils/ha/registry/entity/types';
import { createCameraConfig, createHASS } from '../../test-utils';
describe('BrowseMediaCamera', () => {
describe('should initialize', () => {
+38 -9
View File
@@ -7,8 +7,10 @@ import { MotionEyeCameraManagerEngine } from '../../src/camera-manager/motioneye
import { Engine } from '../../src/camera-manager/types.js';
import { StateWatcherSubscriptionInterface } from '../../src/card-controller/hass/state-watcher.js';
import { CardWideConfig } from '../../src/config/types.js';
import { EntityRegistryManager } from '../../src/utils/ha/entity-registry';
import { EntityCache } from '../../src/utils/ha/entity-registry/cache';
import {
createEntityRegistryCache,
EntityRegistryManager,
} from '../../src/utils/ha/registry/entity/index.js';
import { ResolvedMediaCache } from '../../src/utils/ha/resolved-media';
import {
createCameraConfig,
@@ -25,7 +27,8 @@ const createFactory = (options?: {
cardWideConfig?: CardWideConfig;
}): CameraManagerEngineFactory => {
return new CameraManagerEngineFactory(
options?.entityRegistryManager ?? new EntityRegistryManager(new EntityCache()),
options?.entityRegistryManager ??
new EntityRegistryManager(createEntityRegistryCache()),
);
};
@@ -40,7 +43,9 @@ describe('getEngineForCamera()', () => {
it('from auto detection', async () => {
const config = createCameraConfig({ engine: 'auto', camera_entity: 'camera.foo' });
const entityRegistryManager = new EntityRegistryManager(new EntityCache());
const entityRegistryManager = new EntityRegistryManager(
createEntityRegistryCache(),
);
entityRegistryManager.getEntity = vi
.fn()
@@ -75,7 +80,9 @@ describe('getEngineForCamera()', () => {
it('from auto detection', async () => {
const config = createCameraConfig({ engine: 'auto', camera_entity: 'camera.foo' });
const entityRegistryManager = new EntityRegistryManager(new EntityCache());
const entityRegistryManager = new EntityRegistryManager(
createEntityRegistryCache(),
);
entityRegistryManager.getEntity = vi
.fn()
@@ -101,7 +108,9 @@ describe('getEngineForCamera()', () => {
it('from auto detection', async () => {
const config = createCameraConfig({ engine: 'auto', camera_entity: 'camera.foo' });
const entityRegistryManager = new EntityRegistryManager(new EntityCache());
const entityRegistryManager = new EntityRegistryManager(
createEntityRegistryCache(),
);
entityRegistryManager.getEntity = vi
.fn()
@@ -121,9 +130,11 @@ describe('getEngineForCamera()', () => {
engine: 'auto',
webrtc_card: { entity: 'camera.foo' },
});
const entityRegistryManager = new EntityRegistryManager(new EntityCache());
const entityRegistryManager = new EntityRegistryManager(
createEntityRegistryCache(),
);
entityRegistryManager.getEntity = vi.fn().mockRejectedValue(new Error());
entityRegistryManager.getEntity = vi.fn().mockResolvedValue(null);
expect(
await createFactory({
@@ -137,6 +148,24 @@ describe('getEngineForCamera()', () => {
).toBe(Engine.Generic);
});
it('from entity not in registry and not in state', async () => {
const config = createCameraConfig({
engine: 'auto',
webrtc_card: { entity: 'camera.foo' },
});
const entityRegistryManager = new EntityRegistryManager(
createEntityRegistryCache(),
);
entityRegistryManager.getEntity = vi.fn().mockResolvedValue(null);
expect(
async () =>
await createFactory({
entityRegistryManager: entityRegistryManager,
}).getEngineForCamera(createHASS(), config),
).rejects.toThrow(/Could not find camera entity/);
});
it('from webrtc-card url', async () => {
const config = createCameraConfig({
engine: 'auto',
@@ -167,7 +196,7 @@ describe('getEngineForCamera()', () => {
it('should throw error on invalid entity', async () => {
const config = createCameraConfig({ engine: 'auto', camera_entity: 'camera.foo' });
const entityRegistryManager = new EntityRegistryManager(new EntityCache());
const entityRegistryManager = new EntityRegistryManager(createEntityRegistryCache());
entityRegistryManager.getEntity = vi.fn().mockRejectedValue(new Error());
+3 -3
View File
@@ -7,8 +7,8 @@ import { getPTZInfo } from '../../../src/camera-manager/frigate/requests';
import { FrigateEventChange } from '../../../src/camera-manager/frigate/types';
import { StateWatcher } from '../../../src/card-controller/hass/state-watcher';
import { CameraTriggerEventType } from '../../../src/config/types';
import { EntityRegistryManager } from '../../../src/utils/ha/entity-registry';
import { Entity } from '../../../src/utils/ha/entity-registry/types';
import { EntityRegistryManager } from '../../../src/utils/ha/registry/entity';
import { Entity } from '../../../src/utils/ha/registry/entity/types';
import { createCameraConfig, createHASS, createRegistryEntity } from '../../test-utils';
vi.mock('../../../src/camera-manager/frigate/requests');
@@ -54,7 +54,7 @@ describe('FrigateCamera', () => {
mock<CameraManagerEngine>(),
);
const entityRegistryManager = mock<EntityRegistryManager>();
entityRegistryManager.getEntity.mockRejectedValue(null);
entityRegistryManager.getEntity.mockResolvedValue(null);
expect(
async () =>
+2 -2
View File
@@ -5,10 +5,10 @@ import { Capabilities } from '../../src/camera-manager/capabilities.js';
import { CameraManagerEngineFactory } from '../../src/camera-manager/engine-factory.js';
import { CameraManagerStore } from '../../src/camera-manager/store.js';
import { Engine } from '../../src/camera-manager/types.js';
import { EntityRegistryManager } from '../../src/utils/ha/entity-registry/index.js';
import { StateWatcherSubscriptionInterface } from '../../src/card-controller/hass/state-watcher.js';
import { EntityRegistryManager } from '../../src/utils/ha/registry/entity/index.js';
import { ResolvedMediaCache } from '../../src/utils/ha/resolved-media.js';
import { TestViewMedia, createCameraConfig } from '../test-utils.js';
import { StateWatcherSubscriptionInterface } from '../../src/card-controller/hass/state-watcher.js';
describe('CameraManagerStore', async () => {
const configVisible = createCameraConfig({