Separate out backer gear into own module

This commit is contained in:
Blade Barringer
2015-11-17 08:17:40 -06:00
parent 03c1a957f6
commit 2bac9c3c17
3 changed files with 160 additions and 78 deletions

View File

@@ -0,0 +1,93 @@
import { ownsItem } from '../gear-helper';
import t from '../../translation';
let isBackerOfLevel = (tierRequirement, ownedItem) => {
return (user) => {
let backer = user.backer;
let tier = Number(backer && backer.tier);
return tier >= tierRequirement || ownsItem(ownedItem)(user);
};
};
let armorSpecial0 = {
text: t('armorSpecial0Text'),
notes: t('armorSpecial0Notes', { con: 20 }),
con: 20,
value: 150,
canOwn: isBackerOfLevel(45, 'armor_special_0'),
};
let armorSpecial2 = {
text: t('armorSpecial2Text'),
notes: t('armorSpecial2Notes', { attrs: 25 }),
int: 25,
con: 25,
value: 200,
canOwn: isBackerOfLevel(300, 'armor_special_2'),
};
let headSpecial0 = {
text: t('headSpecial0Text'),
notes: t('headSpecial0Notes', { int: 20 }),
int: 20,
value: 150,
canOwn: isBackerOfLevel(45, 'head_special_0'),
};
let headSpecial2 = {
text: t('headSpecial2Text'),
notes: t('headSpecial2Notes', { attrs: 25 }),
int: 25,
str: 25,
value: 200,
canOwn: isBackerOfLevel(300, 'head_special_2'),
};
let shieldSpecial0 = {
text: t('shieldSpecial0Text'),
notes: t('shieldSpecial0Notes', { per: 20 }),
per: 20,
value: 150,
canOwn: isBackerOfLevel(45, 'shield_special_0'),
};
let weaponSpecial0 = {
text: t('weaponSpecial0Text'),
notes: t('weaponSpecial0Notes', { str: 20 }),
str: 20,
value: 150,
canOwn: isBackerOfLevel(70, 'weapon_special_0'),
};
let weaponSpecial2 = {
text: t('weaponSpecial2Text'),
notes: t('weaponSpecial2Notes', { attrs: 25 }),
str: 25,
per: 25,
value: 200,
canOwn: isBackerOfLevel(300, 'weapon_special_2'),
};
let weaponSpecial3 = {
text: t('weaponSpecial3Text'),
notes: t('weaponSpecial3Notes', { attrs: 17 }),
str: 17,
int: 17,
con: 17,
value: 200,
canOwn: isBackerOfLevel(300, 'weapon_special_3'),
};
let backerSet = {
armorSpecial0,
armorSpecial2,
headSpecial0,
headSpecial2,
shieldSpecial0,
weaponSpecial0,
weaponSpecial2,
weaponSpecial3,
};
export default backerSet;

View File

@@ -1,19 +1,10 @@
/* eslint-disable camelcase */
import {
EVENTS,
} from '../../constants';
import { ownsItem } from '../gear-helper';
import backerGear from './special-backer';
import t from '../../translation';
let isBackerOfLevel = (tierRequirement, ownedItem) => {
return (user) => {
let backer = user.backer;
let tier = backer && backer.tier;
return Number(tier) >= tierRequirement || ownsItem(ownedItem)(user);
};
};
let isContributorOfLevel = (tierRequirement, ownedItem) => {
return (user) => {
let contributor = user.contributor;
@@ -24,13 +15,7 @@ let isContributorOfLevel = (tierRequirement, ownedItem) => {
};
let armor = {
0: {
text: t('armorSpecial0Text'),
notes: t('armorSpecial0Notes', { con: 20 }),
con: 20,
value: 150,
canOwn: isBackerOfLevel(45),
},
0: backerGear.armorSpecial0,
1: {
text: t('armorSpecial1Text'),
notes: t('armorSpecial1Notes', { attrs: 6 }),
@@ -41,14 +26,7 @@ let armor = {
value: 170,
canOwn: isContributorOfLevel(2),
},
2: {
text: t('armorSpecial2Text'),
notes: t('armorSpecial2Notes', { attrs: 25 }),
int: 25,
con: 25,
value: 200,
canOwn: isBackerOfLevel(300, 'armor_special_2'),
},
2: backerGear.armorSpecial2,
finnedOceanicArmor: {
text: t('armorSpecialFinnedOceanicArmorText'),
notes: t('armorSpecialFinnedOceanicArmorNotes', { str: 15 }),
@@ -343,13 +321,13 @@ let armor = {
};
let back = {
wondercon_red: {
wondercon_red: { // eslint-disable-line camelcase
text: t('backSpecialWonderconRedText'),
notes: t('backSpecialWonderconRedNotes'),
value: 0,
mystery: 'wondercon',
},
wondercon_black: {
wondercon_black: { // eslint-disable-line camelcase
text: t('backSpecialWonderconBlackText'),
notes: t('backSpecialWonderconBlackNotes'),
value: 0,
@@ -358,19 +336,19 @@ let back = {
};
let body = {
wondercon_red: {
wondercon_red: { // eslint-disable-line camelcase
text: t('bodySpecialWonderconRedText'),
notes: t('bodySpecialWonderconRedNotes'),
value: 0,
mystery: 'wondercon',
},
wondercon_gold: {
wondercon_gold: { // eslint-disable-line camelcase
text: t('bodySpecialWonderconGoldText'),
notes: t('bodySpecialWonderconGoldNotes'),
value: 0,
mystery: 'wondercon',
},
wondercon_black: {
wondercon_black: { // eslint-disable-line camelcase
text: t('bodySpecialWonderconBlackText'),
notes: t('bodySpecialWonderconBlackNotes'),
value: 0,
@@ -421,13 +399,13 @@ let body = {
};
let eyewear = {
wondercon_red: {
wondercon_red: { // eslint-disable-line camelcase
text: t('eyewearSpecialWonderconRedText'),
notes: t('eyewearSpecialWonderconRedNotes'),
value: 0,
mystery: 'wondercon',
},
wondercon_black: {
wondercon_black: { // eslint-disable-line camelcase
text: t('eyewearSpecialWonderconBlackText'),
notes: t('eyewearSpecialWonderconBlackNotes'),
value: 0,
@@ -450,13 +428,7 @@ let eyewear = {
};
let head = {
0: {
text: t('headSpecial0Text'),
notes: t('headSpecial0Notes', { int: 20 }),
int: 20,
value: 150,
canOwn: isBackerOfLevel(45),
},
0: backerGear.headSpecial0,
1: {
text: t('headSpecial1Text'),
notes: t('headSpecial1Notes', { attrs: 6 }),
@@ -467,14 +439,7 @@ let head = {
value: 170,
canOwn: isContributorOfLevel(3),
},
2: {
text: t('headSpecial2Text'),
notes: t('headSpecial2Notes', { attrs: 25 }),
int: 25,
str: 25,
value: 200,
canOwn: isBackerOfLevel(300, 'head_special_2'),
},
2: backerGear.headSpecial2,
fireCoralCirclet: {
text: t('headSpecialFireCoralCircletText'),
notes: t('headSpecialFireCoralCircletNotes', { per: 15 }),
@@ -910,13 +875,7 @@ let headAccessory = {
};
let shield = {
0: {
text: t('shieldSpecial0Text'),
notes: t('shieldSpecial0Notes', { per: 20 }),
per: 20,
value: 150,
canOwn: isBackerOfLevel(45),
},
0: backerGear.shieldSpecial0,
1: {
text: t('shieldSpecial1Text'),
notes: t('shieldSpecial1Notes', { attrs: 6 }),
@@ -1146,13 +1105,7 @@ let shield = {
};
let weapon = {
0: {
text: t('weaponSpecial0Text'),
notes: t('weaponSpecial0Notes', { str: 20 }),
str: 20,
value: 150,
canOwn: isBackerOfLevel(70),
},
0: backerGear.weaponSpecial0,
1: {
text: t('weaponSpecial1Text'),
notes: t('weaponSpecial1Notes', { attrs: 6 }),
@@ -1163,23 +1116,8 @@ let weapon = {
value: 170,
canOwn: isContributorOfLevel(4),
},
2: {
text: t('weaponSpecial2Text'),
notes: t('weaponSpecial2Notes', { attrs: 25 }),
str: 25,
per: 25,
value: 200,
canOwn: isBackerOfLevel(300, 'weapon_special_2'),
},
3: {
text: t('weaponSpecial3Text'),
notes: t('weaponSpecial3Notes', { attrs: 17 }),
str: 17,
int: 17,
con: 17,
value: 200,
canOwn: isBackerOfLevel(300, 'weapon_special_3'),
},
2: backerGear.weaponSpecial2,
3: backerGear.weaponSpecial3,
critical: {
text: t('weaponSpecialCriticalText'),
notes: t('weaponSpecialCriticalNotes', { attrs: 40 }),

View File

@@ -2,8 +2,10 @@ import {
expectValidTranslationString,
} from '../helpers/content.helper';
import { each } from 'lodash';
import camelCase from 'lodash.camelcase';
import { tree as allGear } from '../../common/script/content/gear';
import backerGear from '../../common/script/content/gear/sets/special-backer';
describe('Gear', () => {
each(allGear, (piece, gearType) => {
@@ -41,4 +43,53 @@ describe('Gear', () => {
});
});
});
describe('backer gear', () => {
let user;
beforeEach(() => {
user = {
backer: {},
items: { gear: { owned: {} } },
};
});
let cases = {
armor_special_0: 45,
armor_special_2: 300,
head_special_0: 45,
head_special_2: 300,
weapon_special_0: 70,
weapon_special_2: 300,
weapon_special_3: 300,
}
each(cases, (tierRequirement, key) => {
context(key, () => {
let camelCaseKey = camelCase(key);
it(`canOwn returns true if user has a backer tier of ${tierRequirement} or higher`, () => {
user.backer.tier = tierRequirement;
expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true);
user.backer.tier = tierRequirement + 1;
expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true);
});
it('canOwn returns true if user already owns the item', () => {
user.items.gear.owned[key] = true;
expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true);
});
it('canOwn returns true if user has previously owned the item', () => {
user.items.gear.owned[key] = false;
expect(backerGear[camelCaseKey].canOwn(user)).to.eql(true);
});
it('canOwn returns false if user does not have tier requirement and did not previously own the item', () => {
expect(backerGear[camelCaseKey].canOwn(user)).to.eql(false);
});
});
});
});
});