From 96623608d064b94cfa40e5da736f13c696995df9 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 6 Aug 2024 16:28:16 +0200 Subject: [PATCH] begin removing obsolete tests --- test/api/unit/libs/cron.test.js | 476 +------------------ test/api/unit/libs/payments/payments.test.js | 420 +++------------- 2 files changed, 88 insertions(+), 808 deletions(-) diff --git a/test/api/unit/libs/cron.test.js b/test/api/unit/libs/cron.test.js index 6757228033..53d732b8ad 100644 --- a/test/api/unit/libs/cron.test.js +++ b/test/api/unit/libs/cron.test.js @@ -163,14 +163,6 @@ describe('cron', async () => { expect(user.purchased.plan.consecutive.count).to.equal(2); }); - it('decrements plan.consecutive.offset when offset is greater than 0', async () => { - user.purchased.plan.consecutive.offset = 2; - await cron({ - user, tasksByType, daysMissed, analytics, - }); - expect(user.purchased.plan.consecutive.offset).to.equal(1); - }); - it('does not award unearned plan.consecutive.trinkets if subscription ended during an absence', async () => { user.purchased.plan.dateUpdated = moment().subtract(6, 'months').toDate(); user.purchased.plan.dateTerminated = moment().subtract(3, 'months').toDate(); @@ -185,12 +177,12 @@ describe('cron', async () => { }); it('does not increment plan.consecutive.gemCapExtra when user has reached the gemCap limit', async () => { - user.purchased.plan.consecutive.gemCapExtra = 25; + user.purchased.plan.consecutive.gemCapExtra = 26; user.purchased.plan.consecutive.count = 5; await cron({ user, tasksByType, daysMissed, analytics, }); - expect(user.purchased.plan.consecutive.gemCapExtra).to.equal(25); + expect(user.purchased.plan.consecutive.gemCapExtra).to.equal(26); }); it('does not reset plan stats if we are before the last day of the cancelled month', async () => { @@ -237,12 +229,11 @@ describe('cron', async () => { user1.purchased.plan.planId = 'basic'; user1.purchased.plan.consecutive.count = 0; user1.purchased.plan.perkMonthCount = 0; - user1.purchased.plan.consecutive.offset = 0; user1.purchased.plan.consecutive.trinkets = 0; user1.purchased.plan.consecutive.gemCapExtra = 0; }); - it('does not increment consecutive benefits after the first month', async () => { + it('increments consecutive benefits', async () => { clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months') .add(2, 'days') .toDate()); @@ -253,75 +244,8 @@ describe('cron', async () => { user: user1, tasksByType, daysMissed, analytics, }); expect(user1.purchased.plan.consecutive.count).to.equal(1); - expect(user1.purchased.plan.consecutive.offset).to.equal(0); - expect(user1.purchased.plan.consecutive.trinkets).to.equal(0); - expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(0); - }); - - it('does not increment consecutive benefits after the second month', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months') - .add(2, 'days') - .toDate()); - // Add 1 month to simulate what happens a month after the subscription was created. - // Add 2 days so that we're sure we're not affected by any start-of-month effects - // e.g., from time zone oddness. - await cron({ - user: user1, tasksByType, daysMissed, analytics, - }); - expect(user1.purchased.plan.consecutive.count).to.equal(2); - expect(user1.purchased.plan.consecutive.offset).to.equal(0); - expect(user1.purchased.plan.consecutive.trinkets).to.equal(0); - expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(0); - }); - - it('increments consecutive benefits after the second month if they also received a 1 month gift subscription', async () => { - user1.purchased.plan.perkMonthCount = 1; - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months') - .add(2, 'days') - .toDate()); - // Add 1 month to simulate what happens a month after the subscription was created. - // Add 2 days so that we're sure we're not affected by any start-of-month effects - // e.g., from time zone oddness. - await cron({ - user: user1, tasksByType, daysMissed, analytics, - }); - expect(user1.purchased.plan.perkMonthCount).to.equal(0); - expect(user1.purchased.plan.consecutive.count).to.equal(2); - expect(user1.purchased.plan.consecutive.offset).to.equal(0); - expect(user1.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(5); - }); - - it('increments consecutive benefits after the third month', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months') - .add(2, 'days') - .toDate()); - // Add 1 month to simulate what happens a month after the subscription was created. - // Add 2 days so that we're sure we're not affected by any start-of-month effects - // e.g., from time zone oddness. - await cron({ - user: user1, tasksByType, daysMissed, analytics, - }); - expect(user1.purchased.plan.consecutive.count).to.equal(3); - expect(user1.purchased.plan.consecutive.offset).to.equal(0); - expect(user1.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(5); - }); - - it('does not increment consecutive benefits after the fourth month', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(4, 'months') - .add(2, 'days') - .toDate()); - // Add 1 month to simulate what happens a month after the subscription was created. - // Add 2 days so that we're sure we're not affected by any start-of-month effects - // e.g., from time zone oddness. - await cron({ - user: user1, tasksByType, daysMissed, analytics, - }); - expect(user1.purchased.plan.consecutive.count).to.equal(4); - expect(user1.purchased.plan.consecutive.offset).to.equal(0); - expect(user1.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(5); + expect(user1.purchased.plan.consecutive.trinkets).to.equal(2); + expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(2); }); it('increments consecutive benefits correctly if user has been absent with continuous subscription', async () => { @@ -332,33 +256,8 @@ describe('cron', async () => { user: user1, tasksByType, daysMissed, analytics, }); expect(user1.purchased.plan.consecutive.count).to.equal(10); - expect(user1.purchased.plan.consecutive.offset).to.equal(0); - expect(user1.purchased.plan.consecutive.trinkets).to.equal(3); - expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(15); - }); - - it('initializes plan.perkMonthCount if necessary', async () => { - user.purchased.plan.perkMonthCount = undefined; - clock = sinon.useFakeTimers(moment(user.purchased.plan.dateUpdated) - .utcOffset(0) - .startOf('month') - .add(1, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user, tasksByType, daysMissed, analytics, - }); - expect(user.purchased.plan.perkMonthCount).to.equal(1); - user.purchased.plan.perkMonthCount = undefined; - user.purchased.plan.consecutive.count = 8; - clock.restore(); - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user, tasksByType, daysMissed, analytics, - }); - expect(user.purchased.plan.perkMonthCount).to.equal(2); + expect(user1.purchased.plan.consecutive.trinkets).to.equal(10); + expect(user1.purchased.plan.consecutive.gemCapExtra).to.equal(20); }); }); @@ -381,12 +280,11 @@ describe('cron', async () => { user3.purchased.plan.planId = 'basic_3mo'; user3.purchased.plan.perkMonthCount = 0; user3.purchased.plan.consecutive.count = 0; - user3.purchased.plan.consecutive.offset = 3; user3.purchased.plan.consecutive.trinkets = 1; user3.purchased.plan.consecutive.gemCapExtra = 5; }); - it('does not increment consecutive benefits in the first month of the first paid period that they already have benefits for', async () => { + it('increments consecutive benefits', async () => { clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months') .add(2, 'days') .toDate()); @@ -394,102 +292,8 @@ describe('cron', async () => { user: user3, tasksByType, daysMissed, analytics, }); expect(user3.purchased.plan.consecutive.count).to.equal(1); - expect(user3.purchased.plan.consecutive.offset).to.equal(2); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(5); - }); - - it('does not increment consecutive benefits in the middle of the period that they already have benefits for', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3, tasksByType, daysMissed, analytics, - }); - expect(user3.purchased.plan.consecutive.count).to.equal(2); - expect(user3.purchased.plan.consecutive.offset).to.equal(1); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(5); - }); - - it('does not increment consecutive benefits in the final month of the period that they already have benefits for', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3, tasksByType, daysMissed, analytics, - }); - expect(user3.purchased.plan.consecutive.count).to.equal(3); - expect(user3.purchased.plan.consecutive.offset).to.equal(0); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(5); - }); - - it('increments consecutive benefits the month after the second paid period has started', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(4, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3, tasksByType, daysMissed, analytics, - }); - expect(user3.purchased.plan.consecutive.count).to.equal(4); - expect(user3.purchased.plan.consecutive.offset).to.equal(2); expect(user3.purchased.plan.consecutive.trinkets).to.equal(2); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(10); - }); - - it('keeps existing plan.perkMonthCount intact when incrementing consecutive benefits', async () => { - user3.purchased.plan.perkMonthCount = 2; - user3.purchased.plan.consecutive.trinkets = 1; - user3.purchased.plan.consecutive.gemCapExtra = 5; - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(4, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3, tasksByType, daysMissed, analytics, - }); - expect(user3.purchased.plan.perkMonthCount).to.equal(2); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(2); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(10); - }); - - it('does not increment consecutive benefits in the second month of the second period that they already have benefits for', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(5, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3, tasksByType, daysMissed, analytics, - }); - expect(user3.purchased.plan.consecutive.count).to.equal(5); - expect(user3.purchased.plan.consecutive.offset).to.equal(1); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(2); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(10); - }); - - it('does not increment consecutive benefits in the final month of the second period that they already have benefits for', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(6, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3, tasksByType, daysMissed, analytics, - }); - expect(user3.purchased.plan.consecutive.count).to.equal(6); - expect(user3.purchased.plan.consecutive.offset).to.equal(0); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(2); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(10); - }); - - it('increments consecutive benefits the month after the third paid period has started', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(7, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3, tasksByType, daysMissed, analytics, - }); - expect(user3.purchased.plan.consecutive.count).to.equal(7); - expect(user3.purchased.plan.consecutive.offset).to.equal(2); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(3); - expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(15); + expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(2); }); it('increments consecutive benefits correctly if user has been absent with continuous subscription', async () => { @@ -500,8 +304,7 @@ describe('cron', async () => { user: user3, tasksByType, daysMissed, analytics, }); expect(user3.purchased.plan.consecutive.count).to.equal(10); - expect(user3.purchased.plan.consecutive.offset).to.equal(2); - expect(user3.purchased.plan.consecutive.trinkets).to.equal(4); + expect(user3.purchased.plan.consecutive.trinkets).to.equal(10); expect(user3.purchased.plan.consecutive.gemCapExtra).to.equal(20); }); }); @@ -525,12 +328,11 @@ describe('cron', async () => { user6.purchased.plan.planId = 'google_6mo'; user6.purchased.plan.perkMonthCount = 0; user6.purchased.plan.consecutive.count = 0; - user6.purchased.plan.consecutive.offset = 6; user6.purchased.plan.consecutive.trinkets = 2; user6.purchased.plan.consecutive.gemCapExtra = 10; }); - it('does not increment consecutive benefits in the first month of the first paid period that they already have benefits for', async () => { + it('increments benefits', async () => { clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months') .add(2, 'days') .toDate()); @@ -538,74 +340,8 @@ describe('cron', async () => { user: user6, tasksByType, daysMissed, analytics, }); expect(user6.purchased.plan.consecutive.count).to.equal(1); - expect(user6.purchased.plan.consecutive.offset).to.equal(5); expect(user6.purchased.plan.consecutive.trinkets).to.equal(2); - expect(user6.purchased.plan.consecutive.gemCapExtra).to.equal(10); - }); - - it('does not increment consecutive benefits in the final month of the period that they already have benefits for', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(6, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6, tasksByType, daysMissed, analytics, - }); - expect(user6.purchased.plan.consecutive.count).to.equal(6); - expect(user6.purchased.plan.consecutive.offset).to.equal(0); - expect(user6.purchased.plan.consecutive.trinkets).to.equal(2); - expect(user6.purchased.plan.consecutive.gemCapExtra).to.equal(10); - }); - - it('increments consecutive benefits the month after the second paid period has started', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(7, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6, tasksByType, daysMissed, analytics, - }); - expect(user6.purchased.plan.consecutive.count).to.equal(7); - expect(user6.purchased.plan.consecutive.offset).to.equal(5); - expect(user6.purchased.plan.consecutive.trinkets).to.equal(4); - expect(user6.purchased.plan.consecutive.gemCapExtra).to.equal(20); - }); - - it('keeps existing plan.perkMonthCount intact when incrementing consecutive benefits', async () => { - user6.purchased.plan.perkMonthCount = 2; - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(7, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6, tasksByType, daysMissed, analytics, - }); - expect(user6.purchased.plan.perkMonthCount).to.equal(2); - expect(user6.purchased.plan.consecutive.trinkets).to.equal(4); - expect(user6.purchased.plan.consecutive.gemCapExtra).to.equal(20); - }); - - it('increments consecutive benefits the month after the third paid period has started', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(13, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6, tasksByType, daysMissed, analytics, - }); - expect(user6.purchased.plan.consecutive.count).to.equal(13); - expect(user6.purchased.plan.consecutive.offset).to.equal(5); - expect(user6.purchased.plan.consecutive.trinkets).to.equal(6); - expect(user6.purchased.plan.consecutive.gemCapExtra).to.equal(25); - }); - - it('increments consecutive benefits correctly if user has been absent with continuous subscription', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(19, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6, tasksByType, daysMissed, analytics, - }); - expect(user6.purchased.plan.consecutive.count).to.equal(19); - expect(user6.purchased.plan.consecutive.offset).to.equal(5); - expect(user6.purchased.plan.consecutive.trinkets).to.equal(8); - expect(user6.purchased.plan.consecutive.gemCapExtra).to.equal(25); + expect(user6.purchased.plan.consecutive.gemCapExtra).to.equal(2); }); }); @@ -626,11 +362,10 @@ describe('cron', async () => { user12.purchased.plan.dateUpdated = moment().toDate(); user12.purchased.plan.planId = 'basic_12mo'; user12.purchased.plan.consecutive.count = 0; - user12.purchased.plan.consecutive.offset = 12; user12.purchased.plan.consecutive.trinkets = 4; user12.purchased.plan.consecutive.gemCapExtra = 20; - it('does not increment consecutive benefits in the first month of the first paid period that they already have benefits for', async () => { + it('increments consecutive benefits the month after the second paid period has started', async () => { clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months') .add(2, 'days') .toDate()); @@ -638,61 +373,20 @@ describe('cron', async () => { user: user12, tasksByType, daysMissed, analytics, }); expect(user12.purchased.plan.consecutive.count).to.equal(1); - expect(user12.purchased.plan.consecutive.offset).to.equal(11); - expect(user12.purchased.plan.consecutive.trinkets).to.equal(4); - expect(user12.purchased.plan.consecutive.gemCapExtra).to.equal(20); - }); - - it('does not increment consecutive benefits in the final month of the period that they already have benefits for', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(12, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user12, tasksByType, daysMissed, analytics, - }); - expect(user12.purchased.plan.consecutive.count).to.equal(12); - expect(user12.purchased.plan.consecutive.offset).to.equal(0); - expect(user12.purchased.plan.consecutive.trinkets).to.equal(4); - expect(user12.purchased.plan.consecutive.gemCapExtra).to.equal(20); - }); - - it('increments consecutive benefits the month after the second paid period has started', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(13, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user12, tasksByType, daysMissed, analytics, - }); - expect(user12.purchased.plan.consecutive.count).to.equal(13); - expect(user12.purchased.plan.consecutive.offset).to.equal(11); - expect(user12.purchased.plan.consecutive.trinkets).to.equal(8); - expect(user12.purchased.plan.consecutive.gemCapExtra).to.equal(25); - }); - - it('increments consecutive benefits the month after the third paid period has started', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(25, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user12, tasksByType, daysMissed, analytics, - }); - expect(user12.purchased.plan.consecutive.count).to.equal(25); - expect(user12.purchased.plan.consecutive.offset).to.equal(11); - expect(user12.purchased.plan.consecutive.trinkets).to.equal(12); - expect(user12.purchased.plan.consecutive.gemCapExtra).to.equal(25); + expect(user12.purchased.plan.consecutive.trinkets).to.equal(13); + expect(user12.purchased.plan.consecutive.gemCapExtra).to.equal(26); }); it('increments consecutive benefits correctly if user has been absent with continuous subscription', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(37, 'months') + clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(10, 'months') .add(2, 'days') .toDate()); await cron({ user: user12, tasksByType, daysMissed, analytics, }); - expect(user12.purchased.plan.consecutive.count).to.equal(37); - expect(user12.purchased.plan.consecutive.offset).to.equal(11); - expect(user12.purchased.plan.consecutive.trinkets).to.equal(16); - expect(user12.purchased.plan.consecutive.gemCapExtra).to.equal(25); + expect(user12.purchased.plan.consecutive.count).to.equal(10); + expect(user12.purchased.plan.consecutive.trinkets).to.equal(22); + expect(user12.purchased.plan.consecutive.gemCapExtra).to.equal(65); }); }); @@ -715,43 +409,16 @@ describe('cron', async () => { .toDate(); user3g.purchased.plan.planId = null; user3g.purchased.plan.consecutive.count = 0; - user3g.purchased.plan.consecutive.offset = 3; user3g.purchased.plan.consecutive.trinkets = 1; user3g.purchased.plan.consecutive.gemCapExtra = 5; - it('does not increment consecutive benefits in the first month of the gift subscription', async () => { + it('increments benefits', async () => { clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months') .add(2, 'days') .toDate()); await cron({ user: user3g, tasksByType, daysMissed, analytics, }); - expect(user3g.purchased.plan.consecutive.count).to.equal(1); - expect(user3g.purchased.plan.consecutive.offset).to.equal(2); - expect(user3g.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user3g.purchased.plan.consecutive.gemCapExtra).to.equal(5); - }); - - it('does not increment consecutive benefits in the second month of the gift subscription', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3g, tasksByType, daysMissed, analytics, - }); - expect(user3g.purchased.plan.consecutive.count).to.equal(2); - expect(user3g.purchased.plan.consecutive.offset).to.equal(1); - expect(user3g.purchased.plan.consecutive.trinkets).to.equal(1); - expect(user3g.purchased.plan.consecutive.gemCapExtra).to.equal(5); - }); - - it('does not increment consecutive benefits in the third month of the gift subscription', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user3g, tasksByType, daysMissed, analytics, - }); expect(user3g.purchased.plan.consecutive.count).to.equal(3); expect(user3g.purchased.plan.consecutive.offset).to.equal(0); expect(user3g.purchased.plan.consecutive.trinkets).to.equal(1); @@ -772,81 +439,6 @@ describe('cron', async () => { expect(user3g.purchased.plan.consecutive.gemCapExtra).to.equal(0); // erased }); }); - - describe('for a 6-month recurring subscription where the user has incorrect consecutive month data from prior bugs', async () => { - const user6x = new User({ - auth: { - local: { - username: 'username6x', - lowerCaseUsername: 'username6x', - email: 'email6x@example.com', - salt: 'salt', - hashed_password: 'hashed_password', // eslint-disable-line camelcase - }, - }, - }); - // user6x has a 6-month recurring subscription starting 8 months in the past - // before issue #4819 was fixed - user6x.purchased.plan.customerId = 'subscribedId'; - user6x.purchased.plan.dateUpdated = moment().toDate(); - user6x.purchased.plan.planId = 'basic_6mo'; - user6x.purchased.plan.consecutive.count = 8; - user6x.purchased.plan.consecutive.offset = 0; - user6x.purchased.plan.consecutive.trinkets = 3; - user6x.purchased.plan.consecutive.gemCapExtra = 15; - - it('increments consecutive benefits in the first month since the fix for #4819 goes live', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(1, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6x, tasksByType, daysMissed, analytics, - }); - expect(user6x.purchased.plan.consecutive.count).to.equal(9); - expect(user6x.purchased.plan.consecutive.offset).to.equal(5); - expect(user6x.purchased.plan.consecutive.trinkets).to.equal(5); - expect(user6x.purchased.plan.consecutive.gemCapExtra).to.equal(25); - }); - - it('does not increment consecutive benefits in the second month after the fix goes live', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(2, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6x, tasksByType, daysMissed, analytics, - }); - expect(user6x.purchased.plan.consecutive.count).to.equal(10); - expect(user6x.purchased.plan.consecutive.offset).to.equal(4); - expect(user6x.purchased.plan.consecutive.trinkets).to.equal(5); - expect(user6x.purchased.plan.consecutive.gemCapExtra).to.equal(25); - }); - - it('does not increment consecutive benefits in the third month after the fix goes live', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(3, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6x, tasksByType, daysMissed, analytics, - }); - expect(user6x.purchased.plan.consecutive.count).to.equal(11); - expect(user6x.purchased.plan.consecutive.offset).to.equal(3); - expect(user6x.purchased.plan.consecutive.trinkets).to.equal(5); - expect(user6x.purchased.plan.consecutive.gemCapExtra).to.equal(25); - }); - - it('increments consecutive benefits in the seventh month after the fix goes live', async () => { - clock = sinon.useFakeTimers(moment().utcOffset(0).startOf('month').add(7, 'months') - .add(2, 'days') - .toDate()); - await cron({ - user: user6x, tasksByType, daysMissed, analytics, - }); - expect(user6x.purchased.plan.consecutive.count).to.equal(15); - expect(user6x.purchased.plan.consecutive.offset).to.equal(5); - expect(user6x.purchased.plan.consecutive.trinkets).to.equal(7); - expect(user6x.purchased.plan.consecutive.gemCapExtra).to.equal(25); - }); - }); }); describe('end of the month perks when user is not subscribed', async () => { @@ -888,14 +480,6 @@ describe('cron', async () => { expect(user.purchased.plan.consecutive.count).to.equal(0); }); - it('does not decrement plan.consecutive.offset when offset is greater than 0', async () => { - user.purchased.plan.consecutive.offset = 1; - await cron({ - user, tasksByType, daysMissed, analytics, - }); - expect(user.purchased.plan.consecutive.offset).to.equal(1); - }); - it('does not increment plan.consecutive.trinkets when user has reached a month that is a multiple of 3', async () => { user.purchased.plan.consecutive.count = 5; await cron({ @@ -913,12 +497,12 @@ describe('cron', async () => { }); it('does not increment plan.consecutive.gemCapExtra when user has reached the gemCap limit', async () => { - user.purchased.plan.consecutive.gemCapExtra = 25; + user.purchased.plan.consecutive.gemCapExtra = 26; user.purchased.plan.consecutive.count = 5; await cron({ user, tasksByType, daysMissed, analytics, }); - expect(user.purchased.plan.consecutive.gemCapExtra).to.equal(25); + expect(user.purchased.plan.consecutive.gemCapExtra).to.equal(26); }); it('does nothing to plan stats if we are before the last day of the cancelled month', async () => { @@ -928,22 +512,6 @@ describe('cron', async () => { }); expect(user.purchased.plan.customerId).to.not.exist; }); - - xit('does nothing to plan stats when we are after the last day of the cancelled month', async () => { - user.purchased.plan.dateTerminated = moment(new Date()).subtract({ days: 1 }); - user.purchased.plan.consecutive.gemCapExtra = 20; - user.purchased.plan.consecutive.count = 5; - user.purchased.plan.consecutive.offset = 1; - - await cron({ - user, tasksByType, daysMissed, analytics, - }); - - expect(user.purchased.plan.customerId).to.exist; - expect(user.purchased.plan.consecutive.gemCapExtra).to.exist; - expect(user.purchased.plan.consecutive.count).to.exist; - expect(user.purchased.plan.consecutive.offset).to.exist; - }); }); describe('todos', async () => { diff --git a/test/api/unit/libs/payments/payments.test.js b/test/api/unit/libs/payments/payments.test.js index 5b2d2f9899..5fc08e9f19 100644 --- a/test/api/unit/libs/payments/payments.test.js +++ b/test/api/unit/libs/payments/payments.test.js @@ -177,6 +177,37 @@ describe('payments/index', () => { expect(recipient.purchased.plan.dateUpdated).to.exist; }); + it('does not reset gemCapExtra if they already had one', async () => { + recipient.purchased.plan.gemCapExtra = 10; + + await api.createSubscription(data); + + expect(recipient.purchased.plan.gemCapExtra).to.eql(10); + }); + + it('sets gemCapExtra to max if they receive a 12 month sub', async () => { + recipient.purchased.plan.gemCapExtra = 10; + + data.gift.subscription.key = 'basic_12mo'; + data.gift.subscription.months = 12; + + await api.createSubscription(data); + + expect(recipient.purchased.plan.gemCapExtra).to.eql(26); + }); + + it('gives user 1 hourglass if they have no active subscription', async () => { + await api.createSubscription(data); + + expect(recipient.purchased.plan.trinket).to.eql(1); + }); + + it('does not giec any hourglasses if they have an active subscription', async () => { + recipient.purchased.plan = plan; + await api.createSubscription(data); + expect(recipient.purchased.plan.trinket).to.eql(plan.trinket); + }); + it('sets plan.dateUpdated if it did exist but the user has cancelled', async () => { recipient.purchased.plan.dateUpdated = moment().subtract(1, 'days').toDate(); recipient.purchased.plan.dateTerminated = moment().subtract(1, 'days').toDate(); @@ -235,116 +266,6 @@ describe('payments/index', () => { expect(recipient.purchased.plan.customerId).to.eql('customer-id'); }); - it('sets plan.perkMonthCount to 1 if user is not subscribed', async () => { - recipient.purchased.plan = plan; - recipient.purchased.plan.perkMonthCount = 1; - recipient.purchased.plan.customerId = undefined; - data.sub.key = 'basic_earned'; - data.gift.subscription.key = 'basic_earned'; - data.gift.subscription.months = 1; - - expect(recipient.purchased.plan.perkMonthCount).to.eql(1); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(1); - }); - - it('sets plan.perkMonthCount to 1 if field is not initialized', async () => { - recipient.purchased.plan = plan; - recipient.purchased.plan.perkMonthCount = -1; - recipient.purchased.plan.customerId = undefined; - data.sub.key = 'basic_earned'; - data.gift.subscription.key = 'basic_earned'; - data.gift.subscription.months = 1; - - expect(recipient.purchased.plan.perkMonthCount).to.eql(-1); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(1); - }); - - it('sets plan.perkMonthCount to 1 if user had previous count but lapsed subscription', async () => { - recipient.purchased.plan = plan; - recipient.purchased.plan.perkMonthCount = 2; - recipient.purchased.plan.customerId = undefined; - data.sub.key = 'basic_earned'; - data.gift.subscription.key = 'basic_earned'; - data.gift.subscription.months = 1; - - expect(recipient.purchased.plan.perkMonthCount).to.eql(2); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(1); - }); - - it('adds to plan.perkMonthCount if user is already subscribed', async () => { - recipient.purchased.plan = plan; - recipient.purchased.plan.perkMonthCount = 1; - data.sub.key = 'basic_earned'; - data.gift.subscription.key = 'basic_earned'; - data.gift.subscription.months = 1; - - expect(recipient.purchased.plan.perkMonthCount).to.eql(1); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(2); - }); - - it('awards perks if plan.perkMonthCount reaches 3 with existing subscription', async () => { - recipient.purchased.plan = plan; - recipient.purchased.plan.perkMonthCount = 2; - data.sub.key = 'basic_earned'; - data.gift.subscription.key = 'basic_earned'; - data.gift.subscription.months = 1; - - expect(recipient.purchased.plan.perkMonthCount).to.eql(2); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(0); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(0); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(0); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(1); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(5); - }); - - it('awards perks if plan.perkMonthCount reaches 3 without existing subscription', async () => { - recipient.purchased.plan.perkMonthCount = 0; - expect(recipient.purchased.plan.perkMonthCount).to.eql(0); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(0); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(0); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(0); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(1); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(5); - }); - - it('awards perks if plan.perkMonthCount reaches 3 without initialized field', async () => { - expect(recipient.purchased.plan.perkMonthCount).to.eql(-1); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(0); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(0); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(0); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(1); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(5); - }); - - it('awards perks if plan.perkMonthCount goes over 3', async () => { - recipient.purchased.plan = plan; - recipient.purchased.plan.perkMonthCount = 2; - data.sub.key = 'basic_earned'; - - expect(recipient.purchased.plan.perkMonthCount).to.eql(2); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(0); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(0); - await api.createSubscription(data); - - expect(recipient.purchased.plan.perkMonthCount).to.eql(2); - expect(recipient.purchased.plan.consecutive.trinkets).to.eql(1); - expect(recipient.purchased.plan.consecutive.gemCapExtra).to.eql(5); - }); - it('sets plan.customerId to "Gift" if it does not already exist', async () => { expect(recipient.purchased.plan.customerId).to.not.exist; @@ -549,33 +470,6 @@ describe('payments/index', () => { expect(user.purchased.plan.dateCurrentTypeCreated).to.not.eql(initialDate); }); - it('keeps plan.perkMonthCount when changing subscription type', async () => { - await api.createSubscription(data); - user.purchased.plan.perkMonthCount = 2; - await api.createSubscription(data); - expect(user.purchased.plan.perkMonthCount).to.eql(2); - }); - - it('sets plan.perkMonthCount to zero when creating new monthly subscription', async () => { - user.purchased.plan.perkMonthCount = 2; - await api.createSubscription(data); - expect(user.purchased.plan.perkMonthCount).to.eql(0); - }); - - it('sets plan.perkMonthCount to zero when creating new 3 month subscription', async () => { - user.purchased.plan.perkMonthCount = 2; - await api.createSubscription(data); - expect(user.purchased.plan.perkMonthCount).to.eql(0); - }); - - it('updates plan.consecutive.offset when changing subscription type', async () => { - await api.createSubscription(data); - expect(user.purchased.plan.consecutive.offset).to.eql(3); - data.sub.key = 'basic_6mo'; - await api.createSubscription(data); - expect(user.purchased.plan.consecutive.offset).to.eql(6); - }); - it('awards the Royal Purple Jackalope pet', async () => { await api.createSubscription(data); @@ -694,6 +588,7 @@ describe('payments/index', () => { expect(user.purchased.plan.dateCreated).to.eql(created); expect(user.purchased.plan.dateUpdated).to.not.eql(updated); expect(user.purchased.plan.customerId).to.eql('customer-id'); + expect(user.purchased.plan.gemCapExtra).to.eql(26); }); }); @@ -741,55 +636,20 @@ describe('payments/index', () => { }); context('Block subscription perks', () => { - it('adds block months to plan.consecutive.offset', async () => { - await api.createSubscription(data); - - expect(user.purchased.plan.consecutive.offset).to.eql(3); - }); - - it('does not add to plans.consecutive.offset if 1 month subscription', async () => { - data.sub.key = 'basic_earned'; - await api.createSubscription(data); - - expect(user.purchased.plan.consecutive.offset).to.eql(0); - }); - - it('resets plans.consecutive.offset if 1 month subscription', async () => { - user.purchased.plan.consecutive.offset = 1; - await user.save(); - data.sub.key = 'basic_earned'; - await api.createSubscription(data); - - expect(user.purchased.plan.consecutive.offset).to.eql(0); - }); - - it('adds 5 to plan.consecutive.gemCapExtra for 3 month block', async () => { - await api.createSubscription(data); - - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(5); - }); - - it('adds 10 to plan.consecutive.gemCapExtra for 6 month block', async () => { - data.sub.key = 'basic_6mo'; - await api.createSubscription(data); - - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(10); - }); - - it('adds 20 to plan.consecutive.gemCapExtra for 12 month block', async () => { + it('adds 26 to plan.consecutive.gemCapExtra for 12 month block', async () => { data.sub.key = 'basic_12mo'; await api.createSubscription(data); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(20); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(26); }); - it('does not raise plan.consecutive.gemCapExtra higher than 25', async () => { + it('does not raise plan.consecutive.gemCapExtra higher than 26', async () => { data.sub.key = 'basic_12mo'; await api.createSubscription(data); await api.createSubscription(data); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(25); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(26); }); it('adds a plan.consecutive.trinkets for 3 month block', async () => { @@ -798,20 +658,20 @@ describe('payments/index', () => { expect(user.purchased.plan.consecutive.trinkets).to.eql(1); }); - it('adds 2 plan.consecutive.trinkets for 6 month block', async () => { + it('adds 1 plan.consecutive.trinkets for 6 month block', async () => { data.sub.key = 'basic_6mo'; await api.createSubscription(data); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); + expect(user.purchased.plan.consecutive.trinkets).to.eql(1); }); - it('adds 4 plan.consecutive.trinkets for 12 month block', async () => { + it('adds 12 plan.consecutive.trinkets for 12 month block', async () => { data.sub.key = 'basic_12mo'; await api.createSubscription(data); - expect(user.purchased.plan.consecutive.trinkets).to.eql(4); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); context('Upgrades subscription', () => { @@ -819,70 +679,38 @@ describe('payments/index', () => { beforeEach(async () => { data.updatedFrom = { logic: 'payDifference' }; }); - it('Adds 10 to plan.consecutive.gemCapExtra from basic_earned to basic_6mo', async () => { - data.sub.key = 'basic_earned'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(0); - - data.sub.key = 'basic_6mo'; - data.updatedFrom.key = 'basic_earned'; - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(10); - }); - it('Adds 15 to plan.consecutive.gemCapExtra when upgrading from basic_3mo to basic_12mo', async () => { expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_3mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(5); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(0); data.sub.key = 'basic_12mo'; data.updatedFrom.key = 'basic_3mo'; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(20); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(26); }); - it('Adds 2 to plan.consecutive.trinkets from basic_earned to basic_6mo', async () => { - data.sub.key = 'basic_earned'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(0); - - data.sub.key = 'basic_6mo'; - data.updatedFrom.key = 'basic_earned'; - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); - }); - - it('Adds 2 to plan.consecutive.trinkets when upgrading from basic_6mo to basic_12mo', async () => { + it('Adds 11 to plan.consecutive.trinkets when upgrading from basic_6mo to basic_12mo', async () => { data.sub.key = 'basic_6mo'; expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); + expect(user.purchased.plan.consecutive.trinkets).to.eql(1); data.sub.key = 'basic_12mo'; data.updatedFrom.key = 'basic_6mo'; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(4); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); - it('Adds 3 to plan.consecutive.trinkets when upgrading from basic_3mo to basic_12mo', async () => { + it('Adds 11 to plan.consecutive.trinkets when upgrading from basic_3mo to basic_12mo', async () => { expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); @@ -894,7 +722,7 @@ describe('payments/index', () => { data.updatedFrom.key = 'basic_3mo'; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(4); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); }); @@ -902,21 +730,6 @@ describe('payments/index', () => { beforeEach(async () => { data.updatedFrom = { logic: 'payFull' }; }); - it('Adds 10 to plan.consecutive.gemCapExtra from basic_earned to basic_6mo', async () => { - data.sub.key = 'basic_earned'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(0); - - data.sub.key = 'basic_6mo'; - data.updatedFrom.key = 'basic_earned'; - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(10); - }); it('Adds 20 to plan.consecutive.gemCapExtra when upgrading from basic_3mo to basic_12mo', async () => { expect(user.purchased.plan.planId).to.not.exist; @@ -924,48 +737,32 @@ describe('payments/index', () => { await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_3mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(5); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(0); data.sub.key = 'basic_12mo'; data.updatedFrom.key = 'basic_3mo'; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(25); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(26); }); - it('Adds 2 to plan.consecutive.trinkets from basic_earned to basic_6mo', async () => { - data.sub.key = 'basic_earned'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(0); - - data.sub.key = 'basic_6mo'; - data.updatedFrom.key = 'basic_earned'; - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); - }); - - it('Adds 4 to plan.consecutive.trinkets when upgrading from basic_6mo to basic_12mo', async () => { + it('Adds 11 to plan.consecutive.trinkets when upgrading from basic_6mo to basic_12mo', async () => { data.sub.key = 'basic_6mo'; expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); + expect(user.purchased.plan.consecutive.trinkets).to.eql(1); data.sub.key = 'basic_12mo'; data.updatedFrom.key = 'basic_6mo'; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(6); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); - it('Adds 4 to plan.consecutive.trinkets when upgrading from basic_3mo to basic_12mo', async () => { + it('Adds 11 to plan.consecutive.trinkets when upgrading from basic_3mo to basic_12mo', async () => { expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); @@ -977,7 +774,7 @@ describe('payments/index', () => { data.updatedFrom.key = 'basic_3mo'; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(5); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); }); @@ -988,30 +785,13 @@ describe('payments/index', () => { data.updatedFrom = { logic: 'refundAndRepay' }; }); context('Upgrades within first half of subscription', () => { - it('Adds 10 to plan.consecutive.gemCapExtra from basic_earned to basic_6mo', async () => { - data.sub.key = 'basic_earned'; - expect(user.purchased.plan.planId).to.not.exist; - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(0); - - data.sub.key = 'basic_6mo'; - data.updatedFrom.key = 'basic_earned'; - clock.restore(); - clock = sinon.useFakeTimers(new Date('2022-01-10')); - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(10); - }); - - it('Adds 15 to plan.consecutive.gemCapExtra when upgrading from basic_3mo to basic_12mo', async () => { + it('Adds 26 to plan.consecutive.gemCapExtra when upgrading from basic_3mo to basic_12mo', async () => { expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_3mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(5); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(0); data.sub.key = 'basic_12mo'; data.updatedFrom.key = 'basic_3mo'; @@ -1019,28 +799,10 @@ describe('payments/index', () => { clock = sinon.useFakeTimers(new Date('2022-02-05')); await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(20); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(26); }); - it('Adds 2 to plan.consecutive.trinkets from basic_earned to basic_6mo', async () => { - data.sub.key = 'basic_earned'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(0); - - data.sub.key = 'basic_6mo'; - data.updatedFrom.key = 'basic_earned'; - clock.restore(); - clock = sinon.useFakeTimers(new Date('2022-01-08')); - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); - }); - - it('Adds 3 to plan.consecutive.trinkets when upgrading from basic_3mo to basic_12mo', async () => { + it('Adds 11 to plan.consecutive.trinkets when upgrading from basic_3mo to basic_12mo', async () => { expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); @@ -1054,17 +816,17 @@ describe('payments/index', () => { clock = sinon.useFakeTimers(new Date('2022-01-31')); await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(4); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); - it('Adds 2 to plan.consecutive.trinkets when upgrading from basic_6mo to basic_12mo', async () => { + it('Adds 11 to plan.consecutive.trinkets when upgrading from basic_6mo to basic_12mo', async () => { data.sub.key = 'basic_6mo'; expect(user.purchased.plan.planId).to.not.exist; await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); + expect(user.purchased.plan.consecutive.trinkets).to.eql(1); data.sub.key = 'basic_12mo'; data.updatedFrom.key = 'basic_6mo'; @@ -1072,25 +834,7 @@ describe('payments/index', () => { clock = sinon.useFakeTimers(new Date('2022-01-28')); await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(4); - }); - - it('Adds 2 to plan.consecutive.trinkets from basic_earned to basic_6mo after initial cycle', async () => { - data.sub.key = 'basic_earned'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(0); - - data.sub.key = 'basic_6mo'; - data.updatedFrom.key = 'basic_earned'; - clock.restore(); - clock = sinon.useFakeTimers(new Date('2024-01-08')); - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); it('Adds 2 to plan.consecutive.trinkets when upgrading from basic_6mo to basic_12mo after initial cycle', async () => { @@ -1277,22 +1021,6 @@ describe('payments/index', () => { }); context('Downgrades subscription', () => { - it('does not remove from plan.consecutive.gemCapExtra from basic_6mo to basic_earned', async () => { - data.sub.key = 'basic_6mo'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(10); - - data.sub.key = 'basic_earned'; - data.updatedFrom = { key: 'basic_6mo' }; - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(10); - }); - it('does not remove from plan.consecutive.gemCapExtra from basic_12mo to basic_3mo', async () => { expect(user.purchased.plan.planId).to.not.exist; @@ -1300,28 +1028,12 @@ describe('payments/index', () => { await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(20); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(26); data.sub.key = 'basic_3mo'; data.updatedFrom = { key: 'basic_12mo' }; await api.createSubscription(data); - expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(20); - }); - - it('does not remove from plan.consecutive.trinkets from basic_6mo to basic_earned', async () => { - data.sub.key = 'basic_6mo'; - expect(user.purchased.plan.planId).to.not.exist; - - await api.createSubscription(data); - - expect(user.purchased.plan.planId).to.eql('basic_6mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); - - data.sub.key = 'basic_earned'; - data.updatedFrom = { key: 'basic_6mo' }; - await api.createSubscription(data); - expect(user.purchased.plan.planId).to.eql('basic_earned'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(2); + expect(user.purchased.plan.consecutive.gemCapExtra).to.eql(26); }); it('does not remove from plan.consecutive.trinkets from basic_12mo to basic_3mo', async () => { @@ -1331,12 +1043,12 @@ describe('payments/index', () => { await api.createSubscription(data); expect(user.purchased.plan.planId).to.eql('basic_12mo'); - expect(user.purchased.plan.consecutive.trinkets).to.eql(4); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); data.sub.key = 'basic_3mo'; data.updatedFrom = { key: 'basic_12mo' }; await api.createSubscription(data); - expect(user.purchased.plan.consecutive.trinkets).to.eql(4); + expect(user.purchased.plan.consecutive.trinkets).to.eql(12); }); }); });