Set timeline to now not to most recent event.
This commit is contained in:
@@ -1,25 +1,15 @@
|
||||
import {
|
||||
HASSDomEvent,
|
||||
handleActionConfig,
|
||||
} from '@dermotduffy/custom-card-helpers';
|
||||
import { LitElement } from 'lit';
|
||||
import { HASSDomEvent, handleActionConfig } from '@dermotduffy/custom-card-helpers';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { FRIGATE_ICON_SVG_PATH } from '../../src/camera-manager/frigate/icon';
|
||||
import { MenuController } from '../../src/components-lib/menu-controller';
|
||||
import { ActionsConfig, MenuConfig, menuConfigSchema } from '../../src/config/types';
|
||||
import { StateParameters } from '../../src/types';
|
||||
import { refreshDynamicStateParameters } from '../../src/utils/ha';
|
||||
import { createHASS } from '../test-utils';
|
||||
import { createHASS, createLitElement } from '../test-utils';
|
||||
|
||||
vi.mock('@dermotduffy/custom-card-helpers');
|
||||
vi.mock('../../src/utils/ha');
|
||||
|
||||
const createHost = (): LitElement => {
|
||||
const host = document.createElement('div') as unknown as LitElement;
|
||||
host.requestUpdate = vi.fn();
|
||||
return host;
|
||||
};
|
||||
|
||||
const createMenuConfig = (config: unknown): MenuConfig => {
|
||||
return menuConfigSchema.parse(config);
|
||||
};
|
||||
@@ -59,7 +49,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('should set and get menu config', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const controller = new MenuController(host);
|
||||
|
||||
const config = createMenuConfig({
|
||||
@@ -79,7 +69,7 @@ describe('MenuController', () => {
|
||||
|
||||
describe('should set and sort buttons', () => {
|
||||
it('by priority', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
controller.setButtons([
|
||||
{
|
||||
type: 'custom:frigate-card-menu-icon',
|
||||
@@ -146,7 +136,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('with frigate button first', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
controller.setMenuConfig(
|
||||
createMenuConfig({
|
||||
style: 'hidden',
|
||||
@@ -197,7 +187,7 @@ describe('MenuController', () => {
|
||||
|
||||
describe('should get buttons', () => {
|
||||
it('with matching alignment', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
controller.setButtons([
|
||||
{
|
||||
type: 'custom:frigate-card-menu-icon',
|
||||
@@ -229,7 +219,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('with disabled buttons', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
controller.setButtons([
|
||||
{
|
||||
type: 'custom:frigate-card-menu-icon',
|
||||
@@ -261,7 +251,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('with hidden non-expanded menu', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
controller.setMenuConfig(
|
||||
createMenuConfig({
|
||||
style: 'hidden',
|
||||
@@ -303,7 +293,7 @@ describe('MenuController', () => {
|
||||
|
||||
describe('should get fresh button state', () => {
|
||||
it('on state icon', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
const stateButton = {
|
||||
type: 'custom:frigate-card-menu-state-icon' as const,
|
||||
icon: 'mdi:sheep',
|
||||
@@ -322,7 +312,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('on non state icon', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
const button = {
|
||||
type: 'custom:frigate-card-menu-icon' as const,
|
||||
icon: 'mdi:sheep',
|
||||
@@ -335,7 +325,7 @@ describe('MenuController', () => {
|
||||
|
||||
describe('should get svg path', () => {
|
||||
it('frigate icon', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
const button = {
|
||||
type: 'custom:frigate-card-menu-icon' as const,
|
||||
icon: 'frigate',
|
||||
@@ -344,7 +334,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('non-frigate icon', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
const button = {
|
||||
type: 'custom:frigate-card-menu-icon' as const,
|
||||
icon: 'mdi:cow',
|
||||
@@ -355,13 +345,13 @@ describe('MenuController', () => {
|
||||
|
||||
describe('should handle actions', () => {
|
||||
it('should bail without config', () => {
|
||||
const controller = new MenuController(createHost());
|
||||
const controller = new MenuController(createLitElement());
|
||||
controller.actionHandler(createHASS(), createEvent('tap'));
|
||||
expect(vi.mocked(handleActionConfig)).not.toBeCalled();
|
||||
});
|
||||
|
||||
it('should execute simple action in non-hidden menu', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
|
||||
@@ -377,7 +367,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('should execute simple action in with config in event', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
|
||||
@@ -391,7 +381,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('should execute simple array of actions in non-hidden menu', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
|
||||
@@ -401,7 +391,7 @@ describe('MenuController', () => {
|
||||
|
||||
describe('should close menu', () => {
|
||||
it('tap', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
controller.setMenuConfig(
|
||||
@@ -418,7 +408,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('end_tap', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
controller.setMenuConfig(
|
||||
@@ -439,7 +429,7 @@ describe('MenuController', () => {
|
||||
|
||||
describe('should not close menu', () => {
|
||||
it('start_tap with later action', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
controller.setMenuConfig(
|
||||
@@ -459,7 +449,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('with a menu toggle action', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
controller.setMenuConfig(
|
||||
@@ -479,7 +469,7 @@ describe('MenuController', () => {
|
||||
});
|
||||
|
||||
it('when no action is actually taken', () => {
|
||||
const host = createHost();
|
||||
const host = createLitElement();
|
||||
const hass = createHASS();
|
||||
const controller = new MenuController(host);
|
||||
controller.setMenuConfig(
|
||||
|
||||
Reference in New Issue
Block a user