Ghost/ghost/limit-service/test/date-utils.test.js

77 lines
3.1 KiB
JavaScript
Raw Normal View History

// Switch these lines once there are useful utils
// const testUtils = require('./utils');
require('./utils');
const {subWeeks, subMonths} = require('date-fns');
const sinon = require('sinon');
const {lastPeriodStart} = require('../lib/date-utils');
describe('Date Utils', function () {
describe('fn: lastPeriodStart', function () {
let clock;
afterEach(function () {
if (clock) {
clock.restore();
}
});
it('returns same date if current date is less than a period away from current date', async function () {
const weekAgoDate = subWeeks(new Date(), 1);
const weekAgoISO = weekAgoDate.toISOString();
const lastPeriodStartDate = lastPeriodStart(weekAgoISO, 'month');
lastPeriodStartDate.should.equal(weekAgoISO);
});
it('returns beginning of last month\'s period', async function () {
const weekAgoDate = subWeeks(new Date(), 1);
const weekAgoISO = weekAgoDate.toISOString();
const weekAndAMonthAgo = subMonths(weekAgoDate, 1);
const weekAndAMonthAgoISO = weekAndAMonthAgo.toISOString();
const lastPeriodStartDate = lastPeriodStart(weekAndAMonthAgoISO, 'month');
lastPeriodStartDate.should.equal(weekAgoISO);
});
it('returns 3rd day or current month when monthly period started on 3rd day in the past', async function () {
// fake current clock to be past 3rd day of a month
clock = sinon.useFakeTimers(new Date('2021-08-18T19:00:52Z').getTime());
const lastPeriodStartDate = lastPeriodStart('2020-03-03T23:00:01Z', 'month');
lastPeriodStartDate.should.equal('2021-08-03T23:00:01.000Z');
});
it('returns 5rd day or last month when monthly period started on 5th day in the past and it is 3rd day of the month', async function () {
// fake current clock to be on 3rd day of a month
clock = sinon.useFakeTimers(new Date('2021-09-03T12:12:12Z').getTime());
const lastPeriodStartDate = lastPeriodStart('2020-03-05T11:11:11Z', 'month');
lastPeriodStartDate.should.equal('2021-08-05T11:11:11.000Z');
});
it('return 29th of Feb if the subscription started on the 31st day and it is a leap year', async function () {
// fake current clock to be march of a leap year
clock = sinon.useFakeTimers(new Date('2020-03-05T13:15:07Z').getTime());
const lastPeriodStartDate = lastPeriodStart('2020-01-31T23:00:01Z', 'month');
lastPeriodStartDate.should.equal('2020-02-29T23:00:01.000Z');
});
it('return 28th of Feb if the subscription started on the 30th day and it is **not** a leap year', async function () {
// fake current clock to be March of non-leap year
clock = sinon.useFakeTimers(new Date('2021-03-05T13:15:07Z').getTime());
const lastPeriodStartDate = lastPeriodStart('2019-04-30T01:59:42Z', 'month');
lastPeriodStartDate.should.equal('2021-02-28T01:59:42.000Z');
});
});
});