161 lines
4.1 KiB
TypeScript
161 lines
4.1 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { getHassDifferences } from '../../src/ha/get-hass-differences';
|
|
import { createHASS, createStateEntity } from '../test-utils';
|
|
|
|
describe('getHassDifferences', () => {
|
|
const newHass = createHASS({
|
|
'light.office': createStateEntity({
|
|
entity_id: 'light.office',
|
|
state: 'on',
|
|
}),
|
|
'light.kitchen': createStateEntity({
|
|
entity_id: 'light.kitchen',
|
|
state: 'on',
|
|
}),
|
|
'light.attributes_only': createStateEntity({
|
|
entity_id: 'light.attributes_only',
|
|
state: 'on',
|
|
attributes: {
|
|
friendly_name: 'Attributes Only After',
|
|
},
|
|
}),
|
|
});
|
|
const oldHass = createHASS({
|
|
'light.office': createStateEntity({
|
|
entity_id: 'light.office',
|
|
state: 'off',
|
|
}),
|
|
'light.kitchen': createStateEntity({
|
|
entity_id: 'light.kitchen',
|
|
state: 'off',
|
|
}),
|
|
'light.attributes_only': createStateEntity({
|
|
entity_id: 'light.attributes_only',
|
|
state: 'on',
|
|
attributes: {
|
|
friendly_name: 'Attributes Only Before',
|
|
},
|
|
}),
|
|
});
|
|
|
|
it('should return empty list without difference', () => {
|
|
expect(getHassDifferences(newHass, newHass, ['light.office'])).toEqual([]);
|
|
});
|
|
|
|
it('should return differences', () => {
|
|
expect(
|
|
getHassDifferences(newHass, oldHass, [
|
|
'light.office',
|
|
'light.kitchen',
|
|
'light.attributes_only',
|
|
]),
|
|
).toEqual([
|
|
{
|
|
entityID: 'light.office',
|
|
oldState: expect.objectContaining({
|
|
entity_id: 'light.office',
|
|
state: 'off',
|
|
}),
|
|
newState: expect.objectContaining({
|
|
entity_id: 'light.office',
|
|
state: 'on',
|
|
}),
|
|
},
|
|
{
|
|
entityID: 'light.kitchen',
|
|
oldState: expect.objectContaining({
|
|
entity_id: 'light.kitchen',
|
|
state: 'off',
|
|
}),
|
|
newState: expect.objectContaining({
|
|
entity_id: 'light.kitchen',
|
|
state: 'on',
|
|
}),
|
|
},
|
|
{
|
|
entityID: 'light.attributes_only',
|
|
oldState: expect.objectContaining({
|
|
entity_id: 'light.attributes_only',
|
|
state: 'on',
|
|
attributes: {
|
|
friendly_name: 'Attributes Only Before',
|
|
},
|
|
}),
|
|
newState: expect.objectContaining({
|
|
entity_id: 'light.attributes_only',
|
|
state: 'on',
|
|
attributes: {
|
|
friendly_name: 'Attributes Only After',
|
|
},
|
|
}),
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should return single difference', () => {
|
|
expect(
|
|
getHassDifferences(newHass, oldHass, ['light.office', 'light.kitchen'], {
|
|
firstOnly: true,
|
|
}),
|
|
).toEqual([
|
|
{
|
|
entityID: 'light.office',
|
|
oldState: expect.objectContaining({
|
|
entity_id: 'light.office',
|
|
state: 'off',
|
|
}),
|
|
newState: expect.objectContaining({
|
|
entity_id: 'light.office',
|
|
state: 'on',
|
|
}),
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should return only state differences', () => {
|
|
expect(
|
|
getHassDifferences(
|
|
newHass,
|
|
oldHass,
|
|
['light.office', 'light.kitchen', 'light.attributes_only'],
|
|
{
|
|
stateOnly: true,
|
|
},
|
|
),
|
|
).toEqual([
|
|
{
|
|
entityID: 'light.office',
|
|
oldState: expect.objectContaining({
|
|
entity_id: 'light.office',
|
|
state: 'off',
|
|
}),
|
|
newState: expect.objectContaining({
|
|
entity_id: 'light.office',
|
|
state: 'on',
|
|
}),
|
|
},
|
|
{
|
|
entityID: 'light.kitchen',
|
|
oldState: expect.objectContaining({
|
|
entity_id: 'light.kitchen',
|
|
state: 'off',
|
|
}),
|
|
newState: expect.objectContaining({
|
|
entity_id: 'light.kitchen',
|
|
state: 'on',
|
|
}),
|
|
},
|
|
]);
|
|
});
|
|
|
|
describe('should return empty list with empty values', () => {
|
|
it('should return empty list for empty new hass', () => {
|
|
expect(getHassDifferences(null, oldHass, ['light.office'])).toEqual([]);
|
|
});
|
|
|
|
it('should return empty list for empty entity list', () => {
|
|
expect(getHassDifferences(newHass, oldHass, [])).toEqual([]);
|
|
});
|
|
});
|
|
});
|