86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import { renderTemplate } from 'ha-nunjucks';
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { TemplateRenderer } from '../../src/card-controller/templates';
|
|
import type { ConditionState } from '../../src/condition-trigger/conditions/types';
|
|
import type { TriggerData } from '../../src/condition-trigger/triggers/types';
|
|
import { createHASS } from '../test-utils';
|
|
|
|
// ha-nunjucks attempts to make websocket calls initially so mock it out.
|
|
vi.mock('ha-nunjucks');
|
|
|
|
describe('TemplateRenderer', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('should render data', () => {
|
|
const data = {
|
|
camera: '{{ acc.camera }}',
|
|
array: ['{{ acc.camera }}', '{{ acc.view }}'],
|
|
nested: {
|
|
camera: '{{ acc.camera }}',
|
|
},
|
|
number: 42,
|
|
};
|
|
|
|
vi.mocked(renderTemplate)
|
|
.mockReturnValueOnce('one')
|
|
.mockReturnValueOnce('two')
|
|
.mockReturnValueOnce('three')
|
|
.mockReturnValueOnce('four');
|
|
|
|
const renderer = new TemplateRenderer();
|
|
const hass = createHASS();
|
|
|
|
expect(renderer.renderRecursively(hass, data)).toEqual({
|
|
camera: 'one',
|
|
array: ['two', 'three'],
|
|
nested: {
|
|
camera: 'four',
|
|
},
|
|
number: 42,
|
|
});
|
|
});
|
|
|
|
it('should include triggers', () => {
|
|
const conditionState: ConditionState = {
|
|
camera: 'camera',
|
|
view: 'live',
|
|
};
|
|
const triggerData: TriggerData = {
|
|
platform: 'acc',
|
|
type: 'camera',
|
|
from_acc: { camera: 'previous-camera' },
|
|
to_acc: { camera: 'camera' },
|
|
};
|
|
|
|
const renderer = new TemplateRenderer();
|
|
const hass = createHASS();
|
|
|
|
renderer.renderRecursively(
|
|
hass,
|
|
{
|
|
key: 'value',
|
|
},
|
|
{
|
|
conditionState,
|
|
triggerData,
|
|
},
|
|
);
|
|
|
|
expect(renderTemplate).toHaveBeenCalledWith(hass, 'value', {
|
|
acc: {
|
|
camera: 'camera',
|
|
view: 'live',
|
|
},
|
|
trigger: {
|
|
platform: 'acc',
|
|
type: 'camera',
|
|
from_acc: { camera: 'previous-camera' },
|
|
to_acc: { camera: 'camera' },
|
|
},
|
|
});
|
|
});
|
|
});
|