test(quests): Quests Service spec WIP

First test on new Quests Service. Also fix Armoire tests to account for new items.
This commit is contained in:
Sabe Jones
2015-07-13 19:16:29 -05:00
parent b9f795529b
commit 266b6b87e2
4 changed files with 77 additions and 3 deletions

View File

@@ -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

View File

@@ -2,4 +2,4 @@ db.users.update(
{'flags.armoireEmpty':true},
{$set:{'flags.armoireEmpty':false}},
{multi:true}
);
);

View File

@@ -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

View File

@@ -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);
});
});
});
});