Convert conditions to HA style.
This commit is contained in:
+654
-10
@@ -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,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user