standardnotes-app/packages/snjs/mocha/subscriptions.test.js

117 lines
4.1 KiB
JavaScript

import * as Factory from './lib/factory.js'
chai.use(chaiAsPromised)
const expect = chai.expect
describe('subscriptions', function () {
this.timeout(Factory.TwentySecondTimeout)
let application
let context
let subscriptionManager
afterEach(async function () {
await Factory.safeDeinit(application)
localStorage.clear()
})
beforeEach(async function () {
localStorage.clear()
context = await Factory.createAppContextWithFakeCrypto()
await context.launch()
application = context.application
subscriptionManager = context.application.subscriptionManager
const result = await Factory.registerUserToApplication({
application: application,
email: context.email,
password: context.password,
})
await Factory.publishMockedEvent('SUBSCRIPTION_PURCHASED', {
userEmail: context.email,
subscriptionId: 1,
subscriptionName: 'PRO_PLAN',
subscriptionExpiresAt: (new Date().getTime() + 3_600_000) * 1_000,
timestamp: Date.now(),
offline: false,
discountCode: null,
limitedDiscountPurchased: false,
newSubscriber: true,
totalActiveSubscriptionsCount: 1,
userRegisteredAt: 1,
billingFrequency: 12,
payAmount: 59.00
})
await Factory.sleep(2)
})
it('should invite a user by email to a shared subscription', async () => {
await subscriptionManager.inviteToSubscription('test@test.te')
const existingInvites = await subscriptionManager.listSubscriptionInvitations()
const newlyCreatedInvite = existingInvites.find(invite => invite.inviteeIdentifier === 'test@test.te')
expect(newlyCreatedInvite.status).to.equal('sent')
})
it('should not invite a user by email if the limit of shared subscription is breached', async () => {
await subscriptionManager.inviteToSubscription('test1@test.te')
await subscriptionManager.inviteToSubscription('test2@test.te')
await subscriptionManager.inviteToSubscription('test3@test.te')
await subscriptionManager.inviteToSubscription('test4@test.te')
await subscriptionManager.inviteToSubscription('test5@test.te')
let existingInvites = await subscriptionManager.listSubscriptionInvitations()
expect(existingInvites.length).to.equal(5)
expect(await subscriptionManager.inviteToSubscription('test6@test.te')).to.equal(false)
existingInvites = await subscriptionManager.listSubscriptionInvitations()
expect(existingInvites.length).to.equal(5)
})
it('should cancel a user invitation to a shared subscription', async () => {
await subscriptionManager.inviteToSubscription('test@test.te')
await subscriptionManager.inviteToSubscription('test2@test.te')
let existingInvites = await subscriptionManager.listSubscriptionInvitations()
expect (existingInvites.length).to.equal(2)
const newlyCreatedInvite = existingInvites.find(invite => invite.inviteeIdentifier === 'test@test.te')
await subscriptionManager.cancelInvitation(newlyCreatedInvite.uuid)
existingInvites = await subscriptionManager.listSubscriptionInvitations()
expect (existingInvites.length).to.equal(2)
expect(existingInvites.filter(invite => invite.status === 'canceled').length).to.equal(1)
})
it('should invite a user by email if the limit of shared subscription is restored', async () => {
await subscriptionManager.inviteToSubscription('test1@test.te')
await subscriptionManager.inviteToSubscription('test2@test.te')
await subscriptionManager.inviteToSubscription('test3@test.te')
await subscriptionManager.inviteToSubscription('test4@test.te')
await subscriptionManager.inviteToSubscription('test5@test.te')
let existingInvites = await subscriptionManager.listSubscriptionInvitations()
expect(existingInvites.length).to.equal(5)
await subscriptionManager.cancelInvitation(existingInvites[0].uuid)
expect(await subscriptionManager.inviteToSubscription('test6@test.te')).to.equal(true)
existingInvites = await subscriptionManager.listSubscriptionInvitations()
expect(existingInvites.find(invite => invite.inviteeIdentifier === 'test6@test.te')).not.to.equal(undefined)
})
})