diff --git a/test/common/libs/shops.js b/test/common/libs/shops.js index f3b5dce724..c04fad0bd6 100644 --- a/test/common/libs/shops.js +++ b/test/common/libs/shops.js @@ -34,6 +34,31 @@ describe('shops', () => { }); }); }); + + it('shows relevant non class gear in special category', () => { + let contributor = generateUser({ + contributor: { + level: 7, + critical: true, + }, + items: { + gear: { + owned: { + weapon_armoire_basicCrossbow: true, // eslint-disable-line camelcase + }, + }, + }, + }); + + let gearCategories = shared.shops.getMarketGearCategories(contributor); + let specialCategory = gearCategories.find(o => o.identifier === 'none'); + expect(specialCategory.items.find((item) => item.key === 'weapon_special_1')); + expect(specialCategory.items.find((item) => item.key === 'armor_special_1')); + expect(specialCategory.items.find((item) => item.key === 'head_special_1')); + expect(specialCategory.items.find((item) => item.key === 'shield_special_1')); + expect(specialCategory.items.find((item) => item.key === 'weapon_special_critical')); + expect(specialCategory.items.find((item) => item.key === 'weapon_armoire_basicCrossbow'));// eslint-disable-line camelcase + }); }); describe('questShop', () => { diff --git a/website/common/script/libs/shops.js b/website/common/script/libs/shops.js index eded7e3ecf..a42a16f520 100644 --- a/website/common/script/libs/shops.js +++ b/website/common/script/libs/shops.js @@ -106,9 +106,7 @@ function getClassName (classType, language) { shops.checkMarketGearLocked = function checkMarketGearLocked (user, items) { let result = filter(items, ['pinType', 'marketGear']); - let availableGear = map(updateStore(user), (item) => getItemInfo(user, 'marketGear', item).path); - for (let gear of result) { if (gear.klass !== user.stats.class) { gear.locked = true; @@ -167,9 +165,7 @@ shops.getMarketGearCategories = function getMarketGear (user, language) { }); category.items = map(result, (e) => { - let newItem = getItemInfo(user, 'marketGear', e, officialPinnedItems); - - return newItem; + return getItemInfo(user, 'marketGear', e, officialPinnedItems); }); let specialGear = filter(content.gear.flat, (gear) => { @@ -183,7 +179,6 @@ shops.getMarketGearCategories = function getMarketGear (user, language) { }); shops.checkMarketGearLocked(user, category.items); - categories.push(category); } @@ -193,20 +188,20 @@ shops.getMarketGearCategories = function getMarketGear (user, language) { }; let falseGear = filter(content.gear.flat, (gear) => { - return user.items.gear.owned[gear.key] === false && - (gear.klass === 'special' && !gear.specialClass || - gear.key.indexOf('mystery') !== -1 || - gear.key.indexOf('armoire') !== -1); + let prevOwnedFalseGear = user.items.gear.owned[gear.key] === false && gear.klass !== user.stats.class; + let specialNonClassGear = !user.items.gear.owned[gear.key] && + content.classes.indexOf(gear.klass) < 0 && + content.classes.indexOf(gear.specialClass) < 0 && + (gear.canOwn && gear.canOwn(user)); + return prevOwnedFalseGear || specialNonClassGear; }); nonClassCategory.items = map(falseGear, (e) => { - let newItem = getItemInfo(user, 'marketGear', e); - - return newItem; + return getItemInfo(user, 'marketGear', e); }); + shops.checkMarketGearLocked(user, nonClassCategory.items); categories.push(nonClassCategory); - return categories; };