From 7f3bfa0dc71c5dbd34712b5850d1e5f174abcd41 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Wed, 5 Aug 2015 08:55:41 -0500 Subject: [PATCH] Extract enchanted armoire tests into separate file --- test/common/algos.mocha.coffee | 87 ----------------- test/common/armoire.js | 171 +++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+), 87 deletions(-) create mode 100644 test/common/armoire.js diff --git a/test/common/algos.mocha.coffee b/test/common/algos.mocha.coffee index 4706b19b85..cd7d21183f 100644 --- a/test/common/algos.mocha.coffee +++ b/test/common/algos.mocha.coffee @@ -513,93 +513,6 @@ describe 'User', -> user.fns.randomVal.restore() user.fns.predictableRandom.restore() - describe 'Enchanted Armoire', -> - user = newUser() - fullArmoire = {} - _(Content.gearTypes).each (type) -> - _(Content.gear.tree[type].armoire).each (value, gear_name) -> - armoire_gear = "#{type}_armoire_#{gear_name}" - fullArmoire[armoire_gear] = true - - beforeEach -> - # too many predictableRandom calls to stub, let's return the last element - sinon.stub(user.fns, 'randomVal', (obj)-> - result = undefined - for key, val of obj - result = val - result - ) - - it 'counts all available equipment before any are claimed', -> - sinon.stub(user.fns, 'predictableRandom').returns 0 - expect(shared.count.remainingGearInSet(user.items.gear.owned, 'armoire')).to.eql _.size(fullArmoire) - - it 'does not open without paying', -> - sinon.stub(user.fns, 'predictableRandom').returns 0 - user.ops.buy({params: {key: 'armoire'}}) - expect(user.items.gear.owned).to.eql {'weapon_warrior_0': true} - expect(user.items.food).to.eql {} - expect(user.stats.exp).to.eql 0 - - it 'does not open without Ultimate Gear achievement', -> - sinon.stub(user.fns, 'predictableRandom').returns 0 - user.stats.gp = 500 - user.ops.buy({params: {key: 'armoire'}}) - user.achievements.ultimateGearSets = {'healer':false,'wizard':false,'rogue':false,'warrior':false} - user.ops.buy({params: {key: 'armoire'}}) - expect(user.items.gear.owned).to.eql {'weapon_warrior_0': true} - expect(user.items.food).to.eql {} - expect(user.stats.exp).to.eql 0 - - it 'always drops equipment the first time', -> - sinon.stub(user.fns, 'predictableRandom', cycle [.9,.5]) - user.achievements.ultimateGearSets = {'healer':false,'wizard':false,'rogue':true,'warrior':false} - user.ops.buy({params: {key: 'armoire'}}) - expect(user.items.gear.owned).to.eql {'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true} - expect(shared.count.remainingGearInSet(user.items.gear.owned, 'armoire')).to.eql (_.size(fullArmoire) - 1) - expect(user.items.food).to.eql {} - expect(user.stats.exp).to.eql 0 - expect(user.stats.gp).to.eql 400 - - it 'gives Experience', -> - sinon.stub(user.fns, 'predictableRandom', cycle [.9,.5]) - user.ops.buy({params: {key: 'armoire'}}) - expect(user.items.gear.owned).to.eql {'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true} - expect(user.items.food).to.eql {} - expect(user.stats.exp).to.eql 30 - expect(user.stats.gp).to.eql 300 - - it 'gives food', -> - sinon.stub(user.fns, 'predictableRandom', cycle [.7,.5]) - user.ops.buy({params: {key: 'armoire'}}) - expect(user.items.gear.owned).to.eql {'weapon_warrior_0': true, 'shield_armoire_gladiatorShield':true} - expect(user.items.food).to.eql {'Honey': 1} - expect(user.stats.exp).to.eql 30 - expect(user.stats.gp).to.eql 200 - - 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_hornedIronHelm':true} - expect(shared.count.remainingGearInSet(user.items.gear.owned, 'armoire')).to.eql (_.size(fullArmoire) - 2) - expect(user.items.food).to.eql {'Honey': 1} - expect(user.stats.exp).to.eql 30 - expect(user.stats.gp).to.eql 100 - - it 'does not give equipment if all equipment has been found', -> - sinon.stub(user.fns, 'predictableRandom', cycle [.5,.5]) - user.items.gear.owned = fullArmoire - user.ops.buy({params: {key: 'armoire'}}) - expect(user.items.gear.owned).to.eql fullArmoire - expect(shared.count.remainingGearInSet(user.items.gear.owned, 'armoire')).to.eql 0 - expect(user.items.food).to.eql {'Honey': 1} - expect(user.stats.exp).to.eql 60 - expect(user.stats.gp).to.eql 0 - - afterEach -> - user.fns.randomVal.restore() - user.fns.predictableRandom.restore() - describe 'Quests', -> _.each shared.content.quests, (quest)-> it "#{quest.text()} has valid values", -> diff --git a/test/common/armoire.js b/test/common/armoire.js new file mode 100644 index 0000000000..50ae7af023 --- /dev/null +++ b/test/common/armoire.js @@ -0,0 +1,171 @@ +var sinon = require('sinon'); +var chai = require("chai") +chai.use(require("sinon-chai")) +var expect = chai.expect +var _ = require('lodash'); + +require('coffee-script'); +var shared = require('../../common/script/index.coffee'); +var Content = require('../../common/script/content.coffee'); + +describe('user.fns.buy', function() { + var user; + + beforeEach(function() { + user = { + items: { + gear: { + owned: { + weapon_warrior_0: true + } + } + }, + stats: { gp: 200 }, + achievements: { }, + flags: { } + }; + + 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, 'predictableRandom'); + }); + + afterEach(function() { + user.fns.randomVal.restore(); + user.fns.predictableRandom.restore(); + }); + + context('Potion', function() { + }); + + context('Gear', function() { + }); + + context('Quests', function() { + }); + + context('Enchanted Armoire', function() { + var YIELD_EQUIPMENT = .5; + var YIELD_FOOD = .7; + var YIELD_EXP = .9; + + var fullArmoire = {} + + _(Content.gearTypes).each(function(type) { + _(Content.gear.tree[type].armoire).each(function(gearObject, gearName) { + armoireKey = gearObject.key; + fullArmoire[armoireKey] = true; + }); + }); + + beforeEach(function() { + user.achievements.ultimateGearSets = { rogue: true }; + user.flags.armoireOpened = true; + user.stats.exp = 0; + 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; + + 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(); + }); + }); + + 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); + expect(user.stats.gp).to.eql(100); + }); + + it('gives Experience', function() { + user.fns.predictableRandom.returns(YIELD_EXP); + + 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); + }); + }); +});