diff --git a/meteor/server/migration/steps/X_X_X/ContainerIdsToObjectWithOverridesMigrationStep.ts b/meteor/server/migration/steps/X_X_X/ContainerIdsToObjectWithOverridesMigrationStep.ts index 45ef67b97bd..1ee095b064e 100644 --- a/meteor/server/migration/steps/X_X_X/ContainerIdsToObjectWithOverridesMigrationStep.ts +++ b/meteor/server/migration/steps/X_X_X/ContainerIdsToObjectWithOverridesMigrationStep.ts @@ -1,9 +1,6 @@ import { MigrationStepCore } from '@sofie-automation/meteor-lib/dist/migrations' import { Studios } from '../../../collections' -import { - convertObjectIntoOverrides, - ObjectWithOverrides, -} from '@sofie-automation/corelib/dist/settings/objectWithOverrides' +import { flatObjectToOverrides } from '@sofie-automation/corelib/dist/settings/objectWithOverrides' import { StudioPackageContainerSettings } from '@sofie-automation/shared-lib/dist/core/model/PackageContainer' export class ContainerIdsToObjectWithOverridesMigrationStep implements Omit { @@ -29,10 +26,21 @@ export class ContainerIdsToObjectWithOverridesMigrationStep implements Omit + const changedValues: Partial = {} + if (oldPreviewContainerIds && oldPreviewContainerIds.length > 0) { + changedValues.previewContainerIds = oldPreviewContainerIds + } + if (oldThumbnailContainerIds && oldThumbnailContainerIds.length > 0) { + changedValues.thumbnailContainerIds = oldThumbnailContainerIds + } + + const newPackageContainers = flatObjectToOverrides( + { + previewContainerIds: [], + thumbnailContainerIds: [], + }, + changedValues + ) await Studios.updateAsync(studio._id, { $set: { diff --git a/meteor/server/migration/steps/X_X_X/__tests__/ContainerIdsToObjectWithOverridesMigrationStep.test.ts b/meteor/server/migration/steps/X_X_X/__tests__/ContainerIdsToObjectWithOverridesMigrationStep.test.ts index 3042b10c63e..4cdf9fccd00 100644 --- a/meteor/server/migration/steps/X_X_X/__tests__/ContainerIdsToObjectWithOverridesMigrationStep.test.ts +++ b/meteor/server/migration/steps/X_X_X/__tests__/ContainerIdsToObjectWithOverridesMigrationStep.test.ts @@ -28,7 +28,10 @@ describe('ContainerIdsToObjectWithOverridesMigrationStep', () => { const studio = await Studios.findOneAsync(protectString('studio0')) expect(studio).toBeTruthy() expect(studio?.packageContainerSettingsWithOverrides).toMatchObject({ - defaults: {}, + defaults: { + previewContainerIds: [], + thumbnailContainerIds: [], + }, overrides: [ { op: 'set', path: 'previewContainerIds', value: ['preview1'] }, { op: 'set', path: 'thumbnailContainerIds', value: ['thumb1'] }, @@ -60,11 +63,11 @@ describe('ContainerIdsToObjectWithOverridesMigrationStep', () => { const studio = await Studios.findOneAsync(protectString('studio1')) expect(studio).toBeTruthy() expect(studio?.packageContainerSettingsWithOverrides).toMatchObject({ - defaults: {}, - overrides: [ - { op: 'set', path: 'previewContainerIds', value: [] }, - { op: 'set', path: 'thumbnailContainerIds', value: [] }, - ], + defaults: { + previewContainerIds: [], + thumbnailContainerIds: [], + }, + overrides: [], }) const validateResultAfter = await step.validate() diff --git a/packages/corelib/src/settings/objectWithOverrides.ts b/packages/corelib/src/settings/objectWithOverrides.ts index 59a015d7164..f5866ad8dc8 100644 --- a/packages/corelib/src/settings/objectWithOverrides.ts +++ b/packages/corelib/src/settings/objectWithOverrides.ts @@ -80,6 +80,30 @@ export function convertObjectIntoOverrides( return result } +/** + * Create ObjectWithOverrides with specified defaults and overrides for changed properties + */ +export function flatObjectToOverrides( + defaults: T, + changedValues: Partial +): ObjectWithOverrides { + const result = wrapDefaultObject(defaults) + + for (const [key, value] of Object.entries(changedValues)) { + if (value !== undefined) { + result.overrides.push( + literal({ + op: 'set', + path: key, + value: value, + }) + ) + } + } + + return result +} + /** * Update the ObjectWithOverrides overrides values from a flat object. * If there is an exiting override for a value update the override value if required.