Files
habitica/test/content/quests.js
2015-10-03 09:21:06 -05:00

141 lines
3.4 KiB
JavaScript

import {each} from 'lodash';
import {
all as allQuests,
byLevel as questsByLevel
} from '../../common/script/src/content/quests';
describeEachItem('Quests', allQuests, (quest, key) => {
context('attributes', () => {
it('has a key', () => {
expect(quest.key).to.eql(key);
});
it('has a category', () => {
expect(quest.category).to.not.be.empty;
});
it('has a valid text attribute', () => {
expectValidTranslationString(quest.text);
});
it('has a valid notes attribute', () => {
expectValidTranslationString(quest.notes);
});
if (quest.previous) {
it('has a valid previous quest', () => {
expect(allQuests[quest.previous]).to.exist;
});
}
if (quest.completion) {
it('has a valid completion attribute', () => {
expectValidTranslationString(quest.completion);
});
}
it('has a canBuy function', () => {
expect(quest.canBuy).to.be.a('function');
});
it('has a value', () => {
expect(quest.value).to.be.at.least(0);
});
});
if (quest.boss) {
context('boss', () => {
it('has a valid boss name attribute', () => {
expectValidTranslationString(quest.boss.name);
});
it('has an hp attribute', () => {
expect(quest.boss.hp).to.be.greaterThan(0);
});
it('has a str attribute', () => {
expect(quest.boss.str).to.be.greaterThan(0);
});
it('has a def attribute', () => {
expect(quest.boss.def).to.be.greaterThan(0);
});
if (quest.boss.rage) {
context('rage', () => {
it('has a title attribute', () => {
expectValidTranslationString(quest.boss.rage.title);
});
it('has a description attribute', () => {
expectValidTranslationString(quest.boss.rage.description);
});
it('has a value attribute', () => {
expect(quest.boss.rage.value).to.be.greaterThan(0);
});
if (quest.boss.rage.healing) {
it('has a healing attribute', () => {
expect(quest.boss.rage.healing).to.be.greaterThan(0);
});
}
if (quest.boss.rage.effect) {
it('has an effect attribute', () => {
expectValidTranslationString(quest.boss.rage.effect);
});
}
});
}
});
}
if (quest.collect) {
context('collection', () => {
each(quest.collect, (item, key) => {
it(`${key} has a valid text attribute`, () => {
expectValidTranslationString(item.text);
expect(item.count).to.be.greaterThan(0);
});
});
});
}
context('drops', () => {
it('has drops', () => {
expect(quest.drop).to.exist;
});
it('has a gold value', () => {
expect(quest.drop.gp).to.be.at.least(0);
});
it('has a exp value', () => {
expect(quest.drop.exp).to.be.at.least(0);
});
if (quest.items) {
it('has items', () => {
expect(quest.drop.items).to.be.an('array');
expect(quest.drop.items).to.have.length.above(0);
});
}
});
});
describe('Quests by Level', () => {
let lastLevel = 0;
it('orders quests by level', () => {
each(questsByLevel, (quest, key) => {
let questLvl = quest.lvl || 0;
expect(questLvl).to.be.at.least(lastLevel);
lastLevel = questLvl;
});
expect(lastLevel).to.be.greaterThan(0);
});
});