@@ -1,9 +1,11 @@
|
||||
import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { mock } from 'vitest-mock-extended';
|
||||
import {
|
||||
ActionsManager,
|
||||
Interaction,
|
||||
InteractionName,
|
||||
} from '../../../src/card-controller/actions/actions-manager';
|
||||
import { TemplateRenderer } from '../../../src/card-controller/templates';
|
||||
import { AdvancedCameraCardView } from '../../../src/config/types';
|
||||
import { createLogAction } from '../../../src/utils/action';
|
||||
import {
|
||||
@@ -286,4 +288,34 @@ describe('ActionsManager', () => {
|
||||
expect(consoleSpy).not.toBeCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it('should render templates', async () => {
|
||||
const action = createLogAction('{{ acc.camera }}');
|
||||
|
||||
const templateRenderer = mock<TemplateRenderer>();
|
||||
templateRenderer.renderRecursively.mockReturnValue(action);
|
||||
|
||||
const api = createCardAPI();
|
||||
const hass = createHASS();
|
||||
vi.mocked(api.getHASSManager().getHASS).mockReturnValue(hass);
|
||||
|
||||
const conditionState = {
|
||||
camera: 'camera',
|
||||
};
|
||||
vi.mocked(api.getConditionStateManager().getState).mockReturnValue(conditionState);
|
||||
|
||||
const manager = new ActionsManager(api, templateRenderer);
|
||||
const config = { camera_image: 'camera-image' };
|
||||
const triggerData = { view: { from: 'previous-view', to: 'view' } };
|
||||
|
||||
await manager.executeActions(action, {
|
||||
config,
|
||||
triggerData,
|
||||
});
|
||||
|
||||
expect(templateRenderer.renderRecursively).toBeCalledWith(hass, action, {
|
||||
conditionState,
|
||||
triggerData,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
import { renderTemplate } from 'ha-nunjucks';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { TemplateRenderer } from '../../src/card-controller/templates';
|
||||
import { ConditionsEvaluationData, ConditionState } from '../../src/conditions/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: 'view',
|
||||
};
|
||||
const triggerData: ConditionsEvaluationData = {
|
||||
camera: {
|
||||
to: 'camera',
|
||||
from: 'previous-camera',
|
||||
},
|
||||
};
|
||||
|
||||
const renderer = new TemplateRenderer();
|
||||
const hass = createHASS();
|
||||
|
||||
renderer.renderRecursively(
|
||||
hass,
|
||||
{
|
||||
key: 'value',
|
||||
},
|
||||
{
|
||||
conditionState,
|
||||
triggerData,
|
||||
},
|
||||
);
|
||||
|
||||
expect(renderTemplate).toHaveBeenCalledWith(hass, 'value', {
|
||||
acc: {
|
||||
camera: 'camera',
|
||||
view: 'view',
|
||||
trigger: {
|
||||
camera: {
|
||||
to: 'camera',
|
||||
from: 'previous-camera',
|
||||
},
|
||||
},
|
||||
},
|
||||
advanced_camera_card: {
|
||||
camera: 'camera',
|
||||
view: 'view',
|
||||
trigger: {
|
||||
camera: {
|
||||
to: 'camera',
|
||||
from: 'previous-camera',
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user