diff --git a/packages/auth/src/Domain/Setting/SettingDescription.ts b/packages/auth/src/Domain/Setting/SettingDescription.ts index 0067dd520..91e556de5 100644 --- a/packages/auth/src/Domain/Setting/SettingDescription.ts +++ b/packages/auth/src/Domain/Setting/SettingDescription.ts @@ -4,4 +4,5 @@ export type SettingDescription = { value: string sensitive: boolean serverEncryptionVersion: EncryptionVersion + replaceable: boolean } diff --git a/packages/auth/src/Domain/Setting/SettingsAssociationService.ts b/packages/auth/src/Domain/Setting/SettingsAssociationService.ts index 079e3323a..5894dbf38 100644 --- a/packages/auth/src/Domain/Setting/SettingsAssociationService.ts +++ b/packages/auth/src/Domain/Setting/SettingsAssociationService.ts @@ -52,6 +52,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: MuteSignInEmailsOption.NotMuted, + replaceable: false, }, ], [ @@ -60,6 +61,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: MuteMarketingEmailsOption.NotMuted, + replaceable: false, }, ], [ @@ -68,6 +70,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: LogSessionUserAgentOption.Enabled, + replaceable: false, }, ], ]) @@ -79,6 +82,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: LogSessionUserAgentOption.Disabled, + replaceable: false, }, ], ]) diff --git a/packages/auth/src/Domain/Setting/SubscriptionSettingService.spec.ts b/packages/auth/src/Domain/Setting/SubscriptionSettingService.spec.ts index 9ebdfb62e..aa4cfa558 100644 --- a/packages/auth/src/Domain/Setting/SubscriptionSettingService.spec.ts +++ b/packages/auth/src/Domain/Setting/SubscriptionSettingService.spec.ts @@ -60,6 +60,7 @@ describe('SubscriptionSettingService', () => { value: '0', sensitive: 0, serverEncryptionVersion: EncryptionVersion.Unencrypted, + replaceable: true, }, ], ]), @@ -80,6 +81,48 @@ describe('SubscriptionSettingService', () => { expect(subscriptionSettingRepository.save).toHaveBeenCalledWith(setting) }) + it('should not replace existing default settings for a subscription if it is not replaceable', async () => { + subscriptionSettingsAssociationService.getDefaultSettingsAndValuesForSubscriptionName = jest.fn().mockReturnValue( + new Map([ + [ + SubscriptionSettingName.FileUploadBytesUsed, + { + value: '0', + sensitive: 0, + serverEncryptionVersion: EncryptionVersion.Unencrypted, + replaceable: false, + }, + ], + ]), + ) + subscriptionSettingRepository.findLastByNameAndUserSubscriptionUuid = jest.fn().mockReturnValue(setting) + + await createService().applyDefaultSubscriptionSettingsForSubscription(userSubscription, SubscriptionName.PlusPlan) + + expect(subscriptionSettingRepository.save).not.toHaveBeenCalled() + }) + + it('should create default settings for a subscription if it is not replaceable and not existing', async () => { + subscriptionSettingsAssociationService.getDefaultSettingsAndValuesForSubscriptionName = jest.fn().mockReturnValue( + new Map([ + [ + SubscriptionSettingName.FileUploadBytesUsed, + { + value: '0', + sensitive: 0, + serverEncryptionVersion: EncryptionVersion.Unencrypted, + replaceable: false, + }, + ], + ]), + ) + subscriptionSettingRepository.findLastByNameAndUserSubscriptionUuid = jest.fn().mockReturnValue(null) + + await createService().applyDefaultSubscriptionSettingsForSubscription(userSubscription, SubscriptionName.PlusPlan) + + expect(subscriptionSettingRepository.save).toHaveBeenCalledWith(setting) + }) + it('should not create default settings for a subscription if subscription has no defaults', async () => { subscriptionSettingsAssociationService.getDefaultSettingsAndValuesForSubscriptionName = jest .fn() diff --git a/packages/auth/src/Domain/Setting/SubscriptionSettingService.ts b/packages/auth/src/Domain/Setting/SubscriptionSettingService.ts index bbfdcfc96..6d6e5d778 100644 --- a/packages/auth/src/Domain/Setting/SubscriptionSettingService.ts +++ b/packages/auth/src/Domain/Setting/SubscriptionSettingService.ts @@ -43,6 +43,15 @@ export class SubscriptionSettingService implements SubscriptionSettingServiceInt for (const settingName of defaultSettingsWithValues.keys()) { const setting = defaultSettingsWithValues.get(settingName) as SettingDescription + if (!setting.replaceable) { + const existingSetting = await this.subscriptionSettingRepository.findLastByNameAndUserSubscriptionUuid( + settingName, + userSubscription.uuid, + ) + if (existingSetting !== null) { + continue + } + } await this.createOrReplace({ userSubscription, diff --git a/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.spec.ts b/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.spec.ts index 3bfdf754d..3ebd0d76f 100644 --- a/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.spec.ts +++ b/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.spec.ts @@ -61,6 +61,7 @@ describe('SubscriptionSettingsAssociationService', () => { sensitive: false, serverEncryptionVersion: 0, value: '107374182400', + replaceable: true, }) }) @@ -88,6 +89,7 @@ describe('SubscriptionSettingsAssociationService', () => { sensitive: false, serverEncryptionVersion: 0, value: '104857600', + replaceable: true, }) }) diff --git a/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.ts b/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.ts index bc481a1b3..8850acb15 100644 --- a/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.ts +++ b/packages/auth/src/Domain/Setting/SubscriptionSettingsAssociationService.ts @@ -28,7 +28,7 @@ export class SubscriptionSettingsAssociationService implements SubscriptionSetti new Map([ [ SubscriptionSettingName.FileUploadBytesUsed, - { sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0' }, + { sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0', replaceable: false }, ], ]), ], @@ -37,7 +37,7 @@ export class SubscriptionSettingsAssociationService implements SubscriptionSetti new Map([ [ SubscriptionSettingName.FileUploadBytesUsed, - { sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0' }, + { sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0', replaceable: false }, ], ]), ], @@ -56,6 +56,7 @@ export class SubscriptionSettingsAssociationService implements SubscriptionSetti sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: (await this.getFileUploadLimit(subscriptionName)).toString(), + replaceable: true, }) return defaultSettings