Files
streamdeck-homeassistant/test/models/settings/settings.test.ts
2025-02-22 02:30:18 -05:00

142 lines
5.4 KiB
TypeScript

import { expect, it } from 'vitest'
import { IconSettings, type LegacySettings, migrateSettings } from '@/models/settings/settings'
it('test settings v1 migration', () => {
const settingsV1: LegacySettings = {
version: 1,
domain: 'switch',
entityId: 'my_test_switch',
useCustomTitle: true,
buttonTitle: 'My Switch',
enableServiceIndicator: true,
hideIcon: true,
useCustomButtonLabels: true,
buttonLabels: 'On/Off',
useStateImagesForOnOffStates: true,
service: {
id: 'turn_on',
data: "{ data: 'on' }"
},
serviceLongPress: {
id: 'turn_off',
data: "{ data: 'off' }"
}
}
const migratedSettings = migrateSettings(settingsV1)
expect(migratedSettings.version).toBe(5)
expect(migratedSettings.display.entityId).toBe(`${settingsV1.domain}.${settingsV1.entityId}`)
expect(migratedSettings.display.useCustomTitle).toBe(settingsV1.useCustomTitle)
expect(migratedSettings.display.buttonTitle).toBe(settingsV1.buttonTitle)
expect(migratedSettings.display.enableServiceIndicator).toBe(settingsV1.enableServiceIndicator)
expect(migratedSettings.display.iconSettings).toBe(IconSettings.HIDE)
expect(migratedSettings.display.useCustomButtonLabels).toBe(settingsV1.useCustomButtonLabels)
expect(migratedSettings.display.buttonLabels).toBe(settingsV1.buttonLabels)
expect(migratedSettings.button.serviceShortPress.serviceId).toBe(
`${settingsV1.domain}.${settingsV1.service.id}`
)
expect(migratedSettings.button.serviceShortPress.entityId).toBe(
`${settingsV1.domain}.${settingsV1.entityId}`
)
expect(migratedSettings.button.serviceShortPress.serviceData).toBe(settingsV1.service.data)
expect(migratedSettings.button.serviceLongPress.serviceId).toBe(
`${settingsV1.domain}.${settingsV1.serviceLongPress.id}`
)
expect(migratedSettings.button.serviceLongPress.entityId).toBe(
`${settingsV1.domain}.${settingsV1.entityId}`
)
expect(migratedSettings.button.serviceLongPress.serviceData).toBe(
settingsV1.serviceLongPress.data
)
})
it('test settings v4 migration', () => {
const settingsV4: LegacySettings = {
version: 4,
display: {
entityId: 'test.entity_id',
useCustomTitle: false,
buttonTitle: 'My Test Entity',
enableServiceIndicator: false,
hideIcon: false,
useCustomButtonLabels: false,
buttonLabels: 'My Button Label',
useStateImagesForOnOffStates: false
},
button: {
serviceShortPress: {
entityId: 'test.short_press_entity_id',
serviceId: 'test.short_press_service_id',
serviceData: "{ data: 'short_press' }"
},
serviceLongPress: {
entityId: 'test.long_press_entity_id',
serviceId: 'test.long_press_service_id',
serviceData: "{ data: 'long_press' }"
},
serviceRotation: {
entityId: 'test.rotation_entity_id',
serviceId: 'test.rotation_service_id',
serviceData: "{ data: 'rotation' }"
},
serviceTap: {
entityId: 'test.tap_entity_id',
serviceId: 'test.tap_service_id',
serviceData: "{ data: 'tap' }"
}
},
controllerType: 'Encoder',
rotationTickMultiplier: 12,
rotationTickBucketSizeMs: 570
}
const migratedSettings = migrateSettings(settingsV4)
expect(migratedSettings.version).toBe(5)
expect(migratedSettings.display.entityId).toBe(settingsV4.display.entityId)
expect(migratedSettings.display.useCustomTitle).toBe(settingsV4.display.useCustomTitle)
expect(migratedSettings.display.buttonTitle).toBe(settingsV4.display.buttonTitle)
expect(migratedSettings.display.enableServiceIndicator).toBe(
settingsV4.display.enableServiceIndicator
)
expect(migratedSettings.display.iconSettings).toBe(IconSettings.PREFER_PLUGIN)
expect(migratedSettings.display.useCustomButtonLabels).toBe(
settingsV4.display.useCustomButtonLabels
)
expect(migratedSettings.display.buttonLabels).toBe(settingsV4.display.buttonLabels)
expect(migratedSettings.button.serviceShortPress.serviceId).toBe(
settingsV4.button.serviceShortPress.serviceId
)
expect(migratedSettings.button.serviceShortPress.entityId).toBe(
settingsV4.button.serviceShortPress.entityId
)
expect(migratedSettings.button.serviceShortPress.serviceData).toBe(
settingsV4.button.serviceShortPress.serviceData
)
expect(migratedSettings.button.serviceLongPress.serviceId).toBe(
settingsV4.button.serviceLongPress.serviceId
)
expect(migratedSettings.button.serviceLongPress.entityId).toBe(
settingsV4.button.serviceLongPress.entityId
)
expect(migratedSettings.button.serviceLongPress.serviceData).toBe(
settingsV4.button.serviceLongPress.serviceData
)
expect(migratedSettings.button.serviceRotation.serviceId).toBe(
settingsV4.button.serviceRotation.serviceId
)
expect(migratedSettings.button.serviceRotation.entityId).toBe(
settingsV4.button.serviceRotation.entityId
)
expect(migratedSettings.button.serviceRotation.serviceData).toBe(
settingsV4.button.serviceRotation.serviceData
)
expect(migratedSettings.button.serviceTap.serviceId).toBe(settingsV4.button.serviceTap.serviceId)
expect(migratedSettings.button.serviceTap.entityId).toBe(settingsV4.button.serviceTap.entityId)
expect(migratedSettings.button.serviceTap.serviceData).toBe(
settingsV4.button.serviceTap.serviceData
)
expect(migratedSettings.rotationTickMultiplier).toBe(settingsV4.rotationTickMultiplier)
expect(migratedSettings.rotationTickBucketSizeMs).toBe(settingsV4.rotationTickBucketSizeMs)
})