import { HomeAssistant } from 'custom-card-helpers'; import { HassEntities, HassEntity } from 'home-assistant-js-websocket'; import { mock } from 'vitest-mock-extended'; import { FrigateEvent, FrigateRecording } from '../src/camera-manager/frigate/types'; import { CameraConfig, FrigateCardCondition, FrigateCardConfig, cameraConfigSchema, frigateCardConditionSchema, frigateCardConfigSchema, } from '../src/types'; import { Entity } from '../src/utils/ha/entity-registry/types'; export const createCameraConfig = (config: unknown): CameraConfig => { return cameraConfigSchema.parse(config); }; export const createCondition = ( condition?: Partial, ): FrigateCardCondition => { return frigateCardConditionSchema.parse(condition ?? {}); }; export const createConfig = (config?: Partial): FrigateCardConfig => { return frigateCardConfigSchema.parse(config); }; export const createHASS = (states?: HassEntities): HomeAssistant => { const hass = mock(); if (states) { hass.states = states; } return hass; }; export const createRegistryEntity = (entity?: Partial): Entity => { return { config_entry_id: entity?.config_entry_id ?? null, device_id: entity?.device_id ?? null, disabled_by: entity?.disabled_by ?? null, entity_id: entity?.entity_id ?? 'entity_id', hidden_by: entity?.hidden_by ?? null, platform: entity?.platform ?? 'platform', translation_key: entity?.translation_key ?? null, unique_id: entity?.unique_id ?? 'unique_id', }; }; export const createStateEntity = (entity?: Partial): HassEntity => { return { entity_id: entity?.entity_id ?? 'entity_id', state: entity?.state ?? 'on', last_changed: entity?.last_changed ?? 'never', last_updated: entity?.last_updated ?? 'never', attributes: entity?.attributes ?? {}, context: entity?.context ?? { id: 'id', parent_id: 'parent_id', user_id: 'user_id', }, }; }; export const createFrigateEvent = (event?: Partial) => { return { camera: 'camera', end_time: 1683397124, false_positive: false, has_clip: true, has_snapshot: true, id: '1683396875.643998-hmzrh5', label: 'person', sub_label: null, start_time: 1683395000, top_score: 0.841796875, zones: [], retain_indefinitely: false, ...event, }; }; export const createFrigateRecording = (recording?: Partial) => { return { cameraID: 'cameraID', startTime: new Date('2023-04-29T14:00:00'), endTime: new Date('2023-04-29T14:59:59'), events: 42, ...recording, }; };