73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
import { createCameraConfig, createHASS, createStateEntity } from '../test-utils';
|
|
import { getStateObjOrDispatchError } from '../../src/utils/get-state-obj';
|
|
|
|
// @vitest-environment jsdom
|
|
describe('getStateObjOrDispatchError', () => {
|
|
it('should retrieve valid state object', () => {
|
|
const messageHandler = vi.fn();
|
|
const element = document.createElement('div');
|
|
element.addEventListener('frigate-card:message', messageHandler);
|
|
const state = createStateEntity();
|
|
|
|
expect(
|
|
getStateObjOrDispatchError(
|
|
element,
|
|
createHASS({
|
|
'camera.test': state,
|
|
}),
|
|
createCameraConfig({
|
|
camera_entity: 'camera.test',
|
|
}),
|
|
),
|
|
).toBe(state);
|
|
|
|
expect(messageHandler).not.toBeCalled();
|
|
});
|
|
|
|
it('should dispatch unspecified entity', () => {
|
|
const messageHandler = vi.fn();
|
|
const element = document.createElement('div');
|
|
element.addEventListener('frigate-card:message', messageHandler);
|
|
|
|
expect(
|
|
getStateObjOrDispatchError(element, createHASS(), createCameraConfig()),
|
|
).toBeNull();
|
|
|
|
expect(messageHandler).toBeCalledWith(
|
|
expect.objectContaining({
|
|
detail: expect.objectContaining({
|
|
message:
|
|
'The camera_entity parameter must be set and valid for this live provider',
|
|
type: 'error',
|
|
}),
|
|
}),
|
|
);
|
|
});
|
|
|
|
it('should dispatch not found state', () => {
|
|
const messageHandler = vi.fn();
|
|
const element = document.createElement('div');
|
|
element.addEventListener('frigate-card:message', messageHandler);
|
|
|
|
expect(
|
|
getStateObjOrDispatchError(
|
|
element,
|
|
createHASS(),
|
|
createCameraConfig({
|
|
camera_entity: 'camera.will-not-be-found',
|
|
}),
|
|
),
|
|
).toBeNull();
|
|
|
|
expect(messageHandler).toBeCalledWith(
|
|
expect.objectContaining({
|
|
detail: expect.objectContaining({
|
|
message: 'The configured camera_entity was not found',
|
|
type: 'error',
|
|
}),
|
|
}),
|
|
);
|
|
});
|
|
});
|