Files
blitzcrank/plugins/nag/index.test.ts

100 lines
2.6 KiB
TypeScript

import {Sequelize } from 'sequelize';
import {afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import {
findGuiltyNags,
getCheckIn,
nextCheckInDate,
} from '.';
import { CheckIn, initializeModels, Nag } from './models'
describe('nextCheckInDate', () => {
beforeEach(() => {
vi.useFakeTimers(); // Tell vitest to use fake timers
});
afterEach(() => {
vi.useRealTimers(); // Reset date after test runs
});
it('Returns 9AM if called before 9AM that day', () => {
const now = new Date(Date.now());
const at9AM = new Date(
now.getFullYear(),
now.getMonth(),
now.getDate(),
9,
0,
);
vi.setSystemTime(
new Date(now.getFullYear(), now.getMonth(), now.getDate(), 8, 0),
);
expect(nextCheckInDate()).toEqual(at9AM);
});
it('Returns 9AM tomorrow if called after 9AM', () => {
const dayInMS = 24 * 60 * 60 * 1000;
const now = new Date(Date.now());
const tomorrow = new Date(Date.now() + dayInMS);
const tomorrow9AM = new Date(
tomorrow.getFullYear(),
tomorrow.getMonth(),
tomorrow.getDate(),
9,
0,
);
vi.setSystemTime(
new Date(now.getFullYear(), now.getMonth(), now.getDate(), 9, 30),
);
expect(nextCheckInDate()).toEqual(tomorrow9AM);
});
});
describe('Finding nags without check-ins', async () => {
const sequelize = new Sequelize('sqlite://:memory:');
const exampleNag = {
userId: '1234',
guildId: '1234',
channelId: '1234',
messageId: '1234',
text: 'Example nag 1',
mentionHere: false,
};
await initializeModels(sequelize);
beforeEach(async () => {
vi.useFakeTimers();
await Nag.sync();
await CheckIn.sync();
});
afterEach(async () => {
await Nag.drop();
await CheckIn.drop();
vi.useRealTimers();
});
it('Finds nags without any check-ins', async () => {
const now = new Date();
vi.setSystemTime(
new Date(now.getFullYear(), now.getMonth(), now.getDate(), 9),
);
await Nag.create(exampleNag);
const results = await findGuiltyNags();
expect(results.map(nag => nag.userId)).toEqual(['1234']);
});
it('Ignores nags with a recent check-in', async () => {
const currentCheckInTime = getCheckIn(9, 0);
vi.setSystemTime(currentCheckInTime);
const newNag = await Nag.create(exampleNag);
newNag.save();
const newCheckIn = await CheckIn.create({
nagId: newNag.id,
// 1 hour previously; i.e. we checked in before the required time
lastCheckIn: new Date(currentCheckInTime.getTime() - 60 * 60 * 1000),
});
console.log(newCheckIn.lastCheckIn);
newCheckIn.save();
const results = await findGuiltyNags();
expect(results.map(nag => nag.userId)).toEqual([]);
});
});