refactor: Significantly refactor how conditions work internally (#1886)

- Much improved API cleanliness and testability to allow further
extensibility in future
 - Simplified code in `live` view

This technically contains a small change in how overrides work in the
`live` view. Since that change is _closer_ to the documentation, and
since this is likely to be rarely used, this is not considered a
breaking change. Previously, overrides for a given live camera would
always render _as if_ that camera was selected, vs was actually
selected. Now, overrides will only apply in the live view when the
camera is _actually_ selected. If this is an issue for you in practice,
lets discuss.
This commit is contained in:
Dermot Duffy
2025-02-11 20:07:55 -08:00
committed by GitHub
parent a92074bc8d
commit 8d3cf07b43
51 changed files with 2443 additions and 2118 deletions
+13 -26
View File
@@ -47,35 +47,22 @@ describe('HASSManager', () => {
expect(api.getStyleManager().applyTheme).toBeCalled();
});
describe('should set condition manager state', () => {
it('positively', () => {
const api = createCardAPI();
const manager = new HASSManager(api);
vi.mocked(api.getConditionsManager().hasHAStateConditions).mockReturnValue(true);
it('should set condition manager state', () => {
const api = createCardAPI();
const manager = new HASSManager(api);
const states = { 'switch.foo': createStateEntity() };
const user = createUser({ id: 'user_1' });
const hass = createHASS(states, user);
const states = { 'switch.foo': createStateEntity() };
const user = createUser({ id: 'user_1' });
const hass = createHASS(states, user);
manager.setHASS(hass);
manager.setHASS(hass);
expect(api.getConditionsManager().setState).toBeCalledWith(
expect.objectContaining({
state: states,
user: user,
}),
);
});
it('negatively', () => {
const api = createCardAPI();
const manager = new HASSManager(api);
vi.mocked(api.getConditionsManager().hasHAStateConditions).mockReturnValue(false);
manager.setHASS(createHASS());
expect(api.getConditionsManager().setState).not.toBeCalled();
});
expect(api.getConditionStateManager().setState).toBeCalledWith(
expect.objectContaining({
state: states,
user: user,
}),
);
});
describe('should handle connection state change when', () => {