mirror of
https://github.com/HabitRPG/habitica.git
synced 2026-04-26 03:40:37 -05:00
* invalid class-change throws error minor fixes indentation fixes indentation fixes indentation fixes * minor fixes
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import changeClass from '../../../website/common/script/ops/changeClass';
|
||||
import {
|
||||
NotAuthorized,
|
||||
BadRequest,
|
||||
} from '../../../website/common/script/libs/errors';
|
||||
import i18n from '../../../website/common/script/i18n';
|
||||
import {
|
||||
@@ -27,6 +28,19 @@ describe('shared.ops.changeClass', () => {
|
||||
}
|
||||
});
|
||||
|
||||
it('req.query.class is an invalid class', (done) => {
|
||||
user.flags.classSelected = false;
|
||||
user.preferences.disableClasses = false;
|
||||
|
||||
try {
|
||||
changeClass(user, {query: {class: 'cellist'}});
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(BadRequest);
|
||||
expect(err.message).to.equal(i18n.t('invalidClass'));
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
context('req.query.class is a valid class', () => {
|
||||
it('errors if user.stats.flagSelected is true and user.balance < 0.75', (done) => {
|
||||
user.flags.classSelected = true;
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
"mystery": "Mystery",
|
||||
"changeClass": "Change Class, Refund Attribute Points",
|
||||
"lvl10ChangeClass": "To change class you must be at least level 10.",
|
||||
"invalidClass":"Invalid class. Please specify 'warrior', 'rogue', 'wizard', or 'healer'.",
|
||||
"levelPopover": "Each level earns you one point to assign to an attribute of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
|
||||
"unallocated": "Unallocated Attribute Points",
|
||||
"haveUnallocated": "You have <%= points %> unallocated Attribute Point(s)",
|
||||
|
||||
@@ -7,15 +7,39 @@ import splitWhitespace from '../libs/splitWhitespace';
|
||||
import { capByLevel } from '../statHelpers';
|
||||
import {
|
||||
NotAuthorized,
|
||||
BadRequest,
|
||||
} from '../libs/errors';
|
||||
|
||||
function resetClass (user, req = {}) {
|
||||
if (user.preferences.disableClasses) {
|
||||
user.preferences.disableClasses = false;
|
||||
user.preferences.autoAllocate = false;
|
||||
} else {
|
||||
if (user.balance < 0.75) throw new NotAuthorized(i18n.t('notEnoughGems', req.language));
|
||||
user.balance -= 0.75;
|
||||
}
|
||||
|
||||
user.stats.str = 0;
|
||||
user.stats.con = 0;
|
||||
user.stats.per = 0;
|
||||
user.stats.int = 0;
|
||||
user.stats.points = capByLevel(user.stats.lvl);
|
||||
user.flags.classSelected = false;
|
||||
}
|
||||
|
||||
module.exports = function changeClass (user, req = {}, analytics) {
|
||||
let klass = get(req, 'query.class');
|
||||
|
||||
// user.flags.classSelected is set to false after the user paid the 3 gems
|
||||
if (user.stats.lvl < 10) {
|
||||
throw new NotAuthorized(i18n.t('lvl10ChangeClass', req.language));
|
||||
} else if (!user.flags.classSelected && (klass === 'warrior' || klass === 'rogue' || klass === 'wizard' || klass === 'healer')) {
|
||||
} else if (!klass) {
|
||||
// if no class is specified, reset points and set user.flags.classSelected to false. User will have paid 3 gems and will be prompted to select class.
|
||||
resetClass(user, req);
|
||||
} else if (klass === 'warrior' || klass === 'rogue' || klass === 'wizard' || klass === 'healer') {
|
||||
if (user.flags.classSelected) {
|
||||
resetClass(user, req);
|
||||
}
|
||||
|
||||
user.stats.class = klass;
|
||||
user.flags.classSelected = true;
|
||||
|
||||
@@ -56,22 +80,9 @@ module.exports = function changeClass (user, req = {}, analytics) {
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (user.preferences.disableClasses) {
|
||||
user.preferences.disableClasses = false;
|
||||
user.preferences.autoAllocate = false;
|
||||
} else {
|
||||
if (user.balance < 0.75) throw new NotAuthorized(i18n.t('notEnoughGems', req.language));
|
||||
user.balance -= 0.75;
|
||||
}
|
||||
|
||||
user.stats.str = 0;
|
||||
user.stats.con = 0;
|
||||
user.stats.per = 0;
|
||||
user.stats.int = 0;
|
||||
user.stats.points = capByLevel(user.stats.lvl);
|
||||
user.flags.classSelected = false;
|
||||
// if invalid class is specified, throw an error.
|
||||
throw new BadRequest(i18n.t('invalidClass', req.language));
|
||||
}
|
||||
|
||||
return [
|
||||
pick(user, splitWhitespace('stats flags items preferences')),
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user