diff --git a/test/common/user.fns.buy.test.js b/test/common/user.fns.buy.test.js index 9296c5eedd..be07d69a91 100644 --- a/test/common/user.fns.buy.test.js +++ b/test/common/user.fns.buy.test.js @@ -27,12 +27,7 @@ describe('user.fns.buy', function() { shared.wrap(user); - sinon.stub(user.fns, 'randomVal', function(obj) { - // too many predictableRandom calls to stub, let's return the last element - var last = _.last(obj); - return last; - }); - + sinon.stub(user.fns, 'randomVal'); sinon.stub(user.fns, 'predictableRandom'); }); @@ -82,101 +77,114 @@ describe('user.fns.buy', function() { user.items.food = {}; }); - it('does not open if user does not have enough gold', function(done) { - user.fns.predictableRandom.returns(YIELD_EQUIPMENT); - user.stats.gp = 50; + context('failure conditions', function() { + it('does not open if user does not have enough gold', function(done) { + user.fns.predictableRandom.returns(YIELD_EQUIPMENT); + user.stats.gp = 50; + + user.ops.buy({params: {key: 'armoire'}}, function(response) { + expect(response.message).to.eql('Not Enough Gold'); + expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + expect(user.items.food).to.be.empty; + expect(user.stats.exp).to.eql(0); + done(); + }); + }); + + it('does not open without Ultimate Gear achievement',function(done) { + user.fns.predictableRandom.returns(YIELD_EQUIPMENT); + user.achievements.ultimateGearSets = {'healer':false,'wizard':false,'rogue':false,'warrior':false}; + + user.ops.buy({params: {key: 'armoire'}}, function(response) { + expect(response.message).to.eql("You can't buy this item"); + expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + expect(user.items.food).to.be.empty; + expect(user.stats.exp).to.eql(0); + done(); + }); + }); + }); + + context('non-gear awards', function() { + it('gives Experience', function() { + user.fns.predictableRandom.returns(YIELD_EXP); + + user.ops.buy({params: {key: 'armoire'}}) - user.ops.buy({params: {key: 'armoire'}}, function(response) { - expect(response.message).to.eql('Not Enough Gold'); expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); expect(user.items.food).to.be.empty; + expect(user.stats.exp).to.eql(46); + expect(user.stats.gp).to.eql(100); + }); + + it('gives food', function() { + var honey = Content.food.Honey; + user.fns.randomVal.returns(honey); + user.fns.predictableRandom.returns(YIELD_FOOD); + + user.ops.buy({params: {key: 'armoire'}}) + + expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + expect(user.items.food).to.eql({'Honey': 1}); expect(user.stats.exp).to.eql(0); - done(); + expect(user.stats.gp).to.eql(100); + }); + + it('does not give equipment if all equipment has been found', function() { + user.fns.predictableRandom.returns(YIELD_EQUIPMENT); + user.items.gear.owned = fullArmoire; + user.stats.gp = 150; + + user.ops.buy({params: {key: 'armoire'}}); + + expect(user.items.gear.owned).to.eql(fullArmoire); + var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); + expect(armoireCount).to.eql(0); + + expect(user.stats.exp).to.eql(30); + expect(user.stats.gp).to.eql(50); }); }); - it('does not open without Ultimate Gear achievement',function(done) { - user.fns.predictableRandom.returns(YIELD_EQUIPMENT); - user.achievements.ultimateGearSets = {'healer':false,'wizard':false,'rogue':false,'warrior':false}; + context('gear awards', function() { + beforeEach(function() { + var shield = Content.gear.tree.shield.armoire.gladiatorShield; + user.fns.randomVal.returns(shield); + }); - user.ops.buy({params: {key: 'armoire'}}, function(response) { - expect(response.message).to.eql("You can't buy this item"); - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); + it('always drops equipment the first time', function() { + delete user.flags.armoireOpened; + user.fns.predictableRandom.returns(YIELD_EXP); + + user.ops.buy({params: {key: 'armoire'}}); + + expect(user.items.gear.owned).to.eql({ + 'weapon_warrior_0': true, + 'shield_armoire_gladiatorShield': true + }); + + var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); + expect(armoireCount).to.eql (_.size(fullArmoire) - 1) expect(user.items.food).to.be.empty; expect(user.stats.exp).to.eql(0); - done(); - }); - }); - - it('always drops equipment the first time', function() { - delete user.flags.armoireOpened; - user.fns.predictableRandom.returns(YIELD_EXP); - - user.ops.buy({params: {key: 'armoire'}}); - - expect(user.items.gear.owned).to.eql({ - 'weapon_warrior_0': true, - 'shield_armoire_gladiatorShield': true + expect(user.stats.gp).to.eql(100); }); - var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); - expect(armoireCount).to.eql (_.size(fullArmoire) - 1) - expect(user.items.food).to.be.empty; - expect(user.stats.exp).to.eql(0); - expect(user.stats.gp).to.eql(100); - }); + it('gives more equipment', function() { + user.fns.predictableRandom.returns(YIELD_EQUIPMENT); + user.items.gear.owned = { + weapon_warrior_0: true, + head_armoire_hornedIronHelm: true + }; + user.stats.gp = 200; - it('gives Experience', function() { - user.fns.predictableRandom.returns(YIELD_EXP); + user.ops.buy({params: {key: 'armoire'}}); - user.ops.buy({params: {key: 'armoire'}}) - - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); - expect(user.items.food).to.be.empty; - expect(user.stats.exp).to.eql(46); - expect(user.stats.gp).to.eql(100); - }); - - it('gives food', function() { - user.fns.predictableRandom.returns(YIELD_FOOD); - - user.ops.buy({params: {key: 'armoire'}}) - - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true}); - expect(user.items.food).to.eql({'Honey': 1}); - expect(user.stats.exp).to.eql(0); - expect(user.stats.gp).to.eql(100); - }); - - it('gives more equipment', function() { - user.fns.predictableRandom.returns(YIELD_EQUIPMENT); - user.items.gear.owned = { - weapon_warrior_0: true, - head_armoire_hornedIronHelm: true - }; - user.stats.gp = 200; - - user.ops.buy({params: {key: 'armoire'}}); - - expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true, 'head_armoire_hornedIronHelm':true}); - var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); - expect(armoireCount).to.eql((_.size(fullArmoire) - 2)); - expect(user.stats.gp).to.eql(100); - }); - - it('does not give equipment if all equipment has been found', function() { - user.fns.predictableRandom.returns(YIELD_EQUIPMENT); - user.items.gear.owned = fullArmoire; - user.stats.gp = 150; - - user.ops.buy({params: {key: 'armoire'}}); - - expect(user.items.gear.owned).to.eql(fullArmoire); - var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); - expect(armoireCount).to.eql(0); - - expect(user.stats.exp).to.eql(30); - expect(user.stats.gp).to.eql(50); + expect(user.items.gear.owned).to.eql({'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true, 'head_armoire_hornedIronHelm':true}); + var armoireCount = shared.count.remainingGearInSet(user.items.gear.owned, 'armoire'); + expect(armoireCount).to.eql((_.size(fullArmoire) - 2)); + expect(user.stats.gp).to.eql(100); + }); }); }); });