Set timeline to now not to most recent event.

This commit is contained in:
Dermot Duffy
2024-04-07 20:21:09 -07:00
parent 14a4f89726
commit f67620397f
22 changed files with 828 additions and 336 deletions
+21 -31
View File
@@ -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(