diff --git a/infrastructure/mongodb/mongo-init.js b/infrastructure/mongodb/mongo-init.js index 528adb71..08cb576e 100644 --- a/infrastructure/mongodb/mongo-init.js +++ b/infrastructure/mongodb/mongo-init.js @@ -76,6 +76,9 @@ db.tiers.insertMany([ cli: { enabled: false, }, + rclone: { + enabled: false, + }, darkMonitor: { enabled: false, }, @@ -126,6 +129,9 @@ db.tiers.insertMany([ cli: { enabled: false, }, + rclone: { + enabled: false, + }, darkMonitor: { enabled: false, }, @@ -177,6 +183,9 @@ db.tiers.insertMany([ cli: { enabled: false, }, + rclone: { + enabled: false, + }, darkMonitor: { enabled: true, }, @@ -228,6 +237,9 @@ db.tiers.insertMany([ cli: { enabled: true, }, + rclone: { + enabled: true, + }, darkMonitor: { enabled: true, }, @@ -279,6 +291,9 @@ db.tiers.insertMany([ cli: { enabled: true, }, + rclone: { + enabled: false, + }, darkMonitor: { enabled: true, }, @@ -330,6 +345,9 @@ db.tiers.insertMany([ cli: { enabled: false, }, + rclone: { + enabled: false, + }, darkMonitor: { enabled: false, }, @@ -381,6 +399,9 @@ db.tiers.insertMany([ cli: { enabled: false, }, + rclone: { + enabled: false, + }, darkMonitor: { enabled: true, }, @@ -432,6 +453,9 @@ db.tiers.insertMany([ cli: { enabled: true, }, + rclone: { + enabled: true, + }, darkMonitor: { enabled: true, }, @@ -483,6 +507,9 @@ db.tiers.insertMany([ cli: { enabled: true, }, + rclone: { + enabled: true, + }, darkMonitor: { enabled: true, }, diff --git a/src/controller/gateway.controller.ts b/src/controller/gateway.controller.ts index 6e965dcf..97b06498 100644 --- a/src/controller/gateway.controller.ts +++ b/src/controller/gateway.controller.ts @@ -42,7 +42,7 @@ export function gatewayController({ properties: { feature: { type: 'string', - enum: [Service.Antivirus, Service.Backups, Service.Cleaner, Service.Cli], + enum: [Service.Antivirus, Service.Backups, Service.Cleaner, Service.Cli, Service.rClone], }, userUuid: { type: 'string', diff --git a/src/core/users/Tier.ts b/src/core/users/Tier.ts index 47abd071..7e593410 100644 --- a/src/core/users/Tier.ts +++ b/src/core/users/Tier.ts @@ -51,6 +51,10 @@ interface CliFeatures { enabled: boolean; } +interface RCloneFeatures { + enabled: boolean; +} + export enum Service { Drive = 'drive', Backups = 'backups', @@ -61,6 +65,7 @@ export enum Service { Cli = 'cli', Cleaner = 'cleaner', darkMonitor = 'darkMonitor', + rClone = 'rclone', } export interface Tier { @@ -78,5 +83,6 @@ export interface Tier { [Service.Cleaner]: CleanerFeatures; [Service.darkMonitor]: DarkMonitorFeatures; [Service.Cli]: CliFeatures; + [Service.rClone]: RCloneFeatures; }; } diff --git a/src/services/userFeaturesOverride.service.ts b/src/services/userFeaturesOverride.service.ts index 186317d5..c0959703 100644 --- a/src/services/userFeaturesOverride.service.ts +++ b/src/services/userFeaturesOverride.service.ts @@ -34,17 +34,17 @@ export class UserFeaturesOverridesService { break; case Service.Cli: - await this.usersService.overrideDriveLimit({ userUuid, feature: Service.Cli, enabled: true }); + case Service.rClone: + await this.usersService.overrideDriveLimit({ userUuid, feature: service, enabled: true }); await this.userFeatureOverridesRepository.upsert({ userId: userId, featuresPerService: { - [Service.Cli]: { + [service]: { enabled: true, }, }, }); - break; default: diff --git a/src/services/users.service.ts b/src/services/users.service.ts index 0be08e3d..ddec4ec5 100644 --- a/src/services/users.service.ts +++ b/src/services/users.service.ts @@ -21,7 +21,7 @@ function signToken(duration: string, secret: string) { }); } -type OverrideServiceAvailable = Service.Cli; +type OverrideServiceAvailable = Service.Cli | Service.rClone; export class UsersService { constructor( diff --git a/tests/src/fixtures.ts b/tests/src/fixtures.ts index 6f2a492e..817d6cb8 100644 --- a/tests/src/fixtures.ts +++ b/tests/src/fixtures.ts @@ -612,6 +612,7 @@ export const newTier = (params?: Partial): Tier => { backups: { enabled: false }, cleaner: { enabled: false }, cli: { enabled: false }, + rclone: { enabled: false }, drive: { enabled: false, foreignTierId: randomUUID(), diff --git a/tests/src/services/products.service.test.ts b/tests/src/services/products.service.test.ts index 0df7710c..82339c58 100644 --- a/tests/src/services/products.service.test.ts +++ b/tests/src/services/products.service.test.ts @@ -124,6 +124,7 @@ describe('Products Service Tests', () => { [Service.darkMonitor]: { enabled: false }, [Service.Cleaner]: { enabled: false }, [Service.Cli]: { enabled: false }, + [Service.rClone]: { enabled: false }, }, }); @@ -161,6 +162,7 @@ describe('Products Service Tests', () => { [Service.darkMonitor]: { enabled: true }, [Service.Cleaner]: { enabled: true }, [Service.Cli]: { enabled: true }, + [Service.rClone]: { enabled: true }, }, }); @@ -330,6 +332,7 @@ describe('Products Service Tests', () => { [Service.darkMonitor]: { enabled: false }, [Service.Cleaner]: { enabled: false }, [Service.Cli]: { enabled: false }, + [Service.rClone]: { enabled: false }, }, }); diff --git a/tests/src/services/userFeaturesOverride.service.test.ts b/tests/src/services/userFeaturesOverride.service.test.ts index ad17c40f..42900010 100644 --- a/tests/src/services/userFeaturesOverride.service.test.ts +++ b/tests/src/services/userFeaturesOverride.service.test.ts @@ -131,6 +131,32 @@ describe('User Tier Override', () => { expect(upsertSpy).not.toHaveBeenCalled(); expect(overrideDriveLimitSpy).not.toHaveBeenCalled(); }); + + test('When the service is rClone, then the service should be enabled', async () => { + const mockedUser = getUser(); + const rCloneService = Service.rClone; + const upsertPayload = { + userId: mockedUser.id, + featuresPerService: { + [rCloneService]: { + enabled: true, + }, + }, + }; + const findByUserIdSpy = jest.spyOn(userFeatureOverridesRepository, 'findByUserId').mockResolvedValue(null); + const upsertSpy = jest.spyOn(userFeatureOverridesRepository, 'upsert').mockResolvedValue(); + const overrideDriveLimitSpy = jest.spyOn(usersService, 'overrideDriveLimit').mockResolvedValue(); + + await userFeaturesOverridesService.upsertCustomUserFeatures(mockedUser, rCloneService); + + expect(findByUserIdSpy).toHaveBeenCalledWith(mockedUser.id); + expect(upsertSpy).toHaveBeenCalledWith(upsertPayload); + expect(overrideDriveLimitSpy).toHaveBeenCalledWith({ + userUuid: mockedUser.uuid, + feature: Service.rClone, + enabled: true, + }); + }); }); describe('Get the custom user features', () => {