diff --git a/packages/snjs/mocha/lib/AppContext.js b/packages/snjs/mocha/lib/AppContext.js index 741e23ffd..cb290808b 100644 --- a/packages/snjs/mocha/lib/AppContext.js +++ b/packages/snjs/mocha/lib/AppContext.js @@ -679,6 +679,10 @@ export class AppContext { options.expiresAt = options.expiresAt || dateInAnHour options.subscriptionPlanName = options.subscriptionPlanName || 'PRO_PLAN' + options.cancelPreviousSubscription = options.cancelPreviousSubscription || false + + const nextSubscriptionId = GlobalSubscriptionIdCounter++ + let uploadBytesLimit = -1 switch (options.subscriptionPlanName) { case 'PLUS_PLAN': @@ -690,9 +694,27 @@ export class AppContext { } try { + if (options.cancelPreviousSubscription) { + await Events.publishMockedEvent('SUBSCRIPTION_CANCELLED', { + userEmail: this.email, + subscriptionId: (nextSubscriptionId - 1), + subscriptionName: options.subscriptionPlanName, + subscriptionCreatedAt: 1, + subscriptionUpdatedAt: 1, + lastPayedAt: 1, + subscriptionEndsAt: (new Date()).getTime() * 1_000, + timestamp: (new Date()).getTime() * 1_000, + offline: false, + replaced: true, + userExistingSubscriptionsCount: 1, + billingFrequency: 12, + payAmount: 59.0, + }) + } + await Events.publishMockedEvent('SUBSCRIPTION_PURCHASED', { userEmail: this.email, - subscriptionId: GlobalSubscriptionIdCounter++, + subscriptionId: nextSubscriptionId, subscriptionName: options.subscriptionPlanName, subscriptionExpiresAt: options.expiresAt.getTime() * 1_000, timestamp: Date.now(), @@ -713,7 +735,7 @@ export class AppContext { ) try { - await HomeServer.activatePremiumFeatures(this.email, options.subscriptionPlanName, options.expiresAt, uploadBytesLimit) + await HomeServer.activatePremiumFeatures(this.email, nextSubscriptionId, options.subscriptionPlanName, options.expiresAt, uploadBytesLimit, options.cancelPreviousSubscription) await this.sleep(1, 'Waiting for premium features to be activated') } catch (error) { diff --git a/packages/snjs/mocha/lib/HomeServer.js b/packages/snjs/mocha/lib/HomeServer.js index bf8cdb2c4..ea95e1ed1 100644 --- a/packages/snjs/mocha/lib/HomeServer.js +++ b/packages/snjs/mocha/lib/HomeServer.js @@ -1,6 +1,13 @@ import * as Defaults from './Defaults.js' -export async function activatePremiumFeatures(username, subscriptionPlanName, endsAt, uploadBytesLimit) { +export async function activatePremiumFeatures( + username, + subscriptionId, + subscriptionPlanName, + endsAt, + uploadBytesLimit, + cancelPreviousSubscription +) { await fetch(`${Defaults.getDefaultHost()}/e2e/activate-premium`, { method: 'POST', headers: { @@ -9,9 +16,11 @@ export async function activatePremiumFeatures(username, subscriptionPlanName, en }, body: JSON.stringify({ username, + subscriptionId, subscriptionPlanName, endsAt, uploadBytesLimit, + cancelPreviousSubscription, }), }) } diff --git a/packages/snjs/mocha/settings.test.js b/packages/snjs/mocha/settings.test.js index 115541510..76db11e12 100644 --- a/packages/snjs/mocha/settings.test.js +++ b/packages/snjs/mocha/settings.test.js @@ -163,9 +163,13 @@ describe('settings service', function () { ) expect(usedSettingBefore).to.equal('196') - await context.activatePaidSubscriptionForUser() + await context.activatePaidSubscriptionForUser({ + cancelPreviousSubscription: true, + }) - await context.activatePaidSubscriptionForUser() + await context.activatePaidSubscriptionForUser({ + cancelPreviousSubscription: true, + }) const limitSettingAfter = await application.settings.getSubscriptionSetting( SettingName.create(SettingName.NAMES.FileUploadBytesLimit).getValue(), @@ -176,5 +180,22 @@ describe('settings service', function () { SettingName.create(SettingName.NAMES.FileUploadBytesUsed).getValue(), ) expect(usedSettingAfter).to.equal(usedSettingBefore) + + const afterResponse = await fetch('/packages/snjs/mocha/assets/small_file.md') + const afterBuffer = new Uint8Array(await afterResponse.arrayBuffer()) + + await Files.uploadFile(application.files, afterBuffer, 'my-file', 'md', 1000) + + await Factory.sleep(1) + + const limitSettingAfterSecondUpload = await application.settings.getSubscriptionSetting( + SettingName.create(SettingName.NAMES.FileUploadBytesLimit).getValue(), + ) + expect(limitSettingAfterSecondUpload).to.equal(limitSettingBefore) + + const usedSettingAfterSecondUpload = await application.settings.getSubscriptionSetting( + SettingName.create(SettingName.NAMES.FileUploadBytesUsed).getValue(), + ) + expect(usedSettingAfterSecondUpload).to.equal('392') }) })