From 0b352b91033e104d6b62acecf6a64a8ae22f063e Mon Sep 17 00:00:00 2001 From: Raymond Grumney <34448933+RaymondGrumney@users.noreply.github.com> Date: Sun, 23 Dec 2018 12:45:59 -0600 Subject: [PATCH] Unit Tests; 1 fix to appFooter debug menu (#10894) * Built * Update .editorconfig * Fixed filename ('translaotr.js' => 'translator.js') * Fixed Filename * User Unit Tests * Writing tests for avatar.vue * writing tests for getters/user.js * Writing Tests for avatar.vue * Writing Tests for avatar.vue * writing tests for store/getters/user.js * renamed file * Integrated test into user.test.js * Reverting * Fetching most recent version * +1 Level now adds a level * updating to current version * Minor edits to pass lint test * Removing non-functional Tests * Cleaning up --- .../unit/specs/components/avatar.vue.test.js | 300 ++++++++++++++++++ .../specs/store/getters/user/user.test.js | 76 +++++ .../unit/specs/store/getters/user/userGems.js | 13 - test/content/{translaotr.js => translator.js} | 0 website/client/components/appFooter.vue | 8 +- 5 files changed, 383 insertions(+), 14 deletions(-) create mode 100644 test/client/unit/specs/components/avatar.vue.test.js create mode 100644 test/client/unit/specs/store/getters/user/user.test.js delete mode 100644 test/client/unit/specs/store/getters/user/userGems.js rename test/content/{translaotr.js => translator.js} (100%) diff --git a/test/client/unit/specs/components/avatar.vue.test.js b/test/client/unit/specs/components/avatar.vue.test.js new file mode 100644 index 0000000000..1b871f96d6 --- /dev/null +++ b/test/client/unit/specs/components/avatar.vue.test.js @@ -0,0 +1,300 @@ +import Avatar from 'client/components/avatar'; +import Vue from 'vue'; +import generateStore from 'client/store'; + +context('avatar.vue', () => { + let Constructr; + let vm; + + beforeEach(() => { + Constructr = Vue.extend(Avatar); + + vm = new Constructr({ + propsData: { + member: { + stats: { + buffs: {}, + }, + preferences: { + hair: {}, + }, + items: { + gear: { + equipped: {}, + }, + }, + }, + }, + }).$mount(); + + vm.$store = generateStore(); + }); + + afterEach(() => { + vm.$destroy(); + }); + + describe('hasClass', () => { + beforeEach(() => { + vm.member = { + stats: { lvl: 17 }, + preferences: { disableClasses: true }, + flags: { classSelected: false }, + }; + }); + + it('accurately reports class status', () => { + expect(vm.hasClass).to.equal(false); + + vm.member.preferences.disableClasses = false; + vm.member.flags.classSelected = true; + + expect(vm.hasClass).to.equal(true); + }); + }); + + describe('isBuffed', () => { + beforeEach(() => { + vm.member = { + stats: { + buffs: {}, + }, + }; + }); + + it('accurately reports if buffed', () => { + expect(vm.isBuffed).to.equal(undefined); + + vm.member.stats.buffs = { str: 1 }; + + expect(vm.isBuffed).to.equal(1); + }); + }); + + describe('paddingTop', () => { + beforeEach(() => { + vm.member = { + items: {}, + }; + }); + + it('defaults to 28px', () => { + vm.avatarOnly = true; + expect(vm.paddingTop).to.equal('28px'); + }); + + it('is 24.5px if user has a pet', () => { + vm.member.items = { + currentPet: { name: 'Foo' }, + }; + + expect(vm.paddingTop).to.equal('24.5px'); + }); + + it('is 0px if user has a mount', () => { + vm.member.items = { + currentMount: { name: 'Bar' }, + }; + + expect(vm.paddingTop).to.equal('0px'); + }); + + it('can be overriden', () => { + vm.overrideTopPadding = '27px'; + expect(vm.paddingTop).to.equal('27px'); + }); + }); + + describe('costumeClass', () => { + beforeEach(() => { + vm.member = { + preferences: {}, + }; + }); + + it('returns if showing equiped gear', () => { + expect(vm.costumeClass).to.equal('equipped'); + }); + it('returns if wearing a costume', () => { + vm.member.preferences = { costume: true }; + expect(vm.costumeClass).to.equal('costume'); + }); + }); + + describe('visualBuffs', () => { + it('returns an array of buffs', () => { + vm.member = { + stats: { + class: 'Warrior', + }, + }; + + expect(vm.visualBuffs).to.include({snowball: 'snowman'}); + expect(vm.visualBuffs).to.include({spookySparkles: 'ghost'}); + expect(vm.visualBuffs).to.include({shinySeed: 'avatar_floral_Warrior'}); + expect(vm.visualBuffs).to.include({seafoam: 'seafoam_star'}); + }); + }); + + describe('backgroundClass', () => { + beforeEach(() => { + vm.member.preferences = { background: 'pony' }; + }); + + it('shows the background', () => { + expect(vm.backgroundClass).to.equal('background_pony'); + }); + + it('can be overridden', () => { + vm.overrideAvatarGear = { background: 'character' }; + + expect(vm.backgroundClass).to.equal('background_character'); + }); + + it('returns to a blank string if not showing background', () => { + vm.withBackground = false; + vm.avatarOnly = true; + + expect(vm.backgroundClass).to.equal(''); + }); + }); + + describe('specialMountClass', () => { + it('checks if riding a Kangaroo', () => { + vm.member = { + stats: { + class: 'None', + }, + items: {}, + }; + + expect(vm.specialMountClass).to.equal(undefined); + + vm.member.items = { + currentMount: ['Kangaroo'], + }; + + expect(vm.specialMountClass).to.equal('offset-kangaroo'); + }); + }); + + describe('skinClass', () => { + it('returns current skin color', () => { + vm.member = { + stats: {}, + preferences: { + skin: 'blue', + }, + }; + + expect(vm.skinClass).to.equal('skin_blue'); + }); + + it('returns if sleep or not', () => { + vm.member = { + stats: {}, + preferences: { + skin: 'blue', + sleep: false, + }, + }; + + expect(vm.skinClass).to.equal('skin_blue'); + + vm.member.preferences.sleep = true; + + expect(vm.skinClass).to.equal('skin_blue_sleep'); + }); + }); + + context('methods', () => { + describe('getGearClass', () => { + beforeEach(() => { + vm.member = { + items: { + gear: { + equipped: { Hat: 'Fancy Tophat' }, + }, + }, + preferences: { costume: false }, + }; + }); + + it('returns undefined if no match', () => { + expect(vm.getGearClass('foo')).to.equal(undefined); + }); + + it('returns the matching gear', () => { + expect(vm.getGearClass('Hat')).to.equal('Fancy Tophat'); + }); + + it('can be overridden', () => { + vm.overrideAvatarGear = { Hat: 'Dapper Bowler' }; + + expect(vm.getGearClass('Hat')).to.equal('Dapper Bowler'); + }); + }); + + describe('hideGear', () => { + it('returns no weapon equipped', () => { + vm.member.items.gear.equipped = {}; + expect(vm.hideGear('weapon')).to.equal(false); + }); + + beforeEach(() => { + vm.member = { + items: { + gear: { + equipped: { + weapon: { + baseWeapon: 'Spoon', + twoHanded: false, + }, + }, + }, + }, + preferences: { costume: false }, + }; + }); + }); + + describe('show avatar', () => { + beforeEach(() => { + vm.member = { + stats: { + buffs: { + snowball: false, + seafoam: false, + spookySparkles: false, + shinySeed: false, + }, + }, + }; + }); + it('does if not showing visual buffs', () => { + expect(vm.showAvatar()).to.equal(true); + + let buffs = vm.member.stats.buffs; + + buffs.snowball = true; + expect(vm.showAvatar()).to.equal(false); + + buffs.snowball = false; + buffs.spookySparkles = true; + expect(vm.showAvatar()).to.equal(false); + + buffs.spookySparkles = false; + buffs.shinySeed = true; + expect(vm.showAvatar()).to.equal(false); + + buffs.shinySeed = false; + buffs.seafoam = true; + expect(vm.showAvatar()).to.equal(false); + + buffs.seafoam = false; + vm.showVisualBuffs = false; + expect(vm.showAvatar()).to.equal(true); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/client/unit/specs/store/getters/user/user.test.js b/test/client/unit/specs/store/getters/user/user.test.js new file mode 100644 index 0000000000..1686095161 --- /dev/null +++ b/test/client/unit/specs/store/getters/user/user.test.js @@ -0,0 +1,76 @@ +import { data, gems, buffs, preferences, tasksOrder } from 'client/store/getters/user'; + +context('user getters', () => { + describe('data', () => { + it('returns the user\'s data', () => { + expect(data({ + state: { + user: { + data: { + lvl: 1, + }, + }, + }, + }).lvl).to.equal(1); + }); + }); + + describe('gems', () => { + it('returns the user\'s gems', () => { + expect(gems({ + state: { + user: { + data: { balance: 4.5 }, + }, + }, + })).to.equal(18); + }); + }); + + describe('buffs', () => { + it('returns the user\'s buffs', () => { + expect(buffs({ + state: { + user: { + data: { + stats: { + buffs: [1], + }, + }, + }, + }, + })(0)).to.equal(1); + }); + }); + + describe('preferences', () => { + it('returns the user\'s preferences', () => { + expect(preferences({ + state: { + user: { + data: { + preferences: 1, + }, + }, + }, + })).to.equal(1); + }); + }); + + describe('tasksOrder', () => { + it('returns the user\'s tasksOrder', () => { + expect(tasksOrder({ + state: { + user: { + tasksOrder: { + masters: 1, + }, + }, + }, + })('master')).to.equal(1); + + expect(tasksOrder()).to.not.equal('null'); + expect(tasksOrder()).to.not.equal('undefined'); + }); + }); +}); \ No newline at end of file diff --git a/test/client/unit/specs/store/getters/user/userGems.js b/test/client/unit/specs/store/getters/user/userGems.js deleted file mode 100644 index a6c515b42c..0000000000 --- a/test/client/unit/specs/store/getters/user/userGems.js +++ /dev/null @@ -1,13 +0,0 @@ -import { gems as userGems } from 'client/store/getters/user'; - -describe('userGems getter', () => { - it('returns the user\'s gems', () => { - expect(userGems({ - state: { - user: { - data: {balance: 4.5}, - }, - }, - })).to.equal(18); - }); -}); \ No newline at end of file diff --git a/test/content/translaotr.js b/test/content/translator.js similarity index 100% rename from test/content/translaotr.js rename to test/content/translator.js diff --git a/website/client/components/appFooter.vue b/website/client/components/appFooter.vue index 1567cf3fc2..f931df1aba 100644 --- a/website/client/components/appFooter.vue +++ b/website/client/components/appFooter.vue @@ -96,6 +96,7 @@ a.btn.btn-secondary(@click="plusTenHealth()") + 10HP a.btn.btn-secondary(@click="addMana()") +MP a.btn.btn-secondary(@click="addLevelsAndGold()") +Exp +GP +MP + a.btn.btn-secondary(@click="addExp()") +Exp a.btn.btn-secondary(@click="addOneLevel()") +1 Level a.btn.btn-secondary(@click="addQuestProgress()", tooltip="+1000 to boss quests. 300 items to collection quests") Quest Progress Up a.btn.btn-secondary(@click="makeAdmin()") Make Admin @@ -326,7 +327,7 @@ export default { 'stats.mp': this.user.stats.mp + 10000, }); }, - addOneLevel () { + addExp () { // @TODO: Name these variables better let exp = 0; let five = 10 * this.user.stats.lvl; @@ -340,6 +341,11 @@ export default { 'stats.exp': exp, }); }, + addOneLevel () { + this.$store.dispatch('user:set', { + 'stats.lvl': this.user.stats.lvl + 1, + }); + }, async addQuestProgress () { await axios.post('/api/v4/debug/quest-progress');