diff --git a/test/common/libs/shops.test.js b/test/common/libs/shops.test.js
index 045bed1523..9c7ffc0f52 100644
--- a/test/common/libs/shops.test.js
+++ b/test/common/libs/shops.test.js
@@ -3,9 +3,7 @@ import {
generateUser,
} from '../../helpers/common.helper';
-import {
- currentSeason,
-} from '../../../website/common/script/libs/shops-seasonal.config';
+import seasonalConfig from '../../../website/common/script/libs/shops-seasonal.config';
describe('shops', () => {
const user = generateUser();
@@ -149,7 +147,7 @@ describe('shops', () => {
it('does not contain an empty category', () => {
_.each(shopCategories, category => {
- expect(category.items.length).to.be.greaterThan(0);
+ expect(category.items.length, category.identifier).to.be.greaterThan(0);
});
});
@@ -264,9 +262,12 @@ describe('shops', () => {
});
it('items match current season', () => {
+ const currentSeason = seasonalConfig.currentSeason.toLowerCase();
shopCategories.forEach(category => {
category.items.forEach(item => {
- expect(item.season).to.eql(currentSeason);
+ if (item.klass === 'special') {
+ expect(item.season, item.key).to.eql(currentSeason);
+ }
});
});
});
diff --git a/website/client/src/components/shops/quests/buyQuestModal.vue b/website/client/src/components/shops/quests/buyQuestModal.vue
index 395303ebc5..1b0f489f63 100644
--- a/website/client/src/components/shops/quests/buyQuestModal.vue
+++ b/website/client/src/components/shops/quests/buyQuestModal.vue
@@ -99,7 +99,7 @@
{
canBuy: () => false,
});
- if (item.event) {
- const canOwnFuncTrue = () => true;
- const _canOwn = item.canOwn || canOwnFuncTrue;
-
- item.canOwn = user => {
- const userHasOwnedItem = ownsItem(key)(user);
- const eventIsCurrent = moment()
- .isAfter(item.event.start) && moment().isBefore(item.event.end);
- const compatibleWithUserClass = item.specialClass
- ? user.stats.class === item.specialClass
- : true;
-
- return _canOwn(user) && (userHasOwnedItem || eventIsCurrent) && compatibleWithUserClass;
- };
- }
-
if (item.mystery || key.indexOf('takeThis') !== -1) {
item.canOwn = ownsItem(key);
}
diff --git a/website/common/script/content/gear/sets/special/index.js b/website/common/script/content/gear/sets/special/index.js
index c18322fd5f..c7d88a220c 100644
--- a/website/common/script/content/gear/sets/special/index.js
+++ b/website/common/script/content/gear/sets/special/index.js
@@ -17,7 +17,10 @@ function isSeasonalEventKey (key) {
function fillSpecialGear (gearItems, gearType, value, stats) {
Object.keys(gearItems).forEach(key => {
if (isSeasonalEventKey(key)) {
- const season = key.split(/(?=[A-Z])/)[1];
+ let season = key.split(/[0-9]+/)[0];
+ if (season.length === key.length) {
+ [season] = key.split(/(?=[A-Z])/);
+ }
let klass = key.split(/(?=[A-Z])/)[1].toLowerCase();
if (klass === 'mage') {
klass = 'wizard';
@@ -25,13 +28,14 @@ function fillSpecialGear (gearItems, gearType, value, stats) {
const actualGearType = (typeof gearType === 'function') ? gearType(klass) : gearType;
const textKey = `${actualGearType}Special${upperFirst(key)}`;
const actualValue = (typeof value === 'function') ? value(klass) : value;
+ const actualStats = stats !== undefined ? stats[klass] : {};
defaults(gearItems[key], {
specialClass: klass,
text: t(`${textKey}Text`),
- notes: t(`${textKey}Notes`, stats),
+ notes: t(`${textKey}Notes`, actualStats),
value: actualValue,
season,
- }, stats);
+ }, actualStats);
if (klass === 'wizard') {
defaults(gearItems[key], {
twoHanded: true,
@@ -178,39 +182,51 @@ const armor = {
},
springRogue: {
set: 'stealthyKittySet',
+ season: 'spring',
},
springWarrior: {
set: 'mightyBunnySet',
+ season: 'spring',
},
springMage: {
set: 'magicMouseSet',
+ season: 'spring',
},
springHealer: {
set: 'lovingPupSet',
+ season: 'spring',
},
summerRogue: {
set: 'roguishPirateSet',
+ season: 'summer',
},
summerWarrior: {
set: 'daringSwashbucklerSet',
+ season: 'summer',
},
summerMage: {
set: 'emeraldMermageSet',
+ season: 'summer',
},
summerHealer: {
set: 'reefSeahealerSet',
+ season: 'summer',
},
fallRogue: {
set: 'vampireSmiterSet',
+ season: 'fall',
},
fallWarrior: {
set: 'monsterOfScienceSet',
+ season: 'fall',
},
fallMage: {
set: 'witchyWizardSet',
+ season: 'fall',
},
fallHealer: {
set: 'mummyMedicSet',
+ season: 'fall',
},
winter2015Rogue: {
set: 'icicleDrakeSet',
@@ -1233,39 +1249,51 @@ const head = {
},
springRogue: {
set: 'stealthyKittySet',
+ season: 'spring',
},
springWarrior: {
set: 'mightyBunnySet',
+ season: 'spring',
},
springMage: {
set: 'magicMouseSet',
+ season: 'spring',
},
springHealer: {
set: 'lovingPupSet',
+ season: 'spring',
},
summerRogue: {
set: 'roguishPirateSet',
+ season: 'summer',
},
summerWarrior: {
set: 'daringSwashbucklerSet',
+ season: 'summer',
},
summerMage: {
set: 'emeraldMermageSet',
+ season: 'summer',
},
summerHealer: {
set: 'reefSeahealerSet',
+ season: 'summer',
},
fallRogue: {
set: 'vampireSmiterSet',
+ season: 'fall',
},
fallWarrior: {
set: 'monsterOfScienceSet',
+ season: 'fall',
},
fallMage: {
set: 'witchyWizardSet',
+ season: 'fall',
},
fallHealer: {
set: 'mummyMedicSet',
+ season: 'fall',
},
winter2015Rogue: {
set: 'icicleDrakeSet',
@@ -1840,46 +1868,22 @@ fillSpecialGear(head, 'head', 60, headStats);
const headAccessory = {
heroicCirclet: contributorGear.headAccessorySpecialHeroicCirclet,
springRogue: {
- specialClass: 'rogue',
set: 'stealthyKittySet',
- text: t('headAccessorySpecialSpringRogueText'),
- notes: t('headAccessorySpecialSpringRogueNotes'),
- value: 20,
},
springWarrior: {
- specialClass: 'warrior',
set: 'mightyBunnySet',
- text: t('headAccessorySpecialSpringWarriorText'),
- notes: t('headAccessorySpecialSpringWarriorNotes'),
- value: 20,
},
springMage: {
- specialClass: 'wizard',
set: 'magicMouseSet',
- text: t('headAccessorySpecialSpringMageText'),
- notes: t('headAccessorySpecialSpringMageNotes'),
- value: 20,
},
springHealer: {
- specialClass: 'healer',
set: 'lovingPupSet',
- text: t('headAccessorySpecialSpringHealerText'),
- notes: t('headAccessorySpecialSpringHealerNotes'),
- value: 20,
},
spring2015Rogue: {
- specialClass: 'rogue',
set: 'sneakySqueakerSet',
- text: t('headAccessorySpecialSpring2015RogueText'),
- notes: t('headAccessorySpecialSpring2015RogueNotes'),
- value: 20,
},
spring2015Warrior: {
- specialClass: 'warrior',
set: 'bewareDogSet',
- text: t('headAccessorySpecialSpring2015WarriorText'),
- notes: t('headAccessorySpecialSpring2015WarriorNotes'),
- value: 20,
},
spring2015Mage: {
specialClass: 'wizard',
@@ -1960,60 +1964,28 @@ const headAccessory = {
canOwn: ownsItem('headAccessory_special_wolfEars'),
},
spring2016Rogue: {
- specialClass: 'rogue',
set: 'cleverDogSet',
- text: t('headAccessorySpecialSpring2016RogueText'),
- notes: t('headAccessorySpecialSpring2016RogueNotes'),
- value: 20,
},
spring2016Warrior: {
- specialClass: 'warrior',
set: 'braveMouseSet',
- text: t('headAccessorySpecialSpring2016WarriorText'),
- notes: t('headAccessorySpecialSpring2016WarriorNotes'),
- value: 20,
},
spring2016Mage: {
- specialClass: 'wizard',
set: 'grandMalkinSet',
- text: t('headAccessorySpecialSpring2016MageText'),
- notes: t('headAccessorySpecialSpring2016MageNotes'),
- value: 20,
},
spring2016Healer: {
- specialClass: 'healer',
set: 'springingBunnySet',
- text: t('headAccessorySpecialSpring2016HealerText'),
- notes: t('headAccessorySpecialSpring2016HealerNotes'),
- value: 20,
},
spring2017Rogue: {
- specialClass: 'rogue',
set: 'spring2017SneakyBunnySet',
- text: t('headAccessorySpecialSpring2017RogueText'),
- notes: t('headAccessorySpecialSpring2017RogueNotes'),
- value: 20,
},
spring2017Warrior: {
- specialClass: 'warrior',
set: 'spring2017FelineWarriorSet',
- text: t('headAccessorySpecialSpring2017WarriorText'),
- notes: t('headAccessorySpecialSpring2017WarriorNotes'),
- value: 20,
},
spring2017Mage: {
- specialClass: 'wizard',
set: 'spring2017CanineConjurorSet',
- text: t('headAccessorySpecialSpring2017MageText'),
- notes: t('headAccessorySpecialSpring2017MageNotes'),
- value: 20,
},
spring2017Healer: {
- specialClass: 'healer',
set: 'spring2017FloralMouseSet',
- text: t('headAccessorySpecialSpring2017HealerText'),
- notes: t('headAccessorySpecialSpring2017HealerNotes'),
- value: 20,
},
blackHeadband: {
gearSet: 'headband',
@@ -2066,6 +2038,8 @@ const headAccessory = {
},
};
+fillSpecialGear(headAccessory, 'headAccessory', 20);
+
const shield = {
0: backerGear.shieldSpecial0,
1: contributorGear.shieldSpecial1,
@@ -2153,30 +2127,39 @@ const shield = {
},
springRogue: {
set: 'stealthyKittySet',
+ season: 'spring',
},
springWarrior: {
set: 'mightyBunnySet',
+ season: 'spring',
},
springHealer: {
set: 'lovingPupSet',
+ season: 'spring',
},
summerRogue: {
set: 'roguishPirateSet',
+ season: 'summer',
},
summerWarrior: {
set: 'daringSwashbucklerSet',
+ season: 'summer',
},
summerHealer: {
set: 'reefSeahealerSet',
+ season: 'summer',
},
fallRogue: {
set: 'vampireSmiterSet',
+ season: 'fall',
},
fallWarrior: {
set: 'monsterOfScienceSet',
+ season: 'fall',
},
fallHealer: {
set: 'mummyMedicSet',
+ season: 'fall',
},
winter2015Rogue: {
set: 'icicleDrakeSet',
diff --git a/website/common/script/libs/getItemInfo.js b/website/common/script/libs/getItemInfo.js
index 429831d28b..3d30cd10f9 100644
--- a/website/common/script/libs/getItemInfo.js
+++ b/website/common/script/libs/getItemInfo.js
@@ -54,6 +54,7 @@ function getDefaultGearProps (item, language) {
con: item.con,
klass: item.klass,
set: item.set,
+ season: item.season,
};
}
@@ -226,7 +227,6 @@ export default function getItemInfo (user, type, item, officialPinnedItems, lang
purchaseType: 'quests',
path: `quests.${item.key}`,
pinType: 'seasonalQuest',
- event: item.event,
};
break;
case 'gear':
diff --git a/website/common/script/libs/shops.js b/website/common/script/libs/shops.js
index 464b48ac02..41a59a2b0f 100644
--- a/website/common/script/libs/shops.js
+++ b/website/common/script/libs/shops.js
@@ -303,8 +303,9 @@ shops.getQuestShopCategories = function getQuestShopCategories (user, language)
}
category.items = filteredQuests;
-
- categories.push(category);
+ if (category.items.length > 0) {
+ categories.push(category);
+ }
});
return categories;
@@ -535,7 +536,6 @@ shops.getSeasonalShopCategories = function getSeasonalShopCategories (user, lang
const item = category.items[0];
category.specialClass = item.specialClass;
- category.event = item.event;
categories.push(category);
}
}