From 99b155cbf1bd9f94b00ce7c273d91a828e4757b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20S=C3=B3jko?= Date: Tue, 8 Aug 2023 09:41:16 +0200 Subject: [PATCH] chore: add e2e coverage for shared vault creation limitations (#2395) --- .../SharedVaults/UseCase/CreateSharedVault.ts | 2 +- .../snjs/mocha/TestRegistry/VaultTests.js | 1 + packages/snjs/mocha/vaults/limits.test.js | 73 +++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 packages/snjs/mocha/vaults/limits.test.js diff --git a/packages/services/src/Domain/SharedVaults/UseCase/CreateSharedVault.ts b/packages/services/src/Domain/SharedVaults/UseCase/CreateSharedVault.ts index a40ea8e51..23ed45ccb 100644 --- a/packages/services/src/Domain/SharedVaults/UseCase/CreateSharedVault.ts +++ b/packages/services/src/Domain/SharedVaults/UseCase/CreateSharedVault.ts @@ -35,7 +35,7 @@ export class CreateSharedVault { const serverResult = await this.sharedVaultServer.createSharedVault() if (isErrorResponse(serverResult)) { - return ClientDisplayableError.FromString(`Failed to create shared vault ${JSON.stringify(serverResult)}`) + return ClientDisplayableError.FromString(`Failed to create shared vault: ${serverResult.data.error?.message}`) } const serverVaultHash = serverResult.data.sharedVault diff --git a/packages/snjs/mocha/TestRegistry/VaultTests.js b/packages/snjs/mocha/TestRegistry/VaultTests.js index 3b3437321..dbea914f3 100644 --- a/packages/snjs/mocha/TestRegistry/VaultTests.js +++ b/packages/snjs/mocha/TestRegistry/VaultTests.js @@ -20,5 +20,6 @@ export const VaultTests = { 'vaults/permissions.test.js', 'vaults/key-rotation.test.js', 'vaults/files.test.js', + 'vaults/limits.test.js', ], } diff --git a/packages/snjs/mocha/vaults/limits.test.js b/packages/snjs/mocha/vaults/limits.test.js new file mode 100644 index 000000000..be8b819a1 --- /dev/null +++ b/packages/snjs/mocha/vaults/limits.test.js @@ -0,0 +1,73 @@ +import * as Factory from '../lib/factory.js' +import * as Collaboration from '../lib/Collaboration.js' + +chai.use(chaiAsPromised) +const expect = chai.expect + +describe('shared vault limits', function () { + this.timeout(Factory.TwentySecondTimeout) + + let context + + beforeEach(async function () { + localStorage.clear() + + context = await Factory.createVaultsContextWithRealCrypto() + + await context.launch() + await context.register() + }) + + afterEach(async function () { + await context.deinit() + localStorage.clear() + sinon.restore() + }) + + describe('free users', () => { + it('should not allow creating vaults over the limit', async () => { + const firstSharedVault = await Collaboration.createSharedVault(context) + expect(firstSharedVault).to.not.be.null + + let caughtError = null + try { + await Collaboration.createSharedVault(context) + } catch (error) { + caughtError = error + } + + expect(caughtError.message).to.equal('Failed to create shared vault: You have reached the limit of shared vaults for your account.') + }) + }) + + describe('plus users', () => { + it('should not allow creating vaults over the limit', async () => { + context.activatePaidSubscriptionForUser({ subscriptionPlanName: 'PLUS_PLAN' }) + + for (let i = 0; i < 3; i++) { + const vault = await Collaboration.createSharedVault(context) + expect(vault).to.not.be.null + } + + let caughtError = null + try { + await Collaboration.createSharedVault(context) + } catch (error) { + caughtError = error + } + + expect(caughtError.message).to.equal('Failed to create shared vault: You have reached the limit of shared vaults for your account.') + }) + }) + + describe('pro users', () => { + it('should allow creating vaults without limit', async () => { + context.activatePaidSubscriptionForUser() + + for (let i = 0; i < 10; i++) { + const vault = await Collaboration.createSharedVault(context) + expect(vault).to.not.be.null + } + }) + }) +})