Add field to track when current subscription type started

This commit is contained in:
Phillip Thelen
2022-11-08 12:38:24 +01:00
committed by Phillip Thelen
parent f9a9d4919b
commit 8dfa21a4b8
3 changed files with 56 additions and 1 deletions

View File

@@ -13,7 +13,7 @@ import {
import * as worldState from '../../../../../website/server/libs/worldState'; import * as worldState from '../../../../../website/server/libs/worldState';
import { TransactionModel } from '../../../../../website/server/models/transaction'; import { TransactionModel } from '../../../../../website/server/models/transaction';
describe('payments/index', () => { describe.only('payments/index', () => {
let user; let user;
let group; let group;
let data; let data;
@@ -203,6 +203,28 @@ describe('payments/index', () => {
expect(recipient.purchased.plan.dateCreated).to.exist; expect(recipient.purchased.plan.dateCreated).to.exist;
}); });
it('sets plan.dateCurrentTypeCreated if it did not previously exist', async () => {
expect(recipient.purchased.plan.dateCurrentTypeCreated).to.not.exist;
await api.createSubscription(data);
expect(recipient.purchased.plan.dateCurrentTypeCreated).to.exist;
});
it('keeps plan.dateCreated when changing subscription type', async () => {
await api.createSubscription(data);
const initialDate = recipient.purchased.plan.dateCreated
await api.createSubscription(data);
expect(recipient.purchased.plan.dateCreated).to.eql(initialDate);
});
it('sets plan.dateCurrentTypeCreated when changing subscription type', async () => {
await api.createSubscription(data);
const initialDate = recipient.purchased.plan.dateCurrentTypeCreated
await api.createSubscription(data);
expect(recipient.purchased.plan.dateCurrentTypeCreated).to.not.eql(initialDate);
});
it('does not change plan.customerId if it already exists', async () => { it('does not change plan.customerId if it already exists', async () => {
recipient.purchased.plan = plan; recipient.purchased.plan = plan;
data.customerId = 'purchaserCustomerId'; data.customerId = 'purchaserCustomerId';
@@ -386,6 +408,36 @@ describe('payments/index', () => {
expect(user.purchased.plan.dateCreated).to.exist; expect(user.purchased.plan.dateCreated).to.exist;
}); });
it('sets plan.dateCreated if it did not previously exist', async () => {
expect(user.purchased.plan.dateCreated).to.not.exist;
await api.createSubscription(data);
expect(user.purchased.plan.dateCreated).to.exist;
});
it('sets plan.dateCurrentTypeCreated if it did not previously exist', async () => {
expect(user.purchased.plan.dateCurrentTypeCreated).to.not.exist;
await api.createSubscription(data);
expect(user.purchased.plan.dateCurrentTypeCreated).to.exist;
});
it('keeps plan.dateCreated when changing subscription type', async () => {
await api.createSubscription(data);
const initialDate = user.purchased.plan.dateCreated
await api.createSubscription(data);
expect(user.purchased.plan.dateCreated).to.eql(initialDate);
});
it('sets plan.dateCurrentTypeCreated when changing subscription type', async () => {
await api.createSubscription(data);
const initialDate = user.purchased.plan.dateCurrentTypeCreated
await api.createSubscription(data);
expect(user.purchased.plan.dateCurrentTypeCreated).to.not.eql(initialDate);
});
it('awards the Royal Purple Jackalope pet', async () => { it('awards the Royal Purple Jackalope pet', async () => {
await api.createSubscription(data); await api.createSubscription(data);

View File

@@ -144,6 +144,7 @@ async function prepareSubscriptionValues (data) {
plan.dateTerminated = moment().add({ months }).toDate(); plan.dateTerminated = moment().add({ months }).toDate();
plan.dateCreated = today; plan.dateCreated = today;
} }
plan.dateCurrentTypeCreated = today;
} }
if (!plan.customerId) { if (!plan.customerId) {
@@ -160,6 +161,7 @@ async function prepareSubscriptionValues (data) {
planId: block.key, planId: block.key,
customerId: data.customerId, customerId: data.customerId,
dateUpdated: today, dateUpdated: today,
dateCurrentTypeCreated: today,
paymentMethod: data.paymentMethod, paymentMethod: data.paymentMethod,
extraMonths: Number(plan.extraMonths) + _dateDiff(today, plan.dateTerminated), extraMonths: Number(plan.extraMonths) + _dateDiff(today, plan.dateTerminated),
dateTerminated: null, dateTerminated: null,

View File

@@ -13,6 +13,7 @@ export const schema = new mongoose.Schema({
dateCreated: Date, dateCreated: Date,
dateTerminated: Date, dateTerminated: Date,
dateUpdated: Date, dateUpdated: Date,
dateCurrentTypeCreated: Date,
extraMonths: { $type: Number, default: 0 }, extraMonths: { $type: Number, default: 0 },
gemsBought: { $type: Number, default: 0 }, gemsBought: { $type: Number, default: 0 },
mysteryItems: { $type: Array, default: () => [] }, mysteryItems: { $type: Array, default: () => [] },