77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
|
const {agentProvider, mockManager, fixtureManager, matchers} = require('../../utils/e2e-framework');
|
||
|
const nock = require('nock');
|
||
|
|
||
|
let membersAgent, adminAgent, membersService;
|
||
|
|
||
|
describe('Create Stripe Checkout Session', function () {
|
||
|
before(async function () {
|
||
|
const agents = await agentProvider.getAgentsForMembers();
|
||
|
membersAgent = agents.membersAgent;
|
||
|
adminAgent = agents.adminAgent;
|
||
|
|
||
|
membersService = require('../../../core/server/services/members');
|
||
|
|
||
|
await fixtureManager.init('members');
|
||
|
await adminAgent.loginAsOwner();
|
||
|
});
|
||
|
|
||
|
beforeEach(function () {
|
||
|
mockManager.mockMail();
|
||
|
mockManager.mockStripe();
|
||
|
});
|
||
|
|
||
|
afterEach(function () {
|
||
|
mockManager.restore();
|
||
|
});
|
||
|
|
||
|
it('Does not allow to create a checkout session if the customerEmail is associated with a paid member', async function () {
|
||
|
const {body: {tiers}} = await adminAgent.get('/tiers/?include=monthly_price&yearly_price');
|
||
|
|
||
|
const paidTier = tiers.find(tier => tier.type === 'paid');
|
||
|
|
||
|
await membersAgent.post('/api/create-stripe-checkout-session/')
|
||
|
.body({
|
||
|
customerEmail: 'paid@test.com',
|
||
|
tierId: paidTier.id,
|
||
|
cadence: 'month'
|
||
|
})
|
||
|
.expectStatus(403)
|
||
|
.matchBodySnapshot({
|
||
|
errors: [{
|
||
|
id: matchers.anyUuid,
|
||
|
code: 'CANNOT_CHECKOUT_WITH_EXISTING_SUBSCRIPTION'
|
||
|
}]
|
||
|
})
|
||
|
.matchHeaderSnapshot({
|
||
|
etag: matchers.anyEtag
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('Does allow to create a checkout session if the customerEmail is not associated with a paid member', async function () {
|
||
|
const {body: {tiers}} = await adminAgent.get('/tiers/?include=monthly_price&yearly_price');
|
||
|
|
||
|
const paidTier = tiers.find(tier => tier.type === 'paid');
|
||
|
|
||
|
nock('https://api.stripe.com')
|
||
|
.persist()
|
||
|
.post(/v1\/.*/)
|
||
|
.reply((uri, body) => {
|
||
|
if (uri === '/v1/checkout/sessions') {
|
||
|
return [200, {id: 'cs_123'}];
|
||
|
}
|
||
|
|
||
|
return [500];
|
||
|
});
|
||
|
|
||
|
await membersAgent.post('/api/create-stripe-checkout-session/')
|
||
|
.body({
|
||
|
customerEmail: 'free@test.com',
|
||
|
tierId: paidTier.id,
|
||
|
cadence: 'month'
|
||
|
})
|
||
|
.expectStatus(200)
|
||
|
.matchBodySnapshot()
|
||
|
.matchHeaderSnapshot();
|
||
|
});
|
||
|
});
|