mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 06:07:21 +01:00
161 lines
4.4 KiB
JavaScript
161 lines
4.4 KiB
JavaScript
/* eslint-disable camelcase */
|
|
|
|
import revive from '../../../website/common/script/ops/revive';
|
|
import i18n from '../../../website/common/script/i18n';
|
|
import {
|
|
generateUser,
|
|
} from '../../helpers/common.helper';
|
|
import {
|
|
NotAuthorized,
|
|
} from '../../../website/common/script/libs/errors';
|
|
import content from '../../../website/common/script/content/index';
|
|
|
|
describe('shared.ops.revive', () => {
|
|
let user;
|
|
|
|
beforeEach(() => {
|
|
user = generateUser();
|
|
user.stats.hp = 0;
|
|
});
|
|
|
|
it('returns an error when user is not dead', done => {
|
|
user.stats.hp = 10;
|
|
|
|
try {
|
|
revive(user);
|
|
} catch (err) {
|
|
expect(err).to.be.an.instanceof(NotAuthorized);
|
|
expect(err.message).to.equal(i18n.t('cannotRevive'));
|
|
done();
|
|
}
|
|
});
|
|
|
|
it('resets user\'s hp, exp and gp', () => {
|
|
user.stats.exp = 100;
|
|
user.stats.gp = 100;
|
|
|
|
revive(user);
|
|
|
|
expect(user.stats.hp).to.equal(50);
|
|
expect(user.stats.exp).to.equal(0);
|
|
expect(user.stats.gp).to.equal(0);
|
|
});
|
|
|
|
it('decreases user\'s level', () => {
|
|
user.stats.lvl = 2;
|
|
revive(user);
|
|
|
|
expect(user.stats.lvl).to.equal(1);
|
|
});
|
|
|
|
it('decreases a stat', () => {
|
|
user.stats.str = 2;
|
|
revive(user);
|
|
|
|
expect(user.stats.str).to.equal(1);
|
|
});
|
|
|
|
it('it decreases a random stat from str, con, per, int by one', () => {
|
|
const stats = ['str', 'con', 'per', 'int'];
|
|
|
|
_.each(stats, s => {
|
|
user.stats[s] = 1;
|
|
});
|
|
|
|
revive(user);
|
|
|
|
const statSum = _.reduce(stats, (m, k) => m + user.stats[k], 0);
|
|
|
|
expect(statSum).to.equal(3);
|
|
});
|
|
|
|
it('removes a random item from user gear owned', () => {
|
|
const weaponKey = 'weapon_warrior_0';
|
|
user.items.gear.owned[weaponKey] = true;
|
|
|
|
const [, message] = revive(user);
|
|
|
|
expect(message).to.equal(i18n.t('messageLostItem', { itemText: content.gear.flat[weaponKey].text() }));
|
|
expect(user.items.gear.owned[weaponKey]).to.be.false;
|
|
});
|
|
|
|
it('does not remove 0 value items', () => {
|
|
user.items.gear.owned = {
|
|
eyewear_special_yellowTopFrame: true,
|
|
};
|
|
|
|
revive(user);
|
|
|
|
expect(user.items.gear.owned.eyewear_special_yellowTopFrame).to.be.true;
|
|
});
|
|
|
|
it('allows removing warrior sword (0 value item)', () => {
|
|
user.items.gear.owned = {
|
|
weapon_warrior_0: true,
|
|
};
|
|
|
|
const weaponKey = 'weapon_warrior_0';
|
|
|
|
const [, message] = revive(user);
|
|
|
|
expect(message).to.equal(i18n.t('messageLostItem', { itemText: content.gear.flat[weaponKey].text() }));
|
|
expect(user.items.gear.owned[weaponKey]).to.be.false;
|
|
});
|
|
|
|
it('does not remove items of a different class', () => {
|
|
const weaponKey = 'weapon_wizard_1';
|
|
user.items.gear.owned[weaponKey] = true;
|
|
|
|
const [, message] = revive(user);
|
|
|
|
expect(message).to.equal('');
|
|
expect(user.items.gear.owned[weaponKey]).to.be.true;
|
|
});
|
|
|
|
it('removes "special" items', () => {
|
|
const weaponKey = 'weapon_special_1';
|
|
user.items.gear.owned[weaponKey] = true;
|
|
|
|
const [, message] = revive(user);
|
|
|
|
expect(message).to.equal(i18n.t('messageLostItem', { itemText: content.gear.flat[weaponKey].text() }));
|
|
expect(user.items.gear.owned[weaponKey]).to.be.false;
|
|
});
|
|
|
|
it('removes "armoire" items', () => {
|
|
const weaponKey = 'armor_armoire_goldenToga';
|
|
user.items.gear.owned[weaponKey] = true;
|
|
|
|
const [, message] = revive(user);
|
|
|
|
expect(message).to.equal(i18n.t('messageLostItem', { itemText: content.gear.flat[weaponKey].text() }));
|
|
expect(user.items.gear.owned[weaponKey]).to.be.false;
|
|
});
|
|
|
|
it('dequips lost item from user if user had it equipped', () => {
|
|
const weaponKey = 'weapon_warrior_0';
|
|
const itemToLose = content.gear.flat[weaponKey];
|
|
|
|
user.items.gear.owned[weaponKey] = true;
|
|
user.items.gear.equipped[itemToLose.type] = itemToLose.key;
|
|
|
|
const [, message] = revive(user);
|
|
|
|
expect(message).to.equal(i18n.t('messageLostItem', { itemText: itemToLose.text() }));
|
|
expect(user.items.gear.equipped[itemToLose.type]).to.equal(`${itemToLose.type}_base_0`);
|
|
});
|
|
|
|
it('dequips lost item from user costume if user was using it in costume', () => {
|
|
const weaponKey = 'weapon_warrior_0';
|
|
const itemToLose = content.gear.flat[weaponKey];
|
|
|
|
user.items.gear.owned[weaponKey] = true;
|
|
user.items.gear.costume[itemToLose.type] = itemToLose.key;
|
|
|
|
const [, message] = revive(user);
|
|
|
|
expect(message).to.equal(i18n.t('messageLostItem', { itemText: itemToLose.text() }));
|
|
expect(user.items.gear.costume[itemToLose.type]).to.equal(`${itemToLose.type}_base_0`);
|
|
});
|
|
});
|