diff --git a/common/script/index.coffee b/common/script/index.coffee index 090d5d3be7..fc1b0978cb 100644 --- a/common/script/index.coffee +++ b/common/script/index.coffee @@ -925,6 +925,7 @@ api.wrap = (user, main=true) -> {key} = req.params item = content.quests[key] return cb?({code:404, message:"Quest '#{key} not found (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content.coffee)"}) unless item + return cb?({code:404, message:"Quest '#{key} is not a Gold-purchasable quest (see https://github.com/HabitRPG/habitrpg/blob/develop/common/script/content.coffee)"}) unless item.category is 'gold' and item.goldValue return cb?({code:401, message: i18n.t('messageNotEnoughGold', req.language)}) if user.stats.gp < item.goldValue message = i18n.t('messageBought', {itemText: item.text(req.language)}, req.language) user.items.quests[item.key] ?= 0 diff --git a/migrations/restock_armoire.js b/migrations/restock_armoire.js index 54765995de..f29b52493d 100644 --- a/migrations/restock_armoire.js +++ b/migrations/restock_armoire.js @@ -2,4 +2,4 @@ db.users.update( {'flags.armoireEmpty':true}, {$set:{'flags.armoireEmpty':false}}, {multi:true} -); \ No newline at end of file +); diff --git a/test/common/algos.mocha.coffee b/test/common/algos.mocha.coffee index 423c182d84..075801b854 100644 --- a/test/common/algos.mocha.coffee +++ b/test/common/algos.mocha.coffee @@ -484,7 +484,22 @@ describe 'User', -> describe 'Enchanted Armoire', -> user = newUser() - fullArmoire = {'weapon_warrior_0': true, 'armor_armoire_gladiatorArmor':true,'armor_armoire_lunarArmor':true,'head_armoire_gladiatorHelm':true,'head_armoire_lunarCrown':true,'head_armoire_rancherHat':true,'head_armoire_redHairbow':true,'head_armoire_violetFloppyHat':true,'shield_armoire_gladiatorShield':true,'weapon_armoire_basicCrossbow':true,'weapon_armoire_lunarSceptre':true} + fullArmoire = {'weapon_warrior_0': true, + 'armor_armoire_gladiatorArmor':true, + 'armor_armoire_lunarArmor':true, + 'armor_armoire_rancherRobes':true, + 'head_armoire_blueHairbow':true, + 'head_armoire_gladiatorHelm':true, + 'head_armoire_lunarCrown':true, + 'head_armoire_rancherHat':true, + 'head_armoire_redHairbow':true, + 'head_armoire_royalCrown':true, + 'head_armoire_violetFloppyHat':true, + 'shield_armoire_gladiatorShield':true, + 'weapon_armoire_basicCrossbow':true, + 'weapon_armoire_lunarSceptre':true, + 'weapon_armoire_rancherLasso':true + } beforeEach -> # too many predictableRandom calls to stub, let's return the last element @@ -545,7 +560,7 @@ describe 'User', -> it 'gives more equipment', -> sinon.stub(user.fns, 'predictableRandom', cycle [.5,.5]) user.ops.buy({params: {key: 'armoire'}}) - expect(user.items.gear.owned).to.eql {'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true,'head_armoire_rancherHat':true} + expect(user.items.gear.owned).to.eql {'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true, 'head_armoire_blueHairbow':true} expect(shared.countArmoire(user.items.gear.owned)).to.eql (_.size(fullArmoire) - 3) expect(user.items.food).to.eql {'Honey': 1} expect(user.stats.exp).to.eql 30 diff --git a/test/spec/services/questServicesSpec.js b/test/spec/services/questServicesSpec.js new file mode 100644 index 0000000000..210ea64286 --- /dev/null +++ b/test/spec/services/questServicesSpec.js @@ -0,0 +1,58 @@ +'use strict'; + +describe('Quests Service', function() { + var questsService, user, quest; + + beforeEach(function() { + user = specHelper.newUser(); + user.achievements.quests = {}; + quest = {lvl:20}; + + module(function($provide) { + $provide.value('User', {user: user}); + }); + + inject(function(Quests) { + questsService = Quests; + }); + }); + + context('functions', function() { + + describe('lock quest', function() { + + it('locks quest when user does not meet level requirement', function() { + user.stats.lvl = 15; + + expect(questsService.lockQuest(quest)).to.be(true); + }); + + it('does not lock quest if we ignore level requirement', function() { + user.stats.lvl = 15; + + expect(questsService.lockQuest(quest,true)).to.be(false); + }); + + it('does not lock quest if user meets level requirement', function() { + user.stats.lvl = 20; + + expect(questsService.lockQuest(quest)).to.be(false); + }); + + it('locks quest if user has not completed previous quest in series', function() { + quest.previous = 'priorQuest'; + user.stats.lvl = 25; + + expect(questsService.lockQuest(quest)).to.be(true); + }); + + it('does not lock quest if user has completed previous quest in series', function() { + quest.previous = 'priorQuest'; + user.stats.lvl = 25; + user.achievements.quests.priorQuest = 1; + + expect(questsService.lockQuest(quest)).to.be(false); + }); + }); + }); +}); \ No newline at end of file