Ported reset. Added unit tests. Added reset route. Added integration tests

This commit is contained in:
Keith Holliday
2016-04-12 11:16:54 -05:00
parent 40c9366a47
commit 3970064fe5
10 changed files with 233 additions and 31 deletions

View File

@@ -5,7 +5,7 @@ import { MAX_LEVEL } from '../constants';
import {
NotAuthorized,
} from '../libs/errors';
import resetGear from './resetGear';
import resetGear from '../fns/resetGear';
import equip from './equip';
const USERSTATSLIST = ['per', 'int', 'con', 'str', 'points', 'gp', 'exp', 'mp'];

View File

@@ -1,35 +1,28 @@
import _ from 'lodash';
import resetGear from '../fns/resetGear';
import i18n from '../i18n';
module.exports = function(user, req, cb) {
var gear;
user.habits = [];
user.dailys = [];
user.todos = [];
user.rewards = [];
module.exports = function reset (user, tasks = []) {
user.stats.hp = 50;
user.stats.lvl = 1;
user.stats.gp = 0;
user.stats.exp = 0;
gear = user.items.gear;
_.each(['equipped', 'costume'], function(type) {
gear[type].armor = 'armor_base_0';
gear[type].weapon = 'weapon_base_0';
gear[type].head = 'head_base_0';
return gear[type].shield = 'shield_base_0';
});
if (typeof gear.owned === 'undefined') {
gear.owned = {};
}
_.each(gear.owned, function(v, k) {
if (gear.owned[k]) {
gear.owned[k] = false;
let tasksToRemove = [];
tasks.forEach(task => {
if (!task.challenge || !task.challenge.id || task.challenge.broken) {
tasksToRemove.push(task._id);
let i = user.tasksOrder[`${task.type}s`].indexOf(task._id);
if (i !== -1) user.tasksOrder[`${task.type}s`].splice(i, 1);
tasksToRemove.push(task._id);
}
return true;
});
gear.owned.weapon_warrior_0 = true;
if (typeof user.markModified === "function") {
user.markModified('items.gear.owned');
}
user.preferences.costume = false;
return typeof cb === "function" ? cb(null, user) : void 0;
resetGear(user);
let response = {
data: {user, tasksToRemove},
message: i18n.t('resetComplete'),
};
return response;
};

View File

@@ -1,25 +0,0 @@
import _ from 'lodash';
import content from '../content/index';
module.exports = function resetGear (user) {
let gear = user.items.gear;
_.each(['equipped', 'costume'], function resetUserGear (type) {
gear[type] = {};
gear[type].armor = 'armor_base_0';
gear[type].weapon = 'weapon_warrior_0';
gear[type].head = 'head_base_0';
gear[type].shield = 'shield_base_0';
});
// Gear.owned is a Mongo object so the _.each function iterates over hidden properties.
// The content.gear.flat[k] check should prevent this causing an error
_.each(gear.owned, function resetOwnedGear (v, k) {
if (gear.owned[k] && content.gear.flat[k] && content.gear.flat[k].value) {
gear.owned[k] = false;
}
});
gear.owned.weapon_warrior_0 = true; // eslint-disable-line camelcase
user.preferences.costume = false;
};