mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
58
test/spec/services/questServicesSpec.js
Normal file
58
test/spec/services/questServicesSpec.js
Normal 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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user