perf: Only trigger a state change if the state is definitely different (#1569)

This commit is contained in:
Dermot Duffy
2024-09-22 13:18:50 -07:00
committed by GitHub
parent 716a33fb96
commit a4417e8a3d
2 changed files with 64 additions and 2 deletions
@@ -429,6 +429,60 @@ describe('ConditionsManager', () => {
expect(manager.getState()).toEqual(state);
});
describe('should set state', () => {
it('should set and be able to get it again', () => {
const state = {
fullscreen: true,
};
const manager = new ConditionsManager(createCardAPI());
manager.setState(state);
expect(manager.getState()).toEqual(state);
});
it('should set but only trigger when necessary', () => {
const state_1 = {
fullscreen: true,
state: {
'binary_sensor.foo': createStateEntity(),
},
};
const listener = vi.fn();
const manager = new ConditionsManager(createCardAPI(), listener);
manager.setState(state_1);
expect(listener).toBeCalledTimes(1);
manager.setState(state_1);
expect(listener).toBeCalledTimes(1);
manager.setState({ fullscreen: true });
expect(listener).toBeCalledTimes(1);
manager.setState({
state: {
'binary_sensor.foo': createStateEntity(),
},
});
expect(listener).toBeCalledTimes(1);
manager.setState({ fullscreen: false });
expect(listener).toBeCalledTimes(2);
manager.setState({ fullscreen: false });
expect(listener).toBeCalledTimes(2);
manager.setState({
state: {
'binary_sensor.foo': createStateEntity({ state: 'off' }),
},
});
expect(listener).toBeCalledTimes(3);
});
});
describe('should handle hasHAStateConditions', () => {
beforeEach(() => {
vi.spyOn(window, 'matchMedia').mockReturnValueOnce({