habitica-self-host/test/content/armoire.test.js

84 lines
3.1 KiB
JavaScript
Raw Normal View History

2024-04-30 16:11:09 +00:00
/* eslint-disable global-require */
import forEach from 'lodash/forEach';
2024-05-08 15:05:09 +00:00
import {
expectValidTranslationString,
} from '../helpers/content.helper';
function makeArmoireIitemList () {
const armoire = require('../../website/common/script/content/gear/sets/armoire').default;
2024-05-08 15:05:09 +00:00
const items = [];
items.push(...Object.values(armoire.armor));
items.push(...Object.values(armoire.body));
items.push(...Object.values(armoire.eyewear));
items.push(...Object.values(armoire.head));
items.push(...Object.values(armoire.headAccessory));
items.push(...Object.values(armoire.shield));
items.push(...Object.values(armoire.weapon));
2024-05-08 15:05:09 +00:00
return items;
}
2024-04-30 16:11:09 +00:00
describe('armoire', () => {
let clock;
beforeEach(() => {
2024-05-08 15:05:09 +00:00
delete require.cache[require.resolve('../../website/common/script/content/gear/sets/armoire')];
2024-04-30 16:11:09 +00:00
});
afterEach(() => {
clock.restore();
});
it('does not return unreleased gear', async () => {
clock = sinon.useFakeTimers(new Date('2024-01-02'));
2024-05-08 15:05:09 +00:00
const items = makeArmoireIitemList();
expect(items.length).to.equal(377);
expect(items.filter(item => item.set === 'pottersSet' || item.set === 'optimistSet' || item.set === 'schoolUniform')).to.be.an('array').that.is.empty;
2024-04-30 16:11:09 +00:00
});
2024-05-08 15:05:09 +00:00
it('released gear has all required properties', async () => {
clock = sinon.useFakeTimers(new Date('2024-05-08'));
const items = makeArmoireIitemList();
2024-05-14 09:07:15 +00:00
expect(items.length).to.equal(396);
2024-05-08 15:05:09 +00:00
forEach(items, item => {
if (item.set !== undefined) {
2024-05-14 09:07:15 +00:00
expect(item.set, item.key).to.be.a('string');
expect(item.set, item.key).to.not.be.empty;
2024-05-08 15:05:09 +00:00
}
expectValidTranslationString(item.text);
2024-05-14 09:07:15 +00:00
expect(item.value, item.key).to.be.a('number');
2024-05-08 15:05:09 +00:00
});
});
it('releases gear when appropriate', async () => {
clock = sinon.useFakeTimers(new Date('2024-01-01T00:00:00.000Z'));
2024-05-08 15:05:09 +00:00
const items = makeArmoireIitemList();
expect(items.length).to.equal(377);
clock.restore();
delete require.cache[require.resolve('../../website/common/script/content/gear/sets/armoire')];
clock = sinon.useFakeTimers(new Date('2024-01-08'));
const januaryItems = makeArmoireIitemList();
expect(januaryItems.length).to.equal(381);
clock.restore();
delete require.cache[require.resolve('../../website/common/script/content/gear/sets/armoire')];
clock = sinon.useFakeTimers(new Date('2024-02-07'));
const januaryItems2 = makeArmoireIitemList();
expect(januaryItems2.length).to.equal(381);
clock.restore();
delete require.cache[require.resolve('../../website/common/script/content/gear/sets/armoire')];
clock = sinon.useFakeTimers(new Date('2024-02-07T09:00:00.000Z'));
2024-05-08 15:05:09 +00:00
const febuaryItems = makeArmoireIitemList();
2024-06-10 12:11:38 +00:00
expect(febuaryItems.length).to.equal(384);
2024-05-08 15:05:09 +00:00
});
2024-06-10 12:44:21 +00:00
it('sets have at least 2 items', () => {
const armoire = makeArmoireIitemList();
const setMap = {};
forEach(armoire, item => {
if (setMap[item.set] === undefined) {
setMap[item.set] = 0;
}
setMap[item.set] += 1;
});
Object.keys(setMap).forEach(set => {
expect(setMap[set], set).to.be.at.least(2);
});
});
2024-04-30 16:11:09 +00:00
});