mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-21 18:01:36 +03:00
d15446593a
no-issue We are in the process of creating migrations to add foreign key constraints and cascading deletes to the members_stripe_* tables to make listing members and deleting members faster. As well as the migrations we need to update the database schema so that new installations have the correct indexes and constraints. Co-authored-by: Kevin Ansfield <kevin@lookingsideways.co.uk>
159 lines
6.2 KiB
JavaScript
159 lines
6.2 KiB
JavaScript
const should = require('should');
|
|
const BaseModel = require('../../../core/server/models/base');
|
|
const {Member} = require('../../../core/server/models/member');
|
|
const {MemberStripeCustomer} = require('../../../core/server/models/member-stripe-customer');
|
|
const {StripeCustomerSubscription} = require('../../../core/server/models/stripe-customer-subscription');
|
|
|
|
const testUtils = require('../../utils');
|
|
|
|
describe('MemberStripeCustomer Model', function run() {
|
|
before(testUtils.teardownDb);
|
|
beforeEach(testUtils.setup('roles'));
|
|
afterEach(testUtils.teardownDb);
|
|
|
|
describe('subscriptions', function () {
|
|
// For some reason the initial .add of MemberStripeCustomer is **not** adding a StripeCustomerSubscription :(
|
|
it.skip('Is correctly mapped to the stripe subscriptions', async function () {
|
|
const context = testUtils.context.admin;
|
|
|
|
const member = await Member.add({
|
|
email: 'test@test.test'
|
|
});
|
|
|
|
await MemberStripeCustomer.add({
|
|
member_id: member.get('id'),
|
|
customer_id: 'fake_customer_id',
|
|
subscriptions: [{
|
|
subscription_id: 'fake_subscription_id1',
|
|
plan_id: 'fake_plan_id',
|
|
plan_amount: 1337,
|
|
plan_nickname: 'e-LEET',
|
|
plan_interval: 'year',
|
|
plan_currency: 'btc',
|
|
status: 'active',
|
|
start_date: new Date(),
|
|
current_period_end: new Date(),
|
|
cancel_at_period_end: false
|
|
}]
|
|
}, context);
|
|
|
|
const subscription1 = await StripeCustomerSubscription.findOne({
|
|
subscription_id: 'fake_subscription_id1'
|
|
}, context);
|
|
|
|
should.exist(subscription1, 'StripeCustomerSubscription should have been created');
|
|
|
|
await StripeCustomerSubscription.add({
|
|
customer_id: 'fake_customer_id',
|
|
subscription_id: 'fake_subscription_id2',
|
|
plan_id: 'fake_plan_id',
|
|
plan_amount: 1337,
|
|
plan_nickname: 'e-LEET',
|
|
plan_interval: 'year',
|
|
plan_currency: 'btc',
|
|
status: 'active',
|
|
start_date: new Date(),
|
|
current_period_end: new Date(),
|
|
cancel_at_period_end: false
|
|
}, context);
|
|
|
|
const customer = await MemberStripeCustomer.findOne({
|
|
customer_id: 'fake_customer_id'
|
|
}, Object.assign({}, context, {
|
|
withRelated: ['subscriptions']
|
|
}));
|
|
|
|
should.exist(customer.related('subscriptions'), 'MemberStripeCustomer should have been fetched with subscriptions');
|
|
|
|
const subscriptions = customer.related('subscriptions');
|
|
|
|
should.equal(subscriptions.length, 2, 'Should be two subscriptions');
|
|
|
|
should.equal(subscriptions.models[0].get('subscription_id'), 'fake_subscription_id1');
|
|
should.equal(subscriptions.models[1].get('subscription_id'), 'fake_subscription_id2');
|
|
});
|
|
});
|
|
|
|
describe('member', function () {
|
|
it('Is correctly mapped to the member', async function () {
|
|
const context = testUtils.context.admin;
|
|
const member = await Member.add({
|
|
email: 'test@test.member'
|
|
}, context);
|
|
|
|
await MemberStripeCustomer.add({
|
|
member_id: member.get('id'),
|
|
customer_id: 'fake_customer_id'
|
|
}, context);
|
|
|
|
const customer = await MemberStripeCustomer.findOne({
|
|
customer_id: 'fake_customer_id'
|
|
}, Object.assign({}, context, {
|
|
withRelated: ['member']
|
|
}));
|
|
|
|
const memberFromRelation = customer.related('member');
|
|
|
|
should.exist(memberFromRelation, 'MemberStripeCustomer should have been fetched with member');
|
|
|
|
should.equal(memberFromRelation.get('id'), member.get('id'));
|
|
should.equal(memberFromRelation.get('email'), 'test@test.member');
|
|
});
|
|
});
|
|
|
|
describe('destroy', function () {
|
|
it('Cascades to members_stripe_customers_subscriptions', async function () {
|
|
const context = testUtils.context.admin;
|
|
const member = await Member.add({
|
|
email: 'test@test.member'
|
|
}, context);
|
|
|
|
await MemberStripeCustomer.add({
|
|
member_id: member.get('id'),
|
|
customer_id: 'fake_customer_id'
|
|
}, context);
|
|
|
|
const customer = await MemberStripeCustomer.findOne({
|
|
customer_id: 'fake_customer_id'
|
|
}, context);
|
|
|
|
should.exist(customer, 'Customer should have been created');
|
|
|
|
await StripeCustomerSubscription.add({
|
|
customer_id: 'fake_customer_id',
|
|
subscription_id: 'fake_subscription_id',
|
|
plan_id: 'fake_plan_id',
|
|
plan_amount: 1337,
|
|
plan_nickname: 'e-LEET',
|
|
plan_interval: 'year',
|
|
plan_currency: 'btc',
|
|
status: 'active',
|
|
start_date: new Date(),
|
|
current_period_end: new Date(),
|
|
cancel_at_period_end: false
|
|
}, context);
|
|
|
|
const subscription = await StripeCustomerSubscription.findOne({
|
|
customer_id: customer.get('customer_id')
|
|
}, context);
|
|
|
|
should.exist(subscription, 'Subscription should have been created');
|
|
|
|
await MemberStripeCustomer.destroy(Object.assign({
|
|
id: customer.get('id')
|
|
}, context));
|
|
|
|
const customerAfterDestroy = await MemberStripeCustomer.findOne({
|
|
customer_id: 'fake_customer_id'
|
|
});
|
|
should.not.exist(customerAfterDestroy, 'MemberStripeCustomer should have been destroyed');
|
|
|
|
const subscriptionAfterDestroy = await StripeCustomerSubscription.findOne({
|
|
customer_id: 'fake_customer_id'
|
|
});
|
|
should.not.exist(subscriptionAfterDestroy, 'StripeCustomerSubscription should have been destroyed');
|
|
});
|
|
});
|
|
});
|
|
|