68 lines
2.2 KiB
TypeScript
68 lines
2.2 KiB
TypeScript
import { beforeAll, describe, expect, it } from 'vitest';
|
|
|
|
import { TemplateManager } from '../../../../src/card-controller/templates';
|
|
import { createConditionEvaluator } from '../../../../src/condition-trigger/conditions/factory';
|
|
import {
|
|
createHASS,
|
|
createStateEntity,
|
|
stubConnectedHomeAssistant,
|
|
} from '../../../test-utils';
|
|
import { createEvaluatorContext } from './test-utils';
|
|
|
|
// @vitest-environment jsdom
|
|
describe('template condition', () => {
|
|
const templateManager = new TemplateManager();
|
|
beforeAll(async () => {
|
|
stubConnectedHomeAssistant();
|
|
await templateManager.loadRenderer();
|
|
});
|
|
|
|
it('should evaluate true when template evalutes to true', () => {
|
|
const evaluator = createConditionEvaluator(
|
|
{
|
|
condition: 'template' as const,
|
|
value_template: '{{ is_state("sensor.foo", "on") }}',
|
|
},
|
|
createEvaluatorContext({ templateRenderer: templateManager }),
|
|
);
|
|
|
|
expect(evaluator.evaluate({}).result).toBeFalsy();
|
|
expect(
|
|
evaluator.evaluate({
|
|
hass: createHASS({ 'sensor.foo': createStateEntity({ state: 'on' }) }),
|
|
}).result,
|
|
).toBeTruthy();
|
|
expect(
|
|
evaluator.evaluate({
|
|
hass: createHASS({ 'sensor.foo': createStateEntity({ state: 'off' }) }),
|
|
}).result,
|
|
).toBeFalsy();
|
|
});
|
|
|
|
it('should evaluate false when template evalutes to non-boolean', () => {
|
|
const evaluator = createConditionEvaluator(
|
|
{
|
|
condition: 'template' as const,
|
|
// This does not result in a boolean.
|
|
value_template: '{{ hass.states["light.office"].state }}',
|
|
},
|
|
createEvaluatorContext({ templateRenderer: templateManager }),
|
|
);
|
|
|
|
expect(
|
|
evaluator.evaluate({
|
|
hass: createHASS({ 'light.office': createStateEntity({ state: 'on' }) }),
|
|
}).result,
|
|
).toBeFalsy();
|
|
});
|
|
|
|
it('should accept a template rendering the string "true" for HA symmetry', () => {
|
|
const evaluator = createConditionEvaluator(
|
|
{ condition: 'template' as const, value_template: '{{ "true" }}' },
|
|
createEvaluatorContext({ templateRenderer: templateManager }),
|
|
);
|
|
|
|
expect(evaluator.evaluate({ hass: createHASS({}) }).result).toBeTruthy();
|
|
});
|
|
});
|