Files
advanced-camera-card/tests/condition-trigger/conditions/conditions/template.test.ts
T

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();
});
});