import { afterEach, describe, expect, it, vi } from 'vitest'; import { DefaultManager } from '../../src/card-controller/default-manager'; import { callHASubscribeMessageHandler, createCardAPI, createConfig, createHASS, } from '../test-utils'; // @vitest-environment jsdom describe('DefaultManager', () => { afterEach(() => { vi.useRealTimers(); }); describe('time based', () => { it('should set default view when allowed', async () => { const api = createCardAPI(); vi.mocked(api.getConfigManager().getConfig).mockReturnValue( createConfig({ view: { default_reset: { every_seconds: 10, }, }, }), ); vi.mocked(api.getInteractionManager().hasInteraction).mockReturnValue(true); vi.useFakeTimers(); const manager = new DefaultManager(api); await manager.initialize(); expect(api.getViewManager().setViewDefault).not.toBeCalled(); vi.runOnlyPendingTimers(); expect(api.getViewManager().setViewDefault).not.toBeCalled(); vi.mocked(api.getInteractionManager().hasInteraction).mockReturnValue(false); vi.runOnlyPendingTimers(); expect(api.getViewManager().setViewDefault).toBeCalledTimes(1); manager.uninitialize(); vi.runOnlyPendingTimers(); expect(api.getViewManager().setViewDefault).toBeCalledTimes(1); }); it('should not set default view when not configured', () => { const api = createCardAPI(); vi.mocked(api.getConfigManager().getConfig).mockReturnValue( createConfig({ view: { default_reset: { every_seconds: 0, }, }, }), ); vi.mocked(api.getInteractionManager().hasInteraction).mockReturnValue(false); vi.useFakeTimers(); const manager = new DefaultManager(api); manager.initialize(); expect(api.getViewManager().setViewDefault).not.toBeCalled(); vi.runOnlyPendingTimers(); expect(api.getViewManager().setViewDefault).not.toBeCalled(); }); it('should restart timer when reconfigured', async () => { const api = createCardAPI(); vi.mocked(api.getConfigManager().getConfig).mockReturnValue( createConfig({ view: { default_reset: { every_seconds: 10, }, }, }), ); vi.mocked(api.getInteractionManager().hasInteraction).mockReturnValue(false); const hass = createHASS(); const unsubcribeCallback = vi.fn(); vi.mocked(hass.connection.subscribeMessage).mockResolvedValue(unsubcribeCallback); vi.mocked(api.getHASSManager().getHASS).mockReturnValue(hass); vi.useFakeTimers(); const manager = new DefaultManager(api); await manager.initialize(); expect(api.getViewManager().setViewDefault).not.toBeCalled(); vi.runOnlyPendingTimers(); expect(api.getViewManager().setViewDefault).toBeCalled(); }); }); describe('state based', () => { it('should set default view when state changed', async () => { const api = createCardAPI(); vi.mocked(api.getConfigManager().getConfig).mockReturnValue( createConfig({ view: { default_reset: { every_seconds: 10, }, }, }), ); vi.mocked(api.getInteractionManager().hasInteraction).mockReturnValue(false); const hass = createHASS(); const unsubcribeCallback = vi.fn(); vi.mocked(hass.connection.subscribeMessage).mockResolvedValue(unsubcribeCallback); vi.mocked(api.getHASSManager().getHASS).mockReturnValue(hass); const manager = new DefaultManager(api); await manager.initialize(); callHASubscribeMessageHandler(hass, { variables: { trigger: { from_state: { entity_id: 'binary_sensor.foo', state: 'off', }, to_state: { entity_id: 'binary_sensor.foo', state: 'on', }, }, }, }); await manager.initialize(); expect(unsubcribeCallback).toBeCalledTimes(1); expect(api.getViewManager().setViewDefault).toBeCalledTimes(1); }); it('should not monitor state without config', async () => { const api = createCardAPI(); const hass = createHASS(); vi.mocked(api.getHASSManager().getHASS).mockReturnValue(hass); const manager = new DefaultManager(api); await manager.initialize(); const mock = vi.mocked(hass.connection.subscribeMessage).mock; expect(mock.calls.length).toBe(0); }); }); });