Convert conditions to HA style.

This commit is contained in:
Dermot Duffy
2024-03-10 18:09:17 -07:00
parent ff78cc51a1
commit 829f411acc
11 changed files with 1334 additions and 476 deletions
+654 -10
View File
@@ -377,9 +377,12 @@ describe('should handle version specific upgrades', () => {
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: {
media_loaded: true,
},
conditions: [
{
condition: 'media_loaded' as const,
media_loaded: true,
},
],
},
{
conditions: 'not an object',
@@ -411,9 +414,12 @@ describe('should handle version specific upgrades', () => {
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: {
media_loaded: true,
},
conditions: [
{
condition: 'media_loaded' as const,
media_loaded: true,
},
],
overrides: {
view: {
default: 'clips',
@@ -1020,10 +1026,16 @@ describe('should handle version specific upgrades', () => {
elements: [
{
type: 'custom:frigate-card-conditional',
conditions: {
fullscreen: true,
media_loaded: true,
},
conditions: [
{
condition: 'fullscreen' as const,
fullscreen: true,
},
{
condition: 'media_loaded' as const,
media_loaded: true,
},
],
elements: [
{
type: 'service-button',
@@ -1793,4 +1805,636 @@ describe('should handle version specific upgrades', () => {
});
});
});
describe('from condition object to condition array', () => {
describe('with view condition', () => {
it('elements', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: {
view: ['clips', 'snapshots'],
},
},
{
conditions: 'not an object',
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: [
{
condition: 'view' as const,
views: ['clips', 'snapshots'],
},
],
},
{
conditions: 'not an object',
},
],
});
});
it('overrides', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: {
view: ['clips', 'snapshots'],
},
overrides: {
view: {
default: 'clips',
},
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: [
{
condition: 'view' as const,
views: ['clips', 'snapshots'],
},
],
overrides: {
view: {
default: 'clips',
},
},
},
],
});
});
it('automations', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: {
view: ['clips', 'snapshots'],
},
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: [
{
condition: 'view' as const,
views: ['clips', 'snapshots'],
},
],
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
});
});
});
describe('with camera condition', () => {
it('elements', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: {
camera: ['camera_1', 'camera_2'],
},
},
{
conditions: 'not an object',
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: [
{
condition: 'camera' as const,
cameras: ['camera_1', 'camera_2'],
},
],
},
{
conditions: 'not an object',
},
],
});
});
it('overrides', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: {
camera: ['camera_1', 'camera_2'],
},
overrides: {
view: {
default: 'clips',
},
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: [
{
condition: 'camera' as const,
cameras: ['camera_1', 'camera_2'],
},
],
overrides: {
view: {
default: 'clips',
},
},
},
],
});
});
it('automations', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: {
camera: ['camera_1', 'camera_2'],
},
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: [
{
condition: 'camera' as const,
cameras: ['camera_1', 'camera_2'],
},
],
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
});
});
});
describe('with boolean conditions', () => {
describe.each([
['fullscreen' as const],
['expand' as const],
['media_loaded' as const],
])('%s', (condition: string) => {
it('elements', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: {
[condition]: true,
},
},
{
conditions: 'not an object',
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: [
{
condition: condition,
[condition]: true,
},
],
},
{
conditions: 'not an object',
},
],
});
});
it('overrides', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: {
[condition]: true,
},
overrides: {
view: {
default: 'clips',
},
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: [
{
condition: condition,
[condition]: true,
},
],
overrides: {
view: {
default: 'clips',
},
},
},
],
});
});
it('automations', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: {
[condition]: true,
},
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: [
{
condition: condition,
[condition]: true,
},
],
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
});
});
});
});
describe('with state condition', () => {
it('elements', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: {
state: [
{
entity: 'binary_sensor.first',
state: 'on',
},
{
entity: 'binary_sensor.second',
state_not: 'off',
},
{},
],
},
},
{
conditions: 'not an object',
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: [
{
condition: 'state' as const,
entity: 'binary_sensor.first',
state: 'on',
},
{
condition: 'state' as const,
entity: 'binary_sensor.second',
state_not: 'off',
},
],
},
{
conditions: 'not an object',
},
],
});
});
it('overrides', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: {
state: [
{
entity: 'binary_sensor.first',
state: 'on',
},
{
entity: 'binary_sensor.second',
state_not: 'off',
},
{},
],
},
overrides: {
view: {
default: 'clips',
},
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: [
{
condition: 'state' as const,
entity: 'binary_sensor.first',
state: 'on',
},
{
condition: 'state' as const,
entity: 'binary_sensor.second',
state_not: 'off',
},
],
overrides: {
view: {
default: 'clips',
},
},
},
],
});
});
it('automations', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: {
state: [
{
entity: 'binary_sensor.first',
state: 'on',
},
{
entity: 'binary_sensor.second',
state_not: 'off',
},
{},
],
},
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: [
{
condition: 'state' as const,
entity: 'binary_sensor.first',
state: 'on',
},
{
condition: 'state' as const,
entity: 'binary_sensor.second',
state_not: 'off',
},
],
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
});
});
});
describe('with media query condition', () => {
it('elements', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: {
media_query: 'query',
},
},
{
conditions: 'not an object',
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
elements: [
{
conditions: [
{
condition: 'screen' as const,
media_query: 'query',
},
],
},
{
conditions: 'not an object',
},
],
});
});
it('overrides', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: {
media_query: 'query',
},
overrides: {
view: {
default: 'clips',
},
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
overrides: [
{
conditions: [
{
condition: 'screen' as const,
media_query: 'query',
},
],
overrides: {
view: {
default: 'clips',
},
},
},
],
});
});
it('automations', () => {
const config = {
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: {
media_query: 'query',
},
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
};
expect(upgradeConfig(config)).toBeTruthy();
expect(config).toEqual({
type: 'custom:frigate-card',
cameras: [{ camera_entity: 'camera.office' }],
automations: [
{
conditions: [
{
condition: 'screen' as const,
media_query: 'query',
},
],
actions: {
action: 'custom:frigate-card-action' as const,
frigate_card_action: 'live_substream_on' as const,
},
},
],
});
});
});
});
});