From 860abce1d78f2e52ce356ce31d36487c49c5362c Mon Sep 17 00:00:00 2001 From: Ricardo Mendes Date: Sun, 4 Oct 2015 12:21:33 +0000 Subject: [PATCH 1/6] Adds auto-equip string to locales/en --- common/locales/en/character.json | 1 + 1 file changed, 1 insertion(+) diff --git a/common/locales/en/character.json b/common/locales/en/character.json index 4e3f8a4645..dfb6cfab20 100644 --- a/common/locales/en/character.json +++ b/common/locales/en/character.json @@ -52,6 +52,7 @@ "classEquipBonus": "Class Bonus", "battleGear": "Battle Gear", "battleGearText": "This is the gear you wear into battle; it affects numbers when interacting with your tasks.", + "autoEquipBattleGear": "Auto-equip new gear", "costume": "Costume", "costumeText": "If you prefer the look of other gear to what you have equipped, check the \"Use Costume\" box to visually don a costume while wearing your battle gear underneath.", "useCostume": "Use Costume", From e79863e134061c5b487e6268c9d0c35a0ddf3317 Mon Sep 17 00:00:00 2001 From: Ricardo Mendes Date: Sun, 4 Oct 2015 12:22:22 +0000 Subject: [PATCH 2/6] Adds auto-equip boolean to user preferences --- website/src/models/user.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/src/models/user.js b/website/src/models/user.js index c883caacc1..f73d590415 100644 --- a/website/src/models/user.js +++ b/website/src/models/user.js @@ -324,6 +324,7 @@ var UserSchema = new Schema({ language: String, automaticAllocation: Boolean, allocationMode: {type:String, enum: ['flat','classbased','taskbased'], 'default': 'flat'}, + autoEquip: {type: Boolean, 'default': true}, costume: Boolean, dateFormat: {type: String, enum:['MM/dd/yyyy', 'dd/MM/yyyy', 'yyyy/MM/dd'], 'default': 'MM/dd/yyyy'}, sleep: {type: Boolean, 'default': false}, @@ -579,7 +580,7 @@ UserSchema.methods.unlink = function(options, cb) { module.exports.schema = UserSchema; module.exports.model = mongoose.model("User", UserSchema); -// Initially export an empty object so external requires will get +// Initially export an empty object so external requires will get // the right object by reference when it's defined later // Otherwise it would remain undefined if requested before the query executes module.exports.mods = []; From 73924df241e6f6e84d46843b2361510fd00be617 Mon Sep 17 00:00:00 2001 From: Ricardo Mendes Date: Sun, 4 Oct 2015 12:23:12 +0000 Subject: [PATCH 3/6] Adds auto-equip UI to equipment view --- website/views/options/inventory/equipment.jade | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/website/views/options/inventory/equipment.jade b/website/views/options/inventory/equipment.jade index ba45f9a693..8d77a25a8b 100644 --- a/website/views/options/inventory/equipment.jade +++ b/website/views/options/inventory/equipment.jade @@ -4,6 +4,13 @@ h3.equipment-title.hint(popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', popover=env.t('battleGearText'))=env.t('battleGear') + + .checkbox.equipment-title + label + input(type="checkbox", ng-model="user.preferences.autoEquip", + ng-change='set({"preferences.autoEquip":user.preferences.autoEquip ? true : false})') + |   + =env.t('autoEquipBattleGear') div button.btn.btn-default(type="button", ng-click='dequip("battleGear");') {{env.t("unequipBattleGear")}} From 5e3f46d7864b67db4b7e165cf6af7fc3f9ff0dd7 Mon Sep 17 00:00:00 2001 From: Ricardo Mendes Date: Mon, 19 Oct 2015 05:52:46 +0000 Subject: [PATCH 4/6] Checks user auto-equip preference in buy function --- common/script/index.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/script/index.coffee b/common/script/index.coffee index 3566f5db79..8370a26e16 100644 --- a/common/script/index.coffee +++ b/common/script/index.coffee @@ -970,7 +970,7 @@ api.wrap = (user, main=true) -> message = i18n.t('armoireExp', req.language) armoireResp = {"type": "experience", "value": armoireExp} else - user.items.gear.equipped[item.type] = item.key + if user.preferences.autoEquip then user.items.gear.equipped[item.type] = item.key user.items.gear.owned[item.key] = true message = user.fns.handleTwoHanded(item, null, req) message ?= i18n.t('messageBought', {itemText: item.text(req.language)}, req.language) From 6e6845030959b63898f7e37909da63436d91aac5 Mon Sep 17 00:00:00 2001 From: Ricardo Mendes Date: Mon, 19 Oct 2015 07:00:27 +0000 Subject: [PATCH 5/6] Tweaks tests to account for autoEquip user preference. --- test/common/algos.mocha.coffee | 17 +++++++++++++++-- test/common/user.fns.buy.test.js | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/test/common/algos.mocha.coffee b/test/common/algos.mocha.coffee index 5f98890666..b27adc677f 100644 --- a/test/common/algos.mocha.coffee +++ b/test/common/algos.mocha.coffee @@ -30,7 +30,9 @@ newUser = (addTasks=true)-> quest: progress: down: 0 - preferences: {} + preferences: { + autoEquip: true + } dailys: [] todos: [] rewards: [] @@ -145,7 +147,7 @@ describe 'User', -> buffs = {per:0, int:0, con:0, str:0, stealth: 0, streaks: false} expect(user.stats).to.eql { str: 1, con: 1, per: 1, int: 1, hp: 50, mp: 32, lvl: 1, exp: 0, gp: 0, class: 'warrior', buffs: buffs } expect(user.items.gear).to.eql { equipped: base_gear, costume: base_gear, owned: {weapon_warrior_0: true} } - expect(user.preferences).to.eql { costume: false } + expect(user.preferences).to.eql { autoEquip: true, costume: false } it 'calculates max MP', -> user = newUser() @@ -411,6 +413,17 @@ describe 'User', -> expect(user.items.gear.owned).to.eql { weapon_warrior_0: true, armor_warrior_1: true } expect(user.items.gear.equipped).to.eql { armor: 'armor_warrior_1', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } expect(user).toHaveGP 1 + + it 'buys equipment but does not auto-equip', -> + user = newUser() + user.stats.gp = 31 + user.preferences.autoEquip = false + user.ops.buy {params: {key: 'armor_warrior_1'}} + expect(user.items.gear.owned).to.eql { weapon_warrior_0: true, armor_warrior_1: true } + expect(user.items.gear.equipped).to.eql { armor: 'armor_base_0', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } + expect(user).toHaveGP 1 + + it 'does not buy equipment without enough Gold', -> user = newUser() diff --git a/test/common/user.fns.buy.test.js b/test/common/user.fns.buy.test.js index bcfe333d27..8472368541 100644 --- a/test/common/user.fns.buy.test.js +++ b/test/common/user.fns.buy.test.js @@ -41,6 +41,7 @@ describe('user.fns.buy', function() { context('Gear', function() { it('buys equipment'); + it('buys equipment but does not auto-equip'); it('does not buy equipment without enough Gold'); }); From 0c82d757c8df4726883adfd7075f11808cc63c35 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 29 Oct 2015 12:25:02 -0500 Subject: [PATCH 6/6] Move cs tests to js --- test/common/algos.mocha.coffee | 38 ---------------- test/common/user.fns.buy.test.js | 75 ++++++++++++++++++++++++++++++-- 2 files changed, 71 insertions(+), 42 deletions(-) diff --git a/test/common/algos.mocha.coffee b/test/common/algos.mocha.coffee index b27adc677f..642156b752 100644 --- a/test/common/algos.mocha.coffee +++ b/test/common/algos.mocha.coffee @@ -394,44 +394,6 @@ describe 'User', -> } describe 'store', -> - it 'recovers hp buying potions', -> - user = newUser() - user.stats.hp = 30 - user.stats.gp = 50 - user.ops.buy {params: {key: 'potion'}} - expect(user).toHaveHP 45 - expect(user).toHaveGP 25 - - user.ops.buy {params: {key: 'potion'}} - expect(user).toHaveHP 50 # don't exceed max hp - expect(user).toHaveGP 0 - - it 'buys equipment', -> - user = newUser() - user.stats.gp = 31 - user.ops.buy {params: {key: 'armor_warrior_1'}} - expect(user.items.gear.owned).to.eql { weapon_warrior_0: true, armor_warrior_1: true } - expect(user.items.gear.equipped).to.eql { armor: 'armor_warrior_1', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } - expect(user).toHaveGP 1 - - it 'buys equipment but does not auto-equip', -> - user = newUser() - user.stats.gp = 31 - user.preferences.autoEquip = false - user.ops.buy {params: {key: 'armor_warrior_1'}} - expect(user.items.gear.owned).to.eql { weapon_warrior_0: true, armor_warrior_1: true } - expect(user.items.gear.equipped).to.eql { armor: 'armor_base_0', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } - expect(user).toHaveGP 1 - - - - it 'does not buy equipment without enough Gold', -> - user = newUser() - user.stats.gp = 1 - user.ops.buy {params: {key: 'armor_warrior_1'}} - expect(user.items.gear.equipped).to.eql { armor: 'armor_base_0', weapon: 'weapon_base_0', head: 'head_base_0', shield: 'shield_base_0' } - expect(user).toHaveGP 1 - it 'buys a Quest scroll', -> user = newUser() user.stats.gp = 205 diff --git a/test/common/user.fns.buy.test.js b/test/common/user.fns.buy.test.js index 8472368541..05f7abb78d 100644 --- a/test/common/user.fns.buy.test.js +++ b/test/common/user.fns.buy.test.js @@ -16,9 +16,13 @@ describe('user.fns.buy', function() { gear: { owned: { weapon_warrior_0: true + }, + equipped: { + weapon_warrior_0: true } } }, + preferences: {}, stats: { gp: 200 }, achievements: { }, flags: { } @@ -36,14 +40,77 @@ describe('user.fns.buy', function() { }); context('Potion', function() { - it('recovers hp'); + it('recovers 15 hp', function() { + user.stats.hp = 30; + user.ops.buy({params: {key: 'potion'}}); + expect(user.stats.hp).to.eql(45); + }); + + it('does not increase hp above 50', function() { + user.stats.hp = 45; + user.ops.buy({params: {key: 'potion'}}); + expect(user.stats.hp).to.eql(50); + }); + + it('deducts 25 gp', function() { + user.stats.hp = 45; + user.ops.buy({params: {key: 'potion'}}); + + expect(user.stats.gp).to.eql(175); + }); + + it('does not purchase if not enough gp', function() { + user.stats.hp = 45; + user.stats.gp = 5; + user.ops.buy({params: {key: 'potion'}}); + + expect(user.stats.hp).to.eql(45); + expect(user.stats.gp).to.eql(5); + }); }); context('Gear', function() { - it('buys equipment'); - it('buys equipment but does not auto-equip'); + it('adds equipment to inventory', function() { + user.stats.gp = 31; - it('does not buy equipment without enough Gold'); + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.owned).to.eql({ weapon_warrior_0: true, armor_warrior_1: true }); + }); + + it('deducts gold from user', function() { + user.stats.gp = 31; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.stats.gp).to.eql(1); + }); + + it('auto equips equipment if user has auto-equip preference turned on', function() { + user.stats.gp = 31; + user.preferences.autoEquip = true; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.equipped).to.have.property('armor', 'armor_warrior_1'); + }); + + it('buys equipment but does not auto-equip', function() { + user.stats.gp = 31; + user.preferences.autoEquip = false; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.equipped).to.not.have.property('armor'); + }); + + it('does not buy equipment without enough Gold', function() { + user.stats.gp = 20; + + user.ops.buy({params: {key: 'armor_warrior_1'}}); + + expect(user.items.gear.owned).to.not.have.property('armor_warrior_1'); + }); }); context('Quests', function() {