Skip to content

Add Episode:Heresy season data and power-caps #1202

Add Episode:Heresy season data and power-caps

Add Episode:Heresy season data and power-caps #1202

GitHub Actions / JEST Tests failed Feb 5, 2025 in 0s

497 passed, 8 failed and 0 skipped

Tests failed

❌ junit.xml

505 tests were completed in 21s with 497 passed, 8 failed and 0 skipped.

Test suite Passed Failed Skipped Time
src/app/accounts/destiny-account.test.ts 3✅ 787ms
src/app/armory/wishlist-collapser.test.ts 1✅ 70ms
src/app/bungie-api/http-client.test.ts 7✅ 70ms
src/app/destiny2/d2-definitions.test.ts 1✅ 2s
src/app/dim-api/reducer.test.ts 22✅ 5s
src/app/dim-ui/table-columns.test.ts 1✅ 111ms
src/app/hotkeys/hotkeys.test.ts 2✅ 66ms
src/app/inventory/d2-stores.test.ts 7✅ 2❌ 6s
src/app/inventory/notes-hashtags.test.ts 26✅ 67ms
src/app/item-popup/item-popup-actions.test.ts 1✅ 4s
src/app/item-triage/triage-utils.test.ts 2✅ 326ms
src/app/loadout-analyzer/analysis.test.ts 4✅ 3❌ 4s
src/app/loadout-builder/auto-stat-mod-utils.test.ts 7✅ 3s
src/app/loadout-builder/item-filter.test.ts 11✅ 3s
src/app/loadout-builder/process-utils.test.ts 38✅ 5s
src/app/loadout-builder/process/mappers.test.ts 3✅ 3s
src/app/loadout-builder/utils.test.ts 1✅ 70ms
src/app/loadout-drawer/loadout-drawer-reducer.test.ts 33✅ 3❌ 6s
src/app/loadout/loadout-share/loadout-import.test.ts 10✅ 286ms
src/app/loadout/mod-assignment-utils.test.ts 5✅ 3s
src/app/register-service-worker.test.ts 3✅ 190ms
src/app/search/autocomplete.test.ts 40✅ 630ms
src/app/search/items/search-filters/stats-set.test.ts 1✅ 54ms
src/app/search/loadouts/loadout-search-filter.test.ts 2✅ 336ms
src/app/search/query-parser.test.ts 76✅ 190ms
src/app/search/search-config.test.ts 57✅ 362ms
src/app/search/search-filter.test.ts 34✅ 153ms
src/app/settings/vault-grouping.test.ts 3✅ 4s
src/app/utils/collections.test.ts 10✅ 60ms
src/app/utils/csv.test.ts 4✅ 76ms
src/app/utils/intl.test.ts 33✅ 250ms
src/app/utils/memoize.test.ts 1✅ 71ms
src/app/utils/promises.test.ts 1✅ 56ms
src/app/utils/time.test.ts 36✅ 378ms
src/app/utils/undo-redo-history.test.ts 1✅ 353ms
src/app/vendors/d2-vendors.test.ts 1✅ 3s
src/app/wishlists/wishlist-file.test.ts 1✅ 83ms
src/browsercheck.test.ts 7✅ 133ms
src/testing/precache-manifest.test.ts 1✅ 3s

✅ src/app/accounts/destiny-account.test.ts

generatePlatforms
  ✅ gets one D2 account and one D1 account
  ✅ handles when D2 accounts are in profilesWithErrors and error code DestinyUnexpectedError
  ✅ does not return D2 account when they are in profilesWithErrors and error code DestinyAccountNotFound

✅ src/app/armory/wishlist-collapser.test.ts

perkConsolidator
  ✅ does its thing

✅ src/app/bungie-api/http-client.test.ts

✅ check Request builder for [Function getItem]
✅ check Request builder for [Function getProfile]
✅ check Request builder for [Function getLinkedProfiles]
✅ check Request builder for [Function getVendor]
✅ check Request builder for [Function pullFromPostmaster]
✅ should throw an error if there is no room in the destination
✅ should throw an error if API is down for maintenance

✅ src/app/destiny2/d2-definitions.test.ts

✅ something

✅ src/app/dim-api/reducer.test.ts

dim api reducer
  ✅ setSetting: changes settings
  ✅ setItemTag: sets tags if there were none before
  ✅ setItemTag: clears set tags
  ✅ setItemHashTag: sets tags if there were none before
  ✅ setItemHashTag: clears set tags
  ✅ setItemTag/setNote: can set both tag and note
  ✅ setItemTag/setNote: can set both tag and note
  ✅ searchUsed: can track valid queries
  ✅ saveSearch: can save valid queries
  ✅ saveSearch: can unsave valid queries
  ✅ saveSearch: does not save invalid queries
  ✅ saveSearch: can unsave previously saved invalid queries
  ✅ deleteSearch: can delete previously saved invalid queries
  ✅ updateLoadout: can save a loadout
  ✅ updateLoadout: can update a loadout
  ✅ updateLoadout: can delete a loadout
prepareToFlushUpdates
  ✅ can coalesce settings
  ✅ can handle multiple profile updates
  ✅ can handle multiple profile updates with settings last
  ✅ can handle loadouts
  ✅ can handle setting both tags and notes
finishedUpdates
  ✅ can mark success

✅ src/app/dim-ui/table-columns.test.ts

useTableColumnSorts
  ✅ use cases

✅ src/app/hotkeys/hotkeys.test.ts

✅ stacks hotkeys
✅ allows Escape hotkey when an input is focused

❌ src/app/inventory/d2-stores.test.ts

process stores
  ✅ can process stores without errors
  ✅ all sockets' plugged is present in the list of plugOptions
  ✅ intrinsic sockets should have only one plugOption
  ✅ sparrows should have perks
  ✅ items with stats should have at least one nonzero stat
  ✅ item perks can be marked as cannotCurrentlyRoll
  ❌ generates a correct weapon CSV export
	Error: expect(received).toMatchSnapshot()
  ❌ generates a correct armor CSV export
	Error: expect(received).toMatchSnapshot()
  ✅ generates a correct ghost CSV export

✅ src/app/inventory/notes-hashtags.test.ts

✅ getHashtagsFromString: #foo #bar
✅ getHashtagsFromString: #foo, #bar
✅ getHashtagsFromString: This note has #foo tag and also#bar
✅ getHashtagsFromString: #foo#bar
✅ getHashtagsFromString: #foo,#bar
✅ getHashtagsFromString: #foo-#bar
✅ getHashtagsFromString: Emoji #🤯 tags
✅ collectHashtagsFromInfos should get a unique set of hashtags from multiple notes
✅ appendedToNote: undefined + A note => A note
✅ appendedToNote: A note + #fancy => A note #fancy
✅ appendedToNote: A #fancy note + #fancy => A #fancy note
✅ appendedToNote: #pve #s20 + #pve #stasis => #pve #s20 #stasis
✅ appendedToNote: #pve #s20 + #void #pve #stasis => #pve #s20 #void #stasis
✅ appendedToNote: My favorite! #pve #s20 + #pve #stasis => My favorite! #pve #s20 #stasis
✅ appendedToNote: My favorite!
#pve #s20 + #pve #stasis => My favorite!
#pve #s20 #stasis
✅ appendedToNote: My favorite!
#pve #s20 + #pve
#stasis => My favorite!
#pve #s20
#stasis
✅ appendedToNote: #pve, #s20 + #pve #stasis => #pve, #s20 #stasis
✅ appendedToNote: #void + #void #voidwalker #other => #void #voidwalker #other
✅ removedFromNote: A note - A note =>
✅ removedFromNote: A note #fancy - #fancy => A note
✅ removedFromNote: A #fancy note - #fancy => A note
✅ removedFromNote: #voidwalker #void - #void => #voidwalker
✅ removedFromNote: #voidwalker #void - void => #voidwalker #void
✅ removedFromNote: #voidwalker My #void gun - My #void gun => #voidwalker
✅ removedFromNote: #pve, #s20, #stasis - #s20 => #pve, , #stasis
✅ removedFromNote: Void void void arc - void => Void arc

✅ src/app/item-popup/item-popup-actions.test.ts

✅ handles an equipped item

✅ src/app/item-triage/triage-utils.test.ts

triage armor comparison works
  ✅ works for non-artifice armor
  ✅ works for artifice armor

❌ src/app/loadout-analyzer/analysis.test.ts

basic loadout analysis finding tests
  ✅ finds MissingItems
  ✅ finds InvalidMods
  ✅ finds EmptyFragmentSlots/TooManyFragments
  ✅ finds InvalidSearchQuery
  ❌ finds UsesSeasonalMods/ModsDontFit
	TypeError: Cannot read properties of undefined (reading 'id')
  ❌ finds DoesNotRespectExotic
	TypeError: Cannot read properties of undefined (reading 'id')
  ❌ finds DoesNotSatisfyStatConstraints
	Error: expect(received).toBe(expected) // Object.is equality

✅ src/app/loadout-builder/auto-stat-mod-utils.test.ts

process-utils auto mod structure
  ✅ snapshot of mod defs when assuming general for auto mods
  ✅ snapshot of mod defs when assuming cheapgeneral for auto mods
  ✅ different ways of hitting target stats with 5 remaining general mods (using artifice mods: false)
  ✅ different ways of hitting target stats with 3 remaining general mods (using artifice mods: false)
  ✅ different ways of hitting target stats with 1 remaining general mods (using artifice mods: true)
  ✅ different ways of hitting target stats with 0 remaining general mods (using artifice mods: true)
  ✅ different ways of hitting target stats with 5 remaining general mods (using artifice mods: true)

✅ src/app/loadout-builder/item-filter.test.ts

loadout-builder item-filter
  ✅ filters nothing out when no filters specified
  ✅ filters out items with insufficient energy capacity
  ✅ filters nothing out when any exotic
  ✅ removes exotics when no exotic
  ✅ filters nothing out when infeasible filter
  ✅ ignores filter for certain slots
  ✅ filter applies to some slots
  ✅ specific exotic filtered
  ✅ any exotic does not ignore filters if they can be satisfied
  ✅ any exotic ignores filters if they cannot be satisfied
  ✅ mod assignment may cause exotic slot to not have options

✅ src/app/loadout-builder/process-utils.test.ts

process-utils mod assignment
  ✅ generates the correct number of permutations for 1 unique mods
  ✅ generates the correct number of permutations for 2 unique mods
  ✅ generates the correct number of permutations for 3 unique mods
  ✅ generates the correct number of permutations for 4 unique mods
  ✅ generates the correct number of permutations for 5 unique mods
  ✅ can fit all mods when there are no mods
  ✅ can fit five general mods
  ✅ it can fit a general mod into a single item at index 0
  ✅ it can fit a general mod into a single item at index 1
  ✅ it can fit a general mod into a single item at index 2
  ✅ it can fit a general mod into a single item at index 3
  ✅ it can fit a general mod into a single item at index 4
  ✅ it can fit five activity mods
  ✅ it can't fit five activity mods
  ✅ it can fit a activity mod into a single item at index 0
  ✅ it can fit a activity mod into a single item at index 1
  ✅ it can fit a activity mod into a single item at index 2
  ✅ it can fit a activity mod into a single item at index 3
  ✅ it can fit a activity mod into a single item at index 4
  ✅ can fit general, activity, and combat mods if there is enough energy
  ✅ can't fit general, activity, and combat mods if there isn't enough energy
  ✅ can't fit mods if general mods have too much energy
  ✅ can't fit mods if combat mods have too much energy
  ✅ can't fit mods if activity mods have too much energy
process-utils auto mods
  ✅ the problem is solvable
  ✅ higher stats means we cannot find a viable set of picks
  ✅ we need all artifice mod slots
  ✅ we need all the energy capacity in all general mod slots
  ✅ activity mod cannot go into the other item if we want to hit stats
process-utils optimal mods
  ✅ set with stats [80, 70, 80, 40, 30, 30], energies [0, 3, 0, 3, 0], numArtifice 0 yields tiers [8, 7, 8, 6, 3, 3]
  ✅ set with stats [63, 70, 59, 35, 30, 30], energies [2, 0, 0, 0, 0], numArtifice 3 yields tiers [7, 7, 6, 3, 3, 3]
  ✅ set with stats [80, 65, 80, 35, 30, 30], energies [1, 0, 0, 0, 0], numArtifice 2 yields tiers [8, 7, 8, 4, 3, 3]
  ✅ set with stats [68, 66, 30, 30, 30, 30], energies [0, 0, 0, 0, 0], numArtifice 4 yields tiers [8, 6, 3, 3, 3, 3]
  ✅ set with stats [68, 66, 30, 30, 11, 30], energies [2, 2, 0, 0, 0], numArtifice 4 yields tiers [7, 6, 3, 3, 3, 3]
  ✅ set with stats [30, 61, 30, 30, 30, -14], energies [5, 5, 5, 5, 5], numArtifice 5 yields tiers [5, 6, 3, 3, 3, 3]
  ✅ set with stats [18, 80, 80, 26, 80, 30], energies [0, 0, 0, 3, 0], numArtifice 4 produces exact stats [30, 80, 80, 31, 80, 30]
  ✅ set with stats [26, 80, 80, 18, 80, 30], energies [0, 0, 0, 3, 0], numArtifice 4 produces exact stats [32, 80, 80, 31, 80, 30]
✅ process-utils activity mods

✅ src/app/loadout-builder/process/mappers.test.ts

lo process mappers
  ✅ mapped energy capacity is 10 when assumed masterwork is used
  ✅ mapped energy capacity is the items when assumed masterwork is not used
  ✅ mapped energy capacity defaults to MIN_LO_ITEM_ENERGY when assumed masterwork is not used and the item energy is low

✅ src/app/loadout-builder/utils.test.ts

statTierWithHalf
  ✅ checks proper visual tier formatting

❌ src/app/loadout-drawer/loadout-drawer-reducer.test.ts

addItem
  ✅ can add an item to an empty loadout
  ✅ saves the crafted date for crafted items
  ✅ can add an item to a loadout that is already there as a noop
  ✅ can add an unequipped item to a loadout
  ✅ defaults equip when unset
  ✅ can replace the currently equipped item
  ✅ can switch an equipped item to unequipped if added again with the equip flag set
  ✅ can switch an unequipped item to equipped if added again with the equip flag set
  ✅ handles duplicates even if the new version is a reshaped version of the one saved in the loadout
  ✅ fills in socket overrides when adding a subclass
  ✅ replaces the existing subclass when adding a new one
  ✅ does nothing if the item cannot be in a loadout
  ❌ does nothing if the item is for the wrong class
	Error: expect(received).toBeDefined()
  ❌ does nothing when adding class-specific item to any-class loadout
	Error: expect(received).toBeDefined()
  ❌ removes class-specific items when saving as "any class"
	Error: expect(received).toBeDefined()
  ✅ does nothing if the bucket is already at capacity
  ✅ de-equips an exotic in another bucket when equipping a new exotic
removeItem
  ✅ promotes an unequipped item to equipped when the equipped item is removed
  ✅ does nothing when asked to remove an item that is not in the loadout
toggleEquipped
  ✅ can toggle an equipped item to unequipped
  ✅ can toggle an unequipped item to equipped
  ✅ does nothing when applied to a subclass
  ✅ does not lose socket overrides
removeMod
  ✅ removes a mod by inventory item hash
clearSubclass
  ✅ removes the subclass
setLoadoutSubclassFromEquipped
  ✅ correctly populates the subclass and its overrides
fillLoadoutFromEquipped
  ✅ can fill in weapons
  ✅ can fill in armor
  ✅ can fill in everything
  ✅ will not overwrite mods if they are already there
  ✅ will not overwrite artifact unlocks if they are already there
fillLoadoutFromUnequipped
  ✅ fills in unequipped items but does not change an existing item
  ✅ fills in unequipped items for a single category
  ✅ fills in unequipped items for a single category without overflow
clearBucketCategory
  ✅ clears the weapons category
  ✅ clears the general category without clearing subclass

✅ src/app/loadout/loadout-share/loadout-import.test.ts

dim.gg loadout share links parsing
  ✅ valid dim.gg loadout link 4j5nz4q
  ✅ valid dim.gg loadout link 4j5nz4q/Heart-of-Inmost-Light-Arc
  ✅ valid dim.gg loadout link dim.gg/4j5nz4q
  ✅ valid dim.gg loadout link https://dim.gg/4j5nz4q
  ✅ valid dim.gg loadout link https://dim.gg/4j5nz4q/
  ✅ valid dim.gg loadout link http://dim.gg/4j5nz4q/
  ✅ valid dim.gg loadout link https://dim.gg/4j5nz4q/Heart-of-Inmost-Light-Arc
  ✅ valid direct loadout link https://beta.destinyitemmanager.com/loadouts?loadout=%7B%22id%22%3A%22jf7w53i%22%2C%22name%22%3A%22Simple+Loadout%22%2C%22classType%22%3A3%2C%22clearSpace%22%3Afalse%2C%22equipped%22%3A%5B%5D%2C%22unequipped%22%3A%5B%5D%2C%22createdAt%22%3A1668353218495%2C%22parameters%22%3A%7B%22mods%22%3A%5B2623485440%5D%2C%22lockArmorEnergyType%22%3A1%2C%22assumeArmorMasterwork%22%3A1%7D%7D
  ✅ valid direct loadout link https://app.destinyitemmanager.com/loadouts?loadout={%22name%22:%22robojumper%27s%20loadout%22,%22classType%22:0,%22equipped%22:[{%22id%22:%226917529830717539496%22,%22hash%22:2531963421},{%22id%22:%226917529836701241352%22,%22hash%22:1937552980},{%22id%22:%226917529682880957257%22,%22hash%22:1399243961},{%22id%22:%226917529643654891819%22,%22hash%22:1322544481},{%22id%22:%226917529208297337712%22,%22hash%22:613647804,%22socketOverrides%22:{%220%22:3260056808,%221%22:469281040,%222%22:1399217,%223%22:3866705246,%224%22:2031919264,%225%22:3469412971,%226%22:537774540,%227%22:3469412975,%228%22:2483898429,%229%22:2483898430}}],%22parameters%22:{%22mods%22:[667313240,3521781036,1499759470,2051366208,1740246051,1740246051,1740246051,2187989982,2187989982,1977242754,1977242752,445559589,445559589]}}
  ✅ valid direct loadout link https://beta.destinyitemmanager.com/4611686018483139177/d2/loadouts?loadout=%7B%22id%22%3A%22d2ap%22%2C%22name%22%3A%22D2ArmorPicker%20Loadout%22%2C%22classType%22%3A1%2C%22parameters%22%3A%7B%22statConstraints%22%3A%5B%7B%22statHash%22%3A2996146975%2C%22minTier%22%3A5%2C%22maxTier%22%3A10%7D%2C%7B%22statHash%22%3A392767087%2C%22minTier%22%3A10%2C%22maxTier%22%3A10%7D%2C%7B%22statHash%22%3A1943323491%2C%22minTier%22%3A0%2C%22maxTier%22%3A10%7D%2C%7B%22statHash%22%3A1735777505%2C%22minTier%22%3A0%2C%22maxTier%22%3A10%7D%2C%7B%22statHash%22%3A144602215%2C%22minTier%22%3A0%2C%22maxTier%22%3A10%7D%2C%7B%22statHash%22%3A4244567218%2C%22minTier%22%3A10%2C%22maxTier%22%3A10%7D%5D%2C%22mods%22%3A%5B1484685887%2C2979815167%2C2850583378%2C2850583378%5D%2C%22assumeArmorMasterwork%22%3A3%2C%22lockArmorEnergyType%22%3A1%2C%22exoticArmorHash%22%3A2773056939%7D%2C%22equipped%22%3A%5B%7B%22id%22%3A%226917529342535580813%22%2C%22hash%22%3A2773056939%7D%2C%7B%22id%22%3A%226917529801497037343%22%2C%22hash%22%3A1148597205%7D%2C%7B%22id%22%3A%226917529793250524983%22%2C%22hash%22%3A145651147%7D%2C%7B%22id%22%3A%226917529807139650343%22%2C%22hash%22%3A2724719415%7D%2C%7B%22id%22%3A%2212345%22%2C%22hash%22%3A2453351420%2C%22socketOverrides%22%3A%7B%227%22%3A2661180602%2C%228%22%3A2272984671%7D%7D%5D%2C%22unequipped%22%3A%5B%5D%2C%22clearSpace%22%3Afalse%7D

✅ src/app/loadout/mod-assignment-utils.test.ts

mod-assignment-utils plugging strategy
  ✅ reset assignments are present and required
  ✅ keeps existing mod in place if removal optional
  ✅ removes existing mod if needed
  ✅ prefers replacing mutual exclusion mod
  ✅ succeeds even if we choose not to replace in same slot

✅ src/app/register-service-worker.test.ts

isNewVersion
  ✅ should recognize two identical versions
  ✅ should newer versions
  ✅ should ignore older versions

✅ src/app/search/autocomplete.test.ts

autocompleteTermSuggestions
  ✅ autocomplete within query for plain string match {jotu} - {jötunn}
  ✅ autocomplete within query for {is:haspower is:b}
  ✅ autocomplete within query for {(is:blue ju|n)}
  ✅ autocomplete within query for {is:bow is:v|oid}
  ✅ autocomplete within query for {season:>outl}
  ✅ autocomplete within query for {not(}
  ✅ autocomplete within query for {memento:}
  ✅ autocomplete within query for {foo memento:}
  ✅ autocomplete within multi-word query for {arctic haz} should suggest {name:"arctic haze"}
  ✅ autocomplete within multi-word query for {is:weapon arctic haz| -is:exotic} should suggest {is:weapon name:"arctic haze" -is:exotic}
  ✅ autocomplete within multi-word query for {name:"arctic haz} should suggest {name:"arctic haze"}
  ✅ autocomplete within multi-word query for {name:'arctic haz} should suggest {name:"arctic haze"}
  ✅ autocomplete within multi-word query for {name:"foo" arctic haz} should suggest {name:"foo" name:"arctic haze"}
  ✅ autocomplete within multi-word query for {ager's sce} should suggest {name:"ager's scepter"}
  ✅ autocomplete within multi-word query for {the last word} should suggest {name:"the last word"}
  ✅ autocomplete within multi-word query for {acd/0 fee} should suggest {name:"acd/0 feedback fence"}
  ✅ autocomplete within multi-word query for {stat:rpm:200 first in, last} should suggest {stat:rpm:200 name:"first in, last out"}
  ✅ autocomplete within multi-word query for {two-tail} should suggest {name:"two-tailed fox"}
  ✅ autocomplete within multi-word query for {(is:a or is:b) and (is:c or multi w|)} should suggest {(is:a or is:b) and (is:c or name:"multi word")}
  ✅ autocomplete within multi-word query for {"rare curio" arctic haz} should suggest {"rare curio" name:"arctic haze"}
  ✅ autocomplete within multi-word query for {"rare curio" or arctic haz} should suggest {"rare curio" or name:"arctic haze"}
  ✅ autocomplete within multi-word query for {toil and trou} should suggest {name:"toil and trouble"}
  ✅ autocomplete within multi-word query for {perkname:"fate of} should suggest {perkname:"fate of all fools"}
  ✅ autocomplete within multi-word query for {perkname:fate of} should suggest {perkname:"fate of all fools"}
  ✅ autocomplete within multi-word query for {rare curio or arctic haz} should suggest {rare curio or name:"arctic haze"}
  ✅ autocomplete within multi-word query for {name:heritage arctic haze} should suggest {name:heritage name:"arctic haze"}
  ✅ autocomplete within multi-word query for {adept pali} should suggest {adept name:"the palindrome"}
filterSortRecentSearches
  ✅ filter/sort recent searches for query ||
  ✅ filter/sort recent searches for query |high|
  ✅ check saved search highlighting for query ||
  ✅ check saved search highlighting for query |craft|
  ✅ check saved search highlighting for query |craftable|
  ✅ check saved search highlighting for query |crafted|
filterComplete
  ✅ autocomplete terms for |is:b|
  ✅ autocomplete terms for |jun|
  ✅ autocomplete terms for |sni|
  ✅ autocomplete terms for |stat:mob|
  ✅ autocomplete terms for |stat|
  ✅ autocomplete terms for |stat:|
  ✅ autocomplete terms for |ote|

✅ src/app/search/items/search-filters/stats-set.test.ts

✅ insertAll 1

✅ src/app/search/loadouts/loadout-search-filter.test.ts

buildSearchConfig
  ✅ generates a reasonable filter map
  ✅ filter formats specify unambiguous formats

✅ src/app/search/query-parser.test.ts

✅ parse |is:blue is:haspower -is:maxpower|
✅ parse |is:blue is:haspower not:maxpower|
✅ parse |not:maxpower|
✅ parse |not -not:maxpower|
✅ parse |not not not:maxpower|
✅ parse |is:blue is:weapon or is:armor not:maxpower|
✅ parse |not not:maxpower|
✅ parse |-is:equipped is:haspower is:incurrentchar|
✅ parse |-source:garden -source:lastwish sunsetsafter:arrival|
✅ parse |-is:exotic -is:locked -is:maxpower -is:tagged stat:total:<55|
✅ parse |(is:weapon is:sniperrifle) or (is:armor modslot:arrival)|
✅ parse |(is:weapon and is:sniperrifle) or not (is:armor and modslot:arrival)|
✅ parse |is:weapon and is:sniperrifle or not is:armor and modslot:arrival|
✅ parse |is:weapon is:sniperrifle or not is:armor modslot:arrival|
✅ parse |is:weapon is:sniperrifle or is:armor and modslot:arrival|
✅ parse |is:weapon (is:sniperrifle or (is:armor and modslot:arrival))|
✅ parse |-(power:>1000 and -modslot:arrival)|
✅ parse |( power:>1000 and -modslot:arrival ) |
✅ parse |- is:exotic - (power:>1000)|
✅ parse |is:armor2.0|
✅ parse |not forgotten|
✅ parse |cluster tracking|
✅ parse |name:"Hard Light"|
✅ parse |name:'Hard Light'|
✅ parse |name:"Gahlran's Right Hand"|
✅ parse |-witherhoard|
✅ parse |perk:수집가|
✅ parse |perk:"수집가"|
✅ parse |"수집가"|
✅ parse |수집가|
✅ parse |is:rocketlauncher -"cluster" -"tracking module"|
✅ parse |is:rocketlauncher -"cluster" -'tracking module'|
✅ parse |is:rocketlauncher (perk:"cluster" or perk:"tracking module")|
✅ parse |(is:hunter power:>=540) or (is:warlock power:>=560)|
✅ parse |"grenade launcher reserves"|
✅ parse |“grenade launcher reserves”|
✅ parse |‘grenade launcher reserves’|
✅ parse |(("test" or "test") and "test")|
✅ parse |  (
    (
    (is:weapon -is:maxpower powerlimit:1060 or tag:junk or is:blue)
    or
    (
    (is:armor -is:exotic -is:classitem)
  
    -(is:titan (basestat:recovery:>=18 or basestat:total:>=63))
    -(is:hunter ((basestat:recovery:>=13 basestat:mobility:>=18) or basestat:recovery:>15 or basestat:total:>=63))
    -(is:warlock ((basestat:recovery:>=18 discipline:>=17) or basestat:total:>=63))
  
    -(
    ((basestat:mobility:>=18 basestat:resilience:>=13) or
    (basestat:mobility:>=18 basestat:recovery:>=13) or
    (basestat:mobility:>=18 basestat:discipline:>=13) or
    (basestat:mobility:>=18 basestat:intellect:>=13) or
    (basestat:mobility:>=18 basestat:strength:>=13) or
    (basestat:resilience:>=18 basestat:mobility:>=13) or
    (basestat:resilience:>=18 basestat:recovery:>=13) or
    (basestat:resilience:>=18 basestat:discipline:>=13) or
    (basestat:resilience:>=18 basestat:intellect:>=13) or
    (basestat:resilience:>=18 basestat:strength:>=13) or
    (basestat:recovery:>=18 basestat:mobility:>=13) or
    (basestat:recovery:>=18 basestat:resilience:>=13) or
    (basestat:recovery:>=18 basestat:discipline:>=13) or
    (basestat:recovery:>=18 basestat:intellect:>=13) or
    (basestat:recovery:>=18 basestat:strength:>=13) or
    (basestat:discipline:>=18 basestat:mobility:>=13) or
    (basestat:discipline:>=18 basestat:resilience:>=13) or
    (basestat:discipline:>=18 basestat:recovery:>=13) or
    (basestat:discipline:>=18 basestat:intellect:>=13) or
    (basestat:discipline:>=18 basestat:strength:>=13) or
    (basestat:intellect:>=18 basestat:mobility:>=13) or
    (basestat:intellect:>=18 basestat:resilience:>=13) or
    (basestat:intellect:>=18 basestat:recovery:>=13) or
    (basestat:intellect:>=18 basestat:discipline:>=13) or
    (basestat:intellect:>=18 basestat:strength:>=13) or
    (basestat:strength:>=18 basestat:mobility:>=13) or
    (basestat:strength:>=18 basestat:resilience:>=13) or
    (basestat:strength:>=18 basestat:recovery:>=13) or
    (basestat:strength:>=18 basestat:discipline:>=13) or
    (basestat:strength:>=18 basestat:intellect:>=13))
    )
  
    -(
    ((basestat:mobility:>=13 basestat:resilience:>=13 basestat:recovery:>=13) or
    (basestat:mobility:>=13 basestat:resilience:>=13 basestat:discipline:>=13) or
    (basestat:mobility:>=13 basestat:resilience:>=13 basestat:intellect:>=13) or
    (basestat:mobility:>=13 basestat:resilience:>=13 basestat:strength:>=13) or
    (basestat:mobility:>=13 basestat:recovery:>=13 basestat:discipline:>=13) or
    (basestat:mobility:>=13 basestat:recovery:>=13 basestat:intellect:>=13) or
    (basestat:mobility:>=13 basestat:recovery:>=13 basestat:strength:>=13) or
    (basestat:mobility:>=13 basestat:discipline:>=13 basestat:intellect:>=13) or
    (basestat:mobility:>=13 basestat:discipline:>=13 basestat:strength:>=13) or
    (basestat:mobility:>=13 basestat:intellect:>=13 basestat:strength:>=13) or
    (basestat:resilience:>=13 basestat:recovery:>=13 basestat:discipline:>=13) or
    (basestat:resilience:>=13 basestat:recovery:>=13 basestat:intellect:>=13) or
    (basestat:resilience:>=13 basestat:recovery:>=13 basestat:strength:>=13) or
    (basestat:resilience:>=13 basestat:discipline:>=13 basestat:intellect:>=13) or
    (basestat:resilience:>=13 basestat:discipline:>=13 basestat:strength:>=13) or
    (basestat:resilience:>=13 basestat:intellect:>=13 basestat:strength:>=13) or
    (basestat:recovery:>=13 basestat:discipline:>=13 basestat:intellect:>=13) or
    (basestat:recovery:>=13 basestat:discipline:>=13 basestat:strength:>=13) or
    (basestat:recovery:>=13 basestat:intellect:>=13 basestat:strength:>=13) or
    (basestat:discipline:>=13 basestat:intellect:>=13 basestat:strength:>=13))
    )
  
    -(basestat:mobility:>=8 basestat:resilience:>=8 basestat:recovery:>=8 basestat:discipline:>=8 basestat:intellect:>=8 basestat:strength:>=8)
    )
  
    or
    (is:classitem ((is:dupelower -is:modded) or (is:sunset))) 
    or
    (is:armor -powerlimit:>1060) 
    or
    (is:armor is:blue)
    )
    -tag:keep -tag:archive -tag:favorite -tag:infuse -is:maxpower -power:>=1260 -is:inloadout -is:masterwork
    )|
✅ parse |not forgotten|
✅ parse |not (forgotten)|
✅ parse |not "forgotten"|
✅ parse |gnawing hunger|
✅ parse |/* My cool search */ is:armor|
✅ parse |  /* My cool search */
 is:armor|
✅ parse |/* My cool search */ (/* armor */ is:armor and is:blue) or (/*weapons*/ is:weapon and perkname:"Kill Clip")|
✅ parse |   |
✅ |is:blue is:weapon or is:armor not:maxpower| is equivalent to |is:blue and (is:weapon or is:armor) and -is:maxpower|
✅ |not forgotten| is equivalent to |-"forgotten"|
✅ |cluster tracking| is equivalent to |"cluster" and "tracking"|
✅ |is:weapon and is:sniperrifle or not is:armor and modslot:arrival| is equivalent to |(is:weapon and is:sniperrifle) or (-is:armor and modslot:arrival)|
✅ |is:weapon is:sniperrifle or not is:armor modslot:arrival| is equivalent to |is:weapon and (is:sniperrifle or -is:armor) and modslot:arrival|
✅ |is:weapon is:sniperrifle or is:armor and modslot:arrival| is equivalent to |is:weapon and (is:sniperrifle or (is:armor and modslot:arrival))|
✅ |is:rocketlauncher perk:"cluster" or perk:"tracking module"| is equivalent to |is:rocketlauncher (perk:"cluster" or perk:"tracking module")|
✅ |is:blue (is:rocketlauncher| is equivalent to |is:blue is:rocketlauncher|
✅ |  is:blue  | is equivalent to |is:blue|
✅ |is:blue is:haspower not:maxpower| is canonically |is:blue is:haspower -is:maxpower|
✅ |is:weapon and is:sniperrifle or not is:armor and modslot:arrival| is canonically |(is:weapon is:sniperrifle) or (-is:armor modslot:arrival)|
✅ |is:rocketlauncher perk:"cluster" or perk:'tracking module'| is canonically |is:rocketlauncher (perk:cluster or perk:"tracking module")|
✅ |( power:>1000 and -modslot:arrival ) | is canonically |power:>1000 -modslot:arrival|
✅ |food fight| is canonically |food and fight|
✅ |/* My cool search   */
 is:armor| is canonically |/* my cool search */ is:armor|
✅ |/* My cool search */ (/* armor */ is:armor and is:blue) or (/*weapons*/ is:weapon and perkname:"Kill Clip")| is canonically |/* my cool search */ (is:armor is:blue) or (is:weapon perkname:"kill clip")|
✅ |inloadout:"----<()>fast"| is canonically |inloadout:"----<()>fast"|
✅ |perkname:"foobar"| is canonically |perkname:foobar|
✅ |perkname:'foo bar'| is canonically |perkname:"foo bar"|
✅ |perkname:"foobar"| is canonically |perkname:foobar|
✅ |perkname:'foo"bar'| is canonically |perkname:'foo"bar'|
✅ |perkname:"foo\"bar"| is canonically |perkname:'foo"bar'|
✅ |perkname:'foo\"ba\'r'| is canonically |perkname:'foo"ba\'r'|
✅ |foobar| quoting roundtrip
✅ |Foo\bar| quoting roundtrip
✅ |My cool loadout| quoting roundtrip
✅ |My "cool" loadout| quoting roundtrip
✅ |My "cool" loadout's little brother| quoting roundtrip
✅ |My "cool" load\out's little brother| quoting roundtrip

✅ src/app/search/search-config.test.ts

buildSearchConfig
  ✅ generates a reasonable filter map
  ✅ filter formats specify unambiguous formats
validateQuery
  ✅ is: filter is:crafted - validity true
  ✅ is: filter not:crafted - validity true
  ✅ is: filter crafted:is - validity false
  ✅ query filter tag:favorite - validity true
  ✅ query filter tag:none - validity true
  ✅ query filter tag:any - validity false
  ✅ query filter is:tag - validity false
  ✅ query filter tag:<5 - validity false
  ✅ query filter tag:recovery:17 - validity false
  ✅ freeform filter notes:#hashtag - validity true
  ✅ freeform filter notes:verbatim:colon - validity true
  ✅ freeform filter notes"with spaces" - validity true
  ✅ freeform filter notes:<5 - validity true
  ✅ freeform filter is:notes - validity false
  ✅ mixed filter is:masterwork - validity true
  ✅ mixed filter masterwork:range - validity true
  ✅ mixed filter masterwork:<5 - validity true
  ✅ mixed filter masterwork:=5 - validity true
  ✅ mixed filter masterwork:5 - validity true
  ✅ mixed filter masterwork:rnage - validity false
  ✅ mixed filter masterwork:<range - validity false
  ✅ mixed filter masterwork:range:5 - validity false
  ✅ stat filter stat:recovery:5 - validity true
  ✅ stat filter stat:recovery:<=5 - validity true
  ✅ stat filter stat:recovery+discipline:>=5 - validity true
  ✅ stat filter stat:highest&secondhighest:>20 - validity true
  ✅ stat filter stat:highest&recovery+strength&strength&range:>20 - validity true
  ✅ stat filter basestat:range:>50 - validity true
  ✅ stat filter stat:badstat:>20 - validity false
  ✅ stat filter stat:badstat&badcombo:>20 - validity false
  ✅ stat filter stat:too&+many:>20 - validity false
  ✅ stat filter is:stat - validity false
  ✅ stat filter stat:recovery - validity false
  ✅ stat filter stat:=5 - validity false
  ✅ search string count:2 - validity true
  ✅ search string count:=2 - validity true
  ✅ search string count:<=2 - validity true
  ✅ search string count:<=2.5 - validity true
  ✅ search string is:count - validity false
  ✅ search string count:count - validity false
  ✅ search string count:recovery - validity false
  ✅ search string count:<=2:=2 - validity false
  ✅ search string count:<2> - validity false
  ✅ search string season:worthy - validity true
  ✅ search string season:<=worthy - validity true
  ✅ search string season:=worthy - validity true
  ✅ search string season:>=arrival - validity true
  ✅ search string season:222 - validity true
  ✅ search string season:=10 - validity true
  ✅ search string season:>2.5 - validity true
  ✅ search string is:season - validity false
  ✅ search string season:1redwar - validity false
  ✅ search string season:season - validity false
  ✅ search string season:arrivals - validity false
  ✅ search string season:arrivalworthy - validity false

✅ src/app/search/search-filter.test.ts

generateSuggestionsForFilter
  ✅ full suggestions for filter format 'undefined', keyword '[ 'a', 'b', 'c' ]' with suggestions undefined, overload undefined
  ✅ full suggestions for filter format 'query', keyword 'a' with suggestions [ 'b', 'c' ], overload undefined
  ✅ full suggestions for filter format 'stat', keyword 'a' with suggestions [ 'b', 'c' ], overload undefined
  ✅ full suggestions for filter format 'range', keyword 'a' with suggestions undefined, overload undefined
  ✅ full suggestions for filter format 'range', keyword 'a' with suggestions undefined, overload { worthy: 10, arrivals: 11 }
  ✅ full suggestions for filter format 'freeform', keyword 'a' with suggestions [ 'b', 'c' ], overload undefined
  ✅ full suggestions for filter format 'undefined', keyword '[ 'a' ]' with suggestions undefined, overload undefined
  ✅ full suggestions for filter format 'stat', keyword 'stat' with suggestions [
  'rpm',             'rof',
  'charge',          'impact',
  'handling',        'range',
  'stability',       'reload',
  'magazine',        'aimassist',
  'equipspeed',      'shieldduration',
  'velocity',        'blastradius',
  'recoildirection', 'drawtime',
  'zoom',            'airborne',
  'accuracy',        'swingspeed',
  'guardefficiency', 'guardresistance',
  'chargerate',      'guardendurance',
  'ammocapacity',    'mobility',
  'resilience',      'recovery',
  'discipline',      'intellect',
  'strength',        'total',
  'any'
], overload undefined
  ✅ full suggestions for filter format 'query', keyword 'maxstatvalue' with suggestions [
  'mobility',
  'resilience',
  'recovery',
  'discipline',
  'intellect',
  'strength',
  'total',
  'any'
], overload undefined
  ✅ full suggestions for filter format 'query', keyword 'maxstatvalue' with suggestions [
  'mobility',
  'resilience',
  'recovery',
  'discipline',
  'intellect',
  'strength',
  'total',
  'any'
], overload undefined
  ✅ full suggestions for filter format 'range', keyword 'energycapacity' with suggestions undefined, overload undefined
rangeStringToComparator
  ✅ rangeStringToComparator('<10')(8) === true
  ✅ rangeStringToComparator('<10')(10) === false
  ✅ rangeStringToComparator('>10')(10) === false
  ✅ rangeStringToComparator('>10')(15) === true
  ✅ rangeStringToComparator('<=10')(10) === true
  ✅ rangeStringToComparator('>=10')(10) === true
  ✅ rangeStringToComparator('<=10')(8) === true
  ✅ rangeStringToComparator('>=10')(15) === true
  ✅ rangeStringToComparator('<=10')(15) === false
  ✅ rangeStringToComparator('>=10')(8) === false
  ✅ rangeStringToComparator('=10')(10) === true
  ✅ rangeStringToComparator('=10')(15) === false
  ✅ rangeStringToComparator('10')(10) === true
rangeStringToComparatorWithOverloads
  ✅ rangeStringToComparatorWithOverloads('<worthy')(8) === true
  ✅ rangeStringToComparatorWithOverloads('<worthy')(10) === false
  ✅ rangeStringToComparatorWithOverloads('>10')(10) === false
  ✅ rangeStringToComparatorWithOverloads('>10')(15) === true
  ✅ rangeStringToComparatorWithOverloads('<=worthy')(10) === true
  ✅ rangeStringToComparatorWithOverloads('>=worthy')(10) === true
  ✅ rangeStringToComparatorWithOverloads('=worthy')(10) === true
  ✅ rangeStringToComparatorWithOverloads('=worthy')(15) === false
  ✅ rangeStringToComparatorWithOverloads('arrivals')(11) === true
  ✅ rangeStringToComparatorWithOverloads('arrivals')(10) === false

✅ src/app/settings/vault-grouping.test.ts

vaultWeaponGroupingSettingSelector
  ✅ returns the currently selected weapon grouping setting
vaultWeaponGroupingSelector
  ✅ returns the items ungrouped when no grouping is selected
  ✅ groups items by the currently selected weapon grouping

✅ src/app/utils/collections.test.ts

count
  ✅ counts elements that match the predicate
objectifyArray
  ✅ keys objects by a property name that maps to an array
wrap
  ✅ negative index
  ✅ too large index
  ✅ too large index by a lot
  ✅ negative index by a lot
uniqBy
  ✅ identity
  ✅ object values
  ✅ complex func
reorder
  ✅ reorders

✅ src/app/utils/csv.test.ts

✅ csv basic
✅ csv undef keys in first object
✅ csv no unpack
✅ csv unpack

✅ src/app/utils/intl.test.ts

✅ should include a sorting test case for every supported DIM language
✅ localizedSorter: en
✅ localizedSorter: de
✅ localizedSorter: ko
✅ localizedSorter: ja
✅ localizedSorter: es
✅ localizedSorter: es-mx
✅ localizedSorter: fr
✅ localizedSorter: it
✅ localizedSorter: pl
✅ localizedSorter: pt-br
✅ localizedSorter: ru
✅ localizedSorter: zh-chs
✅ localizedSorter: zh-cht
✅ should include an include test case for every supported DIM language
✅ localizedIncludes("en", "bar")("foobar") === true
✅ localizedIncludes("en", "😀")("Laughing 😀!!") === true
✅ localizedIncludes("en", "�")("Laughing 😀!!") === true
✅ localizedIncludes("en", "👨‍👩‍👧")("👨‍👩‍👧‍👦") === true
✅ localizedIncludes("en", "föo")("foobar") === true
✅ localizedIncludes("en", "Föo")("foobar") === true
✅ localizedIncludes("de", "föo")("foobar") === false
✅ localizedIncludes("ko", "가")("하가") === true
✅ localizedIncludes("ja", "かさ")("あかさ赤け") === true
✅ localizedIncludes("es", "ño")("niño") === true
✅ localizedIncludes("es-mx", "ño")("niño") === true
✅ localizedIncludes("fr", "bar")("foobar") === true
✅ localizedIncludes("it", "bar")("foobar") === true
✅ localizedIncludes("pl", "bar")("foobar") === true
✅ localizedIncludes("pt-br", "bar")("foobar") === true
✅ localizedIncludes("ru", "bar")("foobar") === true
✅ localizedIncludes("zh-chs", "bar")("foobar") === true
✅ localizedIncludes("zh-cht", "bar")("foobar") === true

✅ src/app/utils/memoize.test.ts

weakMemoize
  ✅ caches results of computation

✅ src/app/utils/promises.test.ts

dedupePromise
  ✅ caches inflight promises

✅ src/app/utils/time.test.ts

✅ timerDurationFromMs(1000) === "0:00:01"
✅ timerDurationFromMs(0) === "0:00:00"
✅ timerDurationFromMs(279241234) === "3:05:34:01"
✅ timerDurationFromMs(20041234) === "5:34:01"
✅ timerDurationFromMs(1000) === "0:01"
✅ timerDurationFromMs(0) === "0:00"
✅ timerDurationFromMs(279241234) === "3:05:34:01.234"
✅ timerDurationFromMs(20041234) === "5:34:01.234"
english localization
  ✅ i15dDurationFromMs(1000) === "0:00"
  ✅ i15dDurationFromMs(0) === "0:00"
  ✅ i15dDurationFromMs(86400000) === "1 Day 0:00"
  ✅ i15dDurationFromMs(279241234) === "3 Days 5:34"
  ✅ i15dDurationFromMs(20041234) === "5:34"
  ✅ i15dDurationFromMs(1000) === "0:00"
  ✅ i15dDurationFromMs(0) === "0:00"
  ✅ i15dDurationFromMs(86400000) === "1d 0:00"
  ✅ i15dDurationFromMs(279241234) === "3d 5:34"
  ✅ i15dDurationFromMs(20041234) === "5:34"
  ✅ i15dDurationFromMs(1000) === "0:00:01"
  ✅ i15dDurationFromMs(0) === "0:00:00"
  ✅ i15dDurationFromMs(279241234) === "3 Days 5:34:01"
  ✅ i15dDurationFromMs(20041234) === "5:34:01"
japanese localization
  ✅ i15dDurationFromMs(1000) === "0:00"
  ✅ i15dDurationFromMs(0) === "0:00"
  ✅ i15dDurationFromMs(86400000) === "1日 0:00"
  ✅ i15dDurationFromMs(279241234) === "3日間 5:34"
  ✅ i15dDurationFromMs(20041234) === "5:34"
  ✅ i15dDurationFromMs(1000) === "0:00"
  ✅ i15dDurationFromMs(0) === "0:00"
  ✅ i15dDurationFromMs(86400000) === "1日 0:00"
  ✅ i15dDurationFromMs(279241234) === "3日間 5:34"
  ✅ i15dDurationFromMs(20041234) === "5:34"
  ✅ i15dDurationFromMs(1000) === "0:00:01"
  ✅ i15dDurationFromMs(0) === "0:00:00"
  ✅ i15dDurationFromMs(279241234) === "3日間 5:34:01"
  ✅ i15dDurationFromMs(20041234) === "5:34:01"

✅ src/app/utils/undo-redo-history.test.ts

✅ allows you to undo and redo loadout edits

✅ src/app/vendors/d2-vendors.test.ts

process vendors
  ✅ can process vendors without errors

✅ src/app/wishlists/wishlist-file.test.ts

✅ parse wishlist line: dimwishlist:item=-69420&perks=2682205016,2402480669#notes:Enh Over, Enh FocuFury

✅ src/browsercheck.test.ts

✅ Firefox 72: User agent Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0, supported: true
✅ Chrome 79: User agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36, supported: true
✅ iOS 12: User agent Mozilla/5.0 (iPod; CPU iPhone OS 12_0 like macOS) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/12.0 Mobile/14A5335d Safari/602.1.50, supported: true
✅ Edge 18: User agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362, supported: true
✅ Vivaldi: User agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36 Vivaldi/2.10, supported: true
✅ Opera: User agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36 OPR/65.0.3467.78, supported: true
✅ Old Chrome: User agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36, supported: false

✅ src/testing/precache-manifest.test.ts

✅ precache manifest

Annotations

Check failure on line 105 in src/app/inventory/d2-stores.test.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/inventory/d2-stores.test.ts ► process stores ► generates a correct weapon CSV export

Failed test found in:
  junit.xml
Error:
  Error: expect(received).toMatchSnapshot()
Raw output
Error: expect(received).toMatchSnapshot()

Snapshot name: `process stores generates a correct weapon CSV export 1`

- Snapshot  - 37
+ Received  + 37

@@ -2576,11 +2576,11 @@
      "Id": ""6917529340867495000"",
      "Impact": 22,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 36,
+     "Mag": 35,
      "Masterwork Tier": 3,
      "Masterwork Type": "Stability",
      "Name": "Extraordinary Rendition",
      "Notes": undefined,
      "Owner": "Vault",
@@ -3148,11 +3148,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Void",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 69,
      "Hash": 1946491241,
      "Id": ""6917529391923015086"",
@@ -4117,11 +4117,11 @@
      "Range": 33,
      "Recoil": 92,
      "Reload": 44,
      "Season": 15,
      "Shield Duration": 0,
-     "Source": "ironbanner",
+     "Source": "",
      "Stability": 95,
      "Swing Speed": 0,
      "Tag": undefined,
      "Tier": "Legendary",
      "Type": "Sidearm",
@@ -4316,11 +4316,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Kinetic",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "tex-mechanica",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 66,
      "Hash": 1679868061,
      "Id": ""6917529547585798743"",
@@ -4606,11 +4606,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Kinetic",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 77,
      "Hash": 602618796,
      "Id": ""6917529610420022236"",
@@ -5023,11 +5023,11 @@
      "Id": ""6917529669850359950"",
      "Impact": 80,
      "Kill Tracker": 381,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 5,
+     "Mag": 6,
      "Masterwork Tier": 10,
      "Masterwork Type": "Handling",
      "Name": "The Enigma",
      "Notes": undefined,
      "Owner": "Vault",
@@ -5869,11 +5869,11 @@
      "Range": 33,
      "Recoil": 100,
      "Reload": 29,
      "Season": 16,
      "Shield Duration": 0,
-     "Source": "ironbanner",
+     "Source": "",
      "Stability": 80,
      "Swing Speed": 0,
      "Tag": undefined,
      "Tier": "Legendary",
      "Type": "Sidearm",
@@ -6425,11 +6425,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Kinetic",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "tex-mechanica",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 66,
      "Hash": 1679868061,
      "Id": ""6917529786068896442"",
@@ -6552,11 +6552,11 @@
      "Id": ""6917529786991292741"",
      "Impact": 80,
      "Kill Tracker": 502,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 7,
+     "Mag": 8,
      "Masterwork Tier": 1,
      "Masterwork Type": "Handling",
      "Name": "Nezarec's Whisper",
      "Notes": undefined,
      "Owner": "Vault",
@@ -6864,11 +6864,11 @@
      "Range": 53,
      "Recoil": 100,
      "Reload": 32,
      "Season": 16,
      "Shield Duration": 0,
-     "Source": "ironbanner",
+     "Source": "",
      "Stability": 79,
      "Swing Speed": 0,
      "Tag": undefined,
      "Tier": "Legendary",
      "Type": "Sidearm",
@@ -7120,11 +7120,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Arc",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 47,
      "Hash": 3738678140,
      "Id": ""6917529811851364588"",
@@ -8475,11 +8475,11 @@
      "Id": ""6917529850970210336"",
      "Impact": 95,
      "Kill Tracker": 568,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 4,
+     "Mag": 5,
      "Masterwork Tier": 1,
      "Masterwork Type": "Shield Duration",
      "Name": "Judgment of Kelgorath",
      "Notes": undefined,
      "Owner": "Vault",
@@ -8590,11 +8590,11 @@
      "Id": ""6917529850994736130"",
      "Impact": 15,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 45,
+     "Mag": 44,
      "Masterwork Tier": undefined,
      "Masterwork Type": undefined,
      "Name": "The Manticore",
      "Notes": undefined,
      "Owner": "Vault",
@@ -9405,11 +9405,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Kinetic",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 63,
      "Hash": 1532276803,
      "Id": ""6917529861850959518"",
@@ -9653,11 +9653,11 @@
      "Id": ""6917529868122113316"",
      "Impact": 20,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 39,
+     "Mag": 38,
      "Masterwork Tier": 2,
      "Masterwork Type": "Stability",
      "Name": "Pizzicato-22",
      "Notes": undefined,
      "Owner": "Vault",
@@ -10119,11 +10119,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Kinetic",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 76,
      "Hash": 2099894368,
      "Id": ""6917529870298123302"",
@@ -10414,11 +10414,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Void",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 81,
      "Hash": 1606497639,
      "Id": ""6917529883630545315"",
@@ -10771,11 +10771,11 @@
      "Id": ""6917529897686604573"",
      "Impact": 80,
      "Kill Tracker": 335,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 6,
+     "Mag": 7,
      "Masterwork Tier": 10,
      "Masterwork Type": undefined,
      "Name": "Vexcalibur",
      "Notes": undefined,
      "Owner": "Vault",
@@ -12175,11 +12175,11 @@
      "Id": ""6917529920189669828"",
      "Impact": 29,
      "Kill Tracker": 19,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 37,
+     "Mag": 45,
      "Masterwork Tier": undefined,
      "Masterwork Type": undefined,
      "Name": "Centrifuse",
      "Notes": undefined,
      "Owner": "Vault",
@@ -12809,11 +12809,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Kinetic",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 33,
      "Hash": 1107446438,
      "Id": ""6917529923875728627"",
@@ -13583,11 +13583,11 @@
      "Id": ""6917529928410544754"",
      "Impact": 20,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": false,
-     "Mag": 39,
+     "Mag": 38,
      "Masterwork Tier": 2,
      "Masterwork Type": "Stability",
      "Name": "Pizzicato-22",
      "Notes": undefined,
      "Owner": "Vault",
@@ -14160,11 +14160,11 @@
      "Id": ""6917529933753873229"",
      "Impact": 6,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 74,
+     "Mag": 194,
      "Masterwork Tier": undefined,
      "Masterwork Type": undefined,
      "Name": "Divinity",
      "Notes": undefined,
      "Owner": "Vault",
@@ -15421,11 +15421,11 @@
      "Id": ""6917529954752810314"",
      "Impact": 55,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": false,
-     "Mag": 6,
+     "Mag": 7,
      "Masterwork Tier": 10,
      "Masterwork Type": undefined,
      "Name": "Edge of Concurrence",
      "Notes": undefined,
      "Owner": "Hunter(1923)",
@@ -16051,11 +16051,11 @@
      "Category": "Energy",
      "Charge Rate": 0,
      "Charge Time": 0,
      "Crafted": false,
      "Crafted Level": 0,
-     "Draw Time": 540,
+     "Draw Time": 500,
      "Element": "Void",
      "Equipped": false,
      "Event": "",
      "Foundry": undefined,
      "Guard Endurance": 0,
@@ -16866,11 +16866,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Kinetic",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "tex-mechanica",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 51,
      "Hash": 1679868061,
      "Id": ""6917529966446564281"",
@@ -17825,11 +17825,11 @@
      "Id": ""6917529993587809115"",
      "Impact": 95,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 3,
+     "Mag": 4,
      "Masterwork Tier": undefined,
      "Masterwork Type": undefined,
      "Name": "Winterbite",
      "Notes": undefined,
      "Owner": "Vault",
@@ -18176,11 +18176,11 @@
      "Id": ""6917530009485550990"",
      "Impact": 15,
      "Kill Tracker": 4,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 41,
+     "Mag": 42,
      "Masterwork Tier": 2,
      "Masterwork Type": "Range",
      "Name": "Subjunctive",
      "Notes": undefined,
      "Owner": "Vault",
@@ -19209,11 +19209,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Solar",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 59,
      "Hash": 4255586669,
      "Id": ""6917530018807536207"",
@@ -19390,11 +19390,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Solar",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "suros",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 63,
      "Hash": 6857689,
      "Id": ""6917530018814180221"",
@@ -19625,11 +19625,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Arc",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 40,
      "Guard Resistance": 40,
      "Handling": 0,
      "Hash": 1456017061,
      "Id": ""6917530018839855872"",
@@ -19862,11 +19862,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Arc",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 0,
      "Handling": 27,
      "Hash": 664109750,
      "Id": ""6917530018867215030"",
@@ -19931,11 +19931,11 @@
      "Id": ""6917530018892744862"",
      "Impact": 55,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": false,
-     "Mag": 5,
+     "Mag": 6,
      "Masterwork Tier": 4,
      "Masterwork Type": "Reload Speed",
      "Name": "Greasy Luck",
      "Notes": undefined,
      "Owner": "Vault",
@@ -20570,11 +20570,11 @@
      "Crafted Level": 0,
      "Draw Time": 0,
      "Element": "Arc",
      "Equipped": false,
      "Event": "",
-     "Foundry": undefined,
+     "Foundry": "field-forged",
      "Guard Endurance": 0,
      "Guard Resistance": 80,
      "Handling": 0,
      "Hash": 1456017061,
      "Id": ""6917530018923704316"",
@@ -20820,11 +20820,11 @@
      "Id": ""6917530018927521512"",
      "Impact": 15,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": false,
-     "Mag": 45,
+     "Mag": 44,
      "Masterwork Tier": 1,
      "Masterwork Type": "Range",
      "Name": "The Recluse",
      "Notes": undefined,
      "Owner": "Vault",
@@ -21132,11 +21132,11 @@
        "Kill Tracker",
        "Tier 1: Blast Radius*",
      ],
      "Power": 1923,
      "ROF": 100,
-     "Range": 30,
+     "Range": 0,
      "Recoil": 75,
      "Reload": 45,
      "Season": 24,
      "Shield Duration": 0,
      "Source": "paleheart",
@@ -21281,11 +21281,11 @@
      "Id": ""6917530020123421232"",
      "Impact": 20,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": true,
-     "Mag": 41,
+     "Mag": 42,
      "Masterwork Tier": 3,
      "Masterwork Type": "Stability",
      "Name": "Parabellum",
      "Notes": undefined,
      "Owner": "Vault",
@@ -21681,11 +21681,11 @@
      "Id": ""6917530020640269170"",
      "Impact": 20,
      "Kill Tracker": 0,
      "Loadouts": "",
      "Locked": false,
-     "Mag": 39,
+     "Mag": 38,
      "Masterwork Tier": 1,
      "Masterwork Type": "Reload Speed",
      "Name": "Pizzicato-22",
      "Notes": undefined,
      "Owner": "Hunter(1923)",
    at toMatchSnapshot (/home/runner/work/DIM/DIM/src/app/inventory/d2-stores.test.ts:105:23)
    at Object.<anonymous> (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-each/build/bind.js:81:13)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircusTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:316:40)
    at _runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:252:3)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:126:9)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:121:9)
    at run (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:71:3)
    at runAndTransformResultsToJestFormat (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:444:34)
    at Object.worker (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/testWorker.js:106:12)

Check failure on line 105 in src/app/inventory/d2-stores.test.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/inventory/d2-stores.test.ts ► process stores ► generates a correct armor CSV export

Failed test found in:
  junit.xml
Error:
  Error: expect(received).toMatchSnapshot()
Raw output
Error: expect(received).toMatchSnapshot()

Snapshot name: `process stores generates a correct armor CSV export 1`

- Snapshot  - 212
+ Received  + 212

@@ -1,11 +1,11 @@
  [
    {
      "Discipline": 32,
      "Discipline (Base)": 30,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1444894250,
      "Id": ""6917529177247119179"",
      "Intellect": 4,
@@ -31,11 +31,11 @@
      "Resilience (Base)": 7,
      "Season": 11,
      "Seasonal Mod": [
        "lastwish",
      ],
-     "Source": "lastwish",
+     "Source": "",
      "Strength": 4,
      "Strength (Base)": 2,
      "Tag": undefined,
      "Tier": "Legendary",
      "Total": 82,
@@ -45,11 +45,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 6,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2443609020,
      "Id": ""6917529193253791078"",
      "Intellect": 12,
@@ -81,11 +81,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3046434751,
      "Id": ""6917529193263424628"",
      "Intellect": 12,
@@ -117,11 +117,11 @@
    },
    {
      "Discipline": 17,
      "Discipline (Base)": 17,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1734144409,
      "Id": ""6917529194095508332"",
      "Intellect": 11,
@@ -155,11 +155,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 235591051,
      "Id": ""6917529194290568490"",
      "Intellect": 14,
@@ -193,11 +193,11 @@
    },
    {
      "Discipline": 6,
      "Discipline (Base)": 6,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1160559849,
      "Id": ""6917529194309796730"",
      "Intellect": 6,
@@ -232,11 +232,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2240152949,
      "Id": ""6917529194460339897"",
      "Intellect": 24,
@@ -270,11 +270,11 @@
    },
    {
      "Discipline": 4,
      "Discipline (Base)": 2,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3671337107,
      "Id": ""6917529196739096092"",
      "Intellect": 24,
@@ -308,11 +308,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 6,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3750210364,
      "Id": ""6917529196852762424"",
      "Intellect": 12,
@@ -344,11 +344,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 12,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1321354573,
      "Id": ""6917529198421306306"",
      "Intellect": 9,
@@ -388,11 +388,11 @@
    },
    {
      "Discipline": 18,
      "Discipline (Base)": 18,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3084282676,
      "Id": ""6917529205988691165"",
      "Intellect": 9,
@@ -426,11 +426,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 4057299719,
      "Id": ""6917529211183048269"",
      "Intellect": 14,
@@ -465,11 +465,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1321354572,
      "Id": ""6917529211323676310"",
      "Intellect": 16,
@@ -503,11 +503,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 8,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1458739906,
      "Id": ""6917529212209954620"",
      "Intellect": 21,
@@ -546,11 +546,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1190497097,
      "Id": ""6917529212676304074"",
      "Intellect": 2,
@@ -584,11 +584,11 @@
    },
    {
      "Discipline": 21,
      "Discipline (Base)": 21,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2509940440,
      "Id": ""6917529217619762584"",
      "Intellect": 10,
@@ -622,11 +622,11 @@
    },
    {
      "Discipline": 17,
      "Discipline (Base)": 15,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 691578978,
      "Id": ""6917529217629873690"",
      "Intellect": 15,
@@ -660,11 +660,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 20,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3977387640,
      "Id": ""6917529221592709126"",
      "Intellect": 8,
@@ -702,11 +702,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 3948284065,
      "Id": ""6917529238086798976"",
      "Intellect": 15,
@@ -740,11 +740,11 @@
    },
    {
      "Discipline": 6,
      "Discipline (Base)": 6,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2578771006,
      "Id": ""6917529238086799985"",
      "Intellect": 12,
@@ -778,11 +778,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 0,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 1021060724,
      "Id": ""6917529248316159693"",
      "Intellect": 2,
@@ -823,11 +823,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3351935136,
      "Id": ""6917529257088142693"",
      "Intellect": 20,
@@ -859,11 +859,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3180809346,
      "Id": ""6917529257088142832"",
      "Intellect": 16,
@@ -895,11 +895,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2545401128,
      "Id": ""6917529257098138677"",
      "Intellect": 14,
@@ -931,11 +931,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 3887272785,
      "Id": ""6917529257098141390"",
      "Intellect": 12,
@@ -967,11 +967,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1264765761,
      "Id": ""6917529257763011737"",
      "Intellect": 12,
@@ -1005,11 +1005,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 6,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2180477077,
      "Id": ""6917529259302516394"",
      "Intellect": 16,
@@ -1043,11 +1043,11 @@
    },
    {
      "Discipline": 6,
      "Discipline (Base)": 6,
      "Energy Capacity": 2,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3874247549,
      "Id": ""6917529259487786849"",
      "Intellect": 19,
@@ -1081,11 +1081,11 @@
    },
    {
      "Discipline": 8,
      "Discipline (Base)": 8,
      "Energy Capacity": 2,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1887490701,
      "Id": ""6917529271951173867"",
      "Intellect": 2,
@@ -1119,11 +1119,11 @@
    },
    {
      "Discipline": 19,
      "Discipline (Base)": 19,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3136019014,
      "Id": ""6917529293108655018"",
      "Intellect": 10,
@@ -1155,11 +1155,11 @@
    },
    {
      "Discipline": 4,
      "Discipline (Base)": 2,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 48951631,
      "Id": ""6917529340883986339"",
      "Intellect": 24,
@@ -1194,11 +1194,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 6,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 2804094976,
      "Id": ""6917529350285165739"",
      "Intellect": 9,
@@ -1230,11 +1230,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 6,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2166974634,
      "Id": ""6917529350290716306"",
      "Intellect": 12,
@@ -1266,11 +1266,11 @@
    },
    {
      "Discipline": 6,
      "Discipline (Base)": 6,
      "Energy Capacity": 6,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3245065734,
      "Id": ""6917529350295800036"",
      "Intellect": 19,
@@ -1302,11 +1302,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 412014143,
      "Id": ""6917529350295800648"",
      "Intellect": 9,
@@ -1338,11 +1338,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1947723211,
      "Id": ""6917529350300120230"",
      "Intellect": 12,
@@ -1376,11 +1376,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 21,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 215674186,
      "Id": ""6917529356969050330"",
      "Intellect": 11,
@@ -1418,11 +1418,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 10,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2913217908,
      "Id": ""6917529356981500980"",
      "Intellect": 13,
@@ -1457,11 +1457,11 @@
    },
    {
      "Discipline": 26,
      "Discipline (Base)": 24,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 129332559,
      "Id": ""6917529363584635170"",
      "Intellect": 9,
@@ -1500,11 +1500,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1163283805,
      "Id": ""6917529369212845768"",
      "Intellect": 7,
@@ -1538,11 +1538,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2773056939,
      "Id": ""6917529371065651122"",
      "Intellect": 15,
@@ -1576,11 +1576,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 12,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3562696927,
      "Id": ""6917529391094192245"",
      "Intellect": 8,
@@ -1614,11 +1614,11 @@
    },
    {
      "Discipline": 20,
      "Discipline (Base)": 20,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 475652357,
      "Id": ""6917529399442271515"",
      "Intellect": 10,
@@ -1652,11 +1652,11 @@
    },
    {
      "Discipline": 32,
      "Discipline (Base)": 30,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3479737253,
      "Id": ""6917529402411449980"",
      "Intellect": 4,
@@ -1694,11 +1694,11 @@
    },
    {
      "Discipline": 18,
      "Discipline (Base)": 18,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2268523867,
      "Id": ""6917529424657352268"",
      "Intellect": 11,
@@ -1732,11 +1732,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 5,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3015085684,
      "Id": ""6917529431777484028"",
      "Intellect": 14,
@@ -1770,11 +1770,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 9,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 586128500,
      "Id": ""6917529450154939824"",
      "Intellect": 4,
@@ -1815,11 +1815,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2766109872,
      "Id": ""6917529501085668452"",
      "Intellect": 17,
@@ -1853,11 +1853,11 @@
    },
    {
      "Discipline": 32,
      "Discipline (Base)": 30,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 988607392,
      "Id": ""6917529520949384299"",
      "Intellect": 4,
@@ -1896,11 +1896,11 @@
    },
    {
      "Discipline": 21,
      "Discipline (Base)": 21,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 903984858,
      "Id": ""6917529527778301874"",
      "Intellect": 8,
@@ -1934,11 +1934,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1474735277,
      "Id": ""6917529534610903797"",
      "Intellect": 12,
@@ -1972,11 +1972,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 4001862073,
      "Id": ""6917529575758314620"",
      "Intellect": 12,
@@ -2010,11 +2010,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 8,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2766109874,
      "Id": ""6917529683344521948"",
      "Intellect": 16,
@@ -2052,11 +2052,11 @@
    },
    {
      "Discipline": 17,
      "Discipline (Base)": 15,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2516879931,
      "Id": ""6917529746551236327"",
      "Intellect": 17,
@@ -2095,11 +2095,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 22,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1615052875,
      "Id": ""6917529747682713483"",
      "Intellect": 7,
@@ -2133,11 +2133,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 803939997,
      "Id": ""6917529747748503629"",
      "Intellect": 0,
@@ -2155,11 +2155,11 @@
      "Recovery (Base)": 29,
      "Resilience": 12,
      "Resilience (Base)": 12,
      "Season": 4,
      "Seasonal Mod": "",
-     "Source": "campaign",
+     "Source": "",
      "Strength": 0,
      "Strength (Base)": 0,
      "Tag": undefined,
      "Tier": "Rare",
      "Total": 51,
@@ -2169,11 +2169,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 187431790,
      "Id": ""6917529748781353698"",
      "Intellect": 10,
@@ -2205,11 +2205,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 849255710,
      "Id": ""6917529748781353959"",
      "Intellect": 21,
@@ -2244,11 +2244,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 20,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2203146422,
      "Id": ""6917529748845845050"",
      "Intellect": 8,
@@ -2284,11 +2284,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1566699968,
      "Id": ""6917529748885715674"",
      "Intellect": 6,
@@ -2322,11 +2322,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 803939997,
      "Id": ""6917529748959843620"",
      "Intellect": 0,
@@ -2344,11 +2344,11 @@
      "Recovery (Base)": 22,
      "Resilience": 8,
      "Resilience (Base)": 8,
      "Season": 4,
      "Seasonal Mod": "",
-     "Source": "campaign",
+     "Source": "",
      "Strength": 0,
      "Strength (Base)": 0,
      "Tag": undefined,
      "Tier": "Rare",
      "Total": 48,
@@ -2358,11 +2358,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 22,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3651424085,
      "Id": ""6917529749719173607"",
      "Intellect": 2,
@@ -2396,11 +2396,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2773056939,
      "Id": ""6917529776970746801"",
      "Intellect": 7,
@@ -2434,11 +2434,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 12,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3380315063,
      "Id": ""6917529776994950637"",
      "Intellect": 22,
@@ -2479,11 +2479,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 210208587,
      "Id": ""6917529777047124599"",
      "Intellect": 14,
@@ -2517,11 +2517,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 21,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1649346047,
      "Id": ""6917529786008753033"",
      "Intellect": 12,
@@ -2555,11 +2555,11 @@
    },
    {
      "Discipline": 17,
      "Discipline (Base)": 15,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 193869523,
      "Id": ""6917529788363061838"",
      "Intellect": 14,
@@ -2596,11 +2596,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 22,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2489136103,
      "Id": ""6917529789867917589"",
      "Intellect": 9,
@@ -2634,11 +2634,11 @@
    },
    {
      "Discipline": 25,
      "Discipline (Base)": 23,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1285042454,
      "Id": ""6917529792300964891"",
      "Intellect": 4,
@@ -2672,11 +2672,11 @@
    },
    {
      "Discipline": 4,
      "Discipline (Base)": 2,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1241941801,
      "Id": ""6917529792311704013"",
      "Intellect": 9,
@@ -2710,11 +2710,11 @@
    },
    {
      "Discipline": 21,
      "Discipline (Base)": 21,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1703551922,
      "Id": ""6917529805341928802"",
      "Intellect": 10,
@@ -2748,11 +2748,11 @@
    },
    {
      "Discipline": 17,
      "Discipline (Base)": 17,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 609852545,
      "Id": ""6917529842744285130"",
      "Intellect": 9,
@@ -2786,11 +2786,11 @@
    },
    {
      "Discipline": 24,
      "Discipline (Base)": 22,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 1053737370,
      "Id": ""6917529842752289413"",
      "Intellect": 12,
@@ -2830,11 +2830,11 @@
    },
    {
      "Discipline": 29,
      "Discipline (Base)": 17,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 1095145125,
      "Id": ""6917529843194816779"",
      "Intellect": 4,
@@ -2871,11 +2871,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 803939997,
      "Id": ""6917529847378163799"",
      "Intellect": 0,
@@ -2893,11 +2893,11 @@
      "Recovery (Base)": 8,
      "Resilience": 34,
      "Resilience (Base)": 34,
      "Season": 4,
      "Seasonal Mod": "",
-     "Source": "campaign",
+     "Source": "",
      "Strength": 0,
      "Strength (Base)": 0,
      "Tag": undefined,
      "Tier": "Rare",
      "Total": 50,
@@ -2907,11 +2907,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1619425569,
      "Id": ""6917529847415827116"",
      "Intellect": 14,
@@ -2945,11 +2945,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 193869520,
      "Id": ""6917529853768061464"",
      "Intellect": 12,
@@ -2983,11 +2983,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2773056939,
      "Id": ""6917529853774587295"",
      "Intellect": 15,
@@ -3021,11 +3021,11 @@
    },
    {
      "Discipline": 24,
      "Discipline (Base)": 22,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 4116381015,
      "Id": ""6917529858669298225"",
      "Intellect": 8,
@@ -3059,11 +3059,11 @@
    },
    {
      "Discipline": 21,
      "Discipline (Base)": 19,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 648266032,
      "Id": ""6917529861829179845"",
      "Intellect": 10,
@@ -3100,11 +3100,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1059446290,
      "Id": ""6917529865854205664"",
      "Intellect": 10,
@@ -3139,11 +3139,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2710316218,
      "Id": ""6917529865884358862"",
      "Intellect": 10,
@@ -3177,11 +3177,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 4270910189,
      "Id": ""6917529865884360943"",
      "Intellect": 10,
@@ -3215,11 +3215,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2471829328,
      "Id": ""6917529865894105496"",
      "Intellect": 10,
@@ -3254,11 +3254,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 6,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 327547301,
      "Id": ""6917529866397668943"",
      "Intellect": 12,
@@ -3290,11 +3290,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 22,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2030782835,
      "Id": ""6917529866397671650"",
      "Intellect": 10,
@@ -3326,11 +3326,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 23,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1640403802,
      "Id": ""6917529866409984495"",
      "Intellect": 8,
@@ -3362,11 +3362,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 2945464224,
      "Id": ""6917529866420984221"",
      "Intellect": 12,
@@ -3398,11 +3398,11 @@
    },
    {
      "Discipline": 20,
      "Discipline (Base)": 20,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3833868247,
      "Id": ""6917529866420985117"",
      "Intellect": 12,
@@ -3434,11 +3434,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 738153648,
      "Id": ""6917529866420989387"",
      "Intellect": 11,
@@ -3470,11 +3470,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 11,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 130618344,
      "Id": ""6917529866420989434"",
      "Intellect": 12,
@@ -3506,11 +3506,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 287888126,
      "Id": ""6917529866429103379"",
      "Intellect": 12,
@@ -3542,11 +3542,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 6,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1131831128,
      "Id": ""6917529866429106816"",
      "Intellect": 9,
@@ -3578,11 +3578,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1474735276,
      "Id": ""6917529867279308417"",
      "Intellect": 11,
@@ -3616,11 +3616,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 7,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 328467570,
      "Id": ""6917529867286952481"",
      "Intellect": 16,
@@ -3654,11 +3654,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2813078109,
      "Id": ""6917529867286958952"",
      "Intellect": 7,
@@ -3692,11 +3692,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2975563522,
      "Id": ""6917529867286959913"",
      "Intellect": 0,
@@ -3730,11 +3730,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 7,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1721938300,
      "Id": ""6917529867293410580"",
      "Intellect": 24,
@@ -3768,11 +3768,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 169689932,
      "Id": ""6917529867681970027"",
      "Intellect": 12,
@@ -3806,11 +3806,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2169905051,
      "Id": ""6917529868510820734"",
      "Intellect": 6,
@@ -3844,11 +3844,11 @@
    },
    {
      "Discipline": 8,
      "Discipline (Base)": 8,
      "Energy Capacity": 2,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 756445218,
      "Id": ""6917529879099834499"",
      "Intellect": 13,
@@ -3882,11 +3882,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 2,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1462908657,
      "Id": ""6917529879108995280"",
      "Intellect": 7,
@@ -3920,11 +3920,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 4,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 3975122240,
      "Id": ""6917529879109000062"",
      "Intellect": 6,
@@ -3958,11 +3958,11 @@
    },
    {
      "Discipline": 26,
      "Discipline (Base)": 26,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3608027009,
      "Id": ""6917529890672482544"",
      "Intellect": 2,
@@ -3996,11 +3996,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 11,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2390471904,
      "Id": ""6917529892161400589"",
      "Intellect": 10,
@@ -4034,11 +4034,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2343515647,
      "Id": ""6917529895497274824"",
      "Intellect": 13,
@@ -4072,11 +4072,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 893751566,
      "Id": ""6917529895511875548"",
      "Intellect": 14,
@@ -4110,11 +4110,11 @@
    },
    {
      "Discipline": 20,
      "Discipline (Base)": 20,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1219761634,
      "Id": ""6917529895516437129"",
      "Intellect": 2,
@@ -4148,11 +4148,11 @@
    },
    {
      "Discipline": 30,
      "Discipline (Base)": 28,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 3995603239,
      "Id": ""6917529897731172007"",
      "Intellect": 4,
@@ -4190,11 +4190,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 21,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2766109874,
      "Id": ""6917529898517426551"",
      "Intellect": 10,
@@ -4232,11 +4232,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1264765761,
      "Id": ""6917529899245353287"",
      "Intellect": 9,
@@ -4270,11 +4270,11 @@
    },
    {
      "Discipline": 20,
      "Discipline (Base)": 20,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 807905267,
      "Id": ""6917529906811146151"",
      "Intellect": 2,
@@ -4308,11 +4308,11 @@
    },
    {
      "Discipline": 8,
      "Discipline (Base)": 8,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3889633083,
      "Id": ""6917529906811149835"",
      "Intellect": 15,
@@ -4346,11 +4346,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2437510452,
      "Id": ""6917529908830405424"",
      "Intellect": 7,
@@ -4384,11 +4384,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3810243376,
      "Id": ""6917529910393119454"",
      "Intellect": 6,
@@ -4422,11 +4422,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3608027009,
      "Id": ""6917529910420236276"",
      "Intellect": 10,
@@ -4460,11 +4460,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 621315878,
      "Id": ""6917529910438741889"",
      "Intellect": 0,
@@ -4498,11 +4498,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2868448385,
      "Id": ""6917529920101928521"",
      "Intellect": 0,
@@ -4536,11 +4536,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 751162931,
      "Id": ""6917529920176005262"",
      "Intellect": 16,
@@ -4574,11 +4574,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3423279826,
      "Id": ""6917529920253221923"",
      "Intellect": 15,
@@ -4612,11 +4612,11 @@
    },
    {
      "Discipline": 24,
      "Discipline (Base)": 24,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3889633083,
      "Id": ""6917529920269540598"",
      "Intellect": 2,
@@ -4650,11 +4650,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 193869522,
      "Id": ""6917529920431787002"",
      "Intellect": 15,
@@ -4688,11 +4688,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1001356380,
      "Id": ""6917529920440858714"",
      "Intellect": 14,
@@ -4726,11 +4726,11 @@
    },
    {
      "Discipline": 26,
      "Discipline (Base)": 26,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 896224899,
      "Id": ""6917529920456261793"",
      "Intellect": 2,
@@ -4764,11 +4764,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3352415987,
      "Id": ""6917529920466909261"",
      "Intellect": 17,
@@ -4802,11 +4802,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 13,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2007908580,
      "Id": ""6917529920483328868"",
      "Intellect": 12,
@@ -4841,11 +4841,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 4124357755,
      "Id": ""6917529920506932814"",
      "Intellect": 0,
@@ -4879,11 +4879,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2757274117,
      "Id": ""6917529920511542670"",
      "Intellect": 17,
@@ -4917,11 +4917,11 @@
    },
    {
      "Discipline": 8,
      "Discipline (Base)": 8,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3487540074,
      "Id": ""6917529920511551854"",
      "Intellect": 6,
@@ -4955,11 +4955,11 @@
    },
    {
      "Discipline": 30,
      "Discipline (Base)": 30,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "Solstice",
      "Hash": 476513004,
      "Id": ""6917529920950746976"",
      "Intellect": 2,
@@ -4991,11 +4991,11 @@
    },
    {
      "Discipline": 19,
      "Discipline (Base)": 19,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1935198785,
      "Id": ""6917529923581822005"",
      "Intellect": 2,
@@ -5029,11 +5029,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1702288800,
      "Id": ""6917529923896533912"",
      "Intellect": 15,
@@ -5067,11 +5067,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 23,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3453042252,
      "Id": ""6917529924519221493"",
      "Intellect": 2,
@@ -5105,11 +5105,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3434445392,
      "Id": ""6917529925596667875"",
      "Intellect": 15,
@@ -5143,11 +5143,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 192896783,
      "Id": ""6917529925605822250"",
      "Intellect": 10,
@@ -5182,11 +5182,11 @@
    },
    {
      "Discipline": 20,
      "Discipline (Base)": 20,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1688602431,
      "Id": ""6917529928216817282"",
      "Intellect": 11,
@@ -5220,11 +5220,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3942036043,
      "Id": ""6917529928224293677"",
      "Intellect": 15,
@@ -5258,11 +5258,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 978537162,
      "Id": ""6917529928256694472"",
      "Intellect": 2,
@@ -5296,11 +5296,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2787963735,
      "Id": ""6917529932883394154"",
      "Intellect": 9,
@@ -5334,11 +5334,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2787963735,
      "Id": ""6917529932892230949"",
      "Intellect": 6,
@@ -5372,11 +5372,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2386078741,
      "Id": ""6917529933746196429"",
      "Intellect": 0,
@@ -5410,11 +5410,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 3607600504,
      "Id": ""6917529933746199568"",
      "Intellect": 16,
@@ -5448,11 +5448,11 @@
    },
    {
      "Discipline": 19,
      "Discipline (Base)": 19,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 748663978,
      "Id": ""6917529933753872569"",
      "Intellect": 8,
@@ -5486,11 +5486,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 431605328,
      "Id": ""6917529933753880108"",
      "Intellect": 12,
@@ -5524,11 +5524,11 @@
    },
    {
      "Discipline": 6,
      "Discipline (Base)": 6,
      "Energy Capacity": 4,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2797536515,
      "Id": ""6917529933761627192"",
      "Intellect": 14,
@@ -5562,11 +5562,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 2,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1685051367,
      "Id": ""6917529933770257039"",
      "Intellect": 10,
@@ -5600,11 +5600,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1063769568,
      "Id": ""6917529933770257085"",
      "Intellect": 14,
@@ -5638,11 +5638,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 2,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 2400549110,
      "Id": ""6917529933770259631"",
      "Intellect": 0,
@@ -5676,11 +5676,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 11,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "",
      "Hash": 2966283697,
      "Id": ""6917529933770262243"",
      "Intellect": 10,
@@ -5714,11 +5714,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1734144409,
      "Id": ""6917529940127784979"",
      "Intellect": 12,
@@ -5752,11 +5752,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 7,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3714937821,
      "Id": ""6917529942744869328"",
      "Intellect": 9,
@@ -5795,11 +5795,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 23,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 4165919945,
      "Id": ""6917529950723165306"",
      "Intellect": 2,
@@ -5833,11 +5833,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1703551922,
      "Id": ""6917529950761756509"",
      "Intellect": 2,
@@ -5871,11 +5871,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 859929450,
      "Id": ""6917529953233530483"",
      "Intellect": 12,
@@ -5909,11 +5909,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 807905267,
      "Id": ""6917529953268330044"",
      "Intellect": 19,
@@ -5947,11 +5947,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3832002135,
      "Id": ""6917529953283294875"",
      "Intellect": 10,
@@ -5985,11 +5985,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1306415888,
      "Id": ""6917529954740815786"",
      "Intellect": 0,
@@ -6023,11 +6023,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1345569657,
      "Id": ""6917529955056529345"",
      "Intellect": 6,
@@ -6061,11 +6061,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2415768376,
      "Id": ""6917529955071195828"",
      "Intellect": 2,
@@ -6099,11 +6099,11 @@
    },
    {
      "Discipline": 26,
      "Discipline (Base)": 24,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2672840191,
      "Id": ""6917529955258648871"",
      "Intellect": 9,
@@ -6139,11 +6139,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 14,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1833326563,
      "Id": ""6917529955258650898"",
      "Intellect": 4,
@@ -6175,11 +6175,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3737404623,
      "Id": ""6917529955665212037"",
      "Intellect": 0,
@@ -6214,11 +6214,11 @@
    },
    {
      "Discipline": 8,
      "Discipline (Base)": 8,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2931145020,
      "Id": ""6917529955674662794"",
      "Intellect": 7,
@@ -6252,11 +6252,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 11,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 691578979,
      "Id": ""6917529955681980807"",
      "Intellect": 19,
@@ -6290,11 +6290,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 20,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 4067720865,
      "Id": ""6917529955681981595"",
      "Intellect": 8,
@@ -6328,11 +6328,11 @@
    },
    {
      "Discipline": 12,
      "Discipline (Base)": 12,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 461841403,
      "Id": ""6917529955698399474"",
      "Intellect": 14,
@@ -6366,11 +6366,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 844097260,
      "Id": ""6917529960090661259"",
      "Intellect": 0,
@@ -6404,11 +6404,11 @@
    },
    {
      "Discipline": 24,
      "Discipline (Base)": 24,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 121305948,
      "Id": ""6917529993269268392"",
      "Intellect": 2,
@@ -6442,11 +6442,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 11,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2339155434,
      "Id": ""6917529993271329839"",
      "Intellect": 14,
@@ -6464,11 +6464,11 @@
      "Recovery (Base)": 6,
      "Resilience": 13,
      "Resilience (Base)": 13,
      "Season": 11,
      "Seasonal Mod": "",
-     "Source": "legendaryengram",
+     "Source": "",
      "Strength": 2,
      "Strength (Base)": 2,
      "Tag": undefined,
      "Tier": "Legendary",
      "Total": 53,
@@ -6478,11 +6478,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2432846050,
      "Id": ""6917529993320757034"",
      "Intellect": 17,
@@ -6514,11 +6514,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": true,
      "Event": "Guardian Games",
      "Hash": 3720087872,
      "Id": ""6917529993587809987"",
      "Intellect": 0,
@@ -6550,11 +6550,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3381022969,
      "Id": ""6917529993593413954"",
      "Intellect": 12,
@@ -6588,11 +6588,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 22,
      "Energy Capacity": 4,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 901647822,
      "Id": ""6917529993595353091"",
      "Intellect": 2,
@@ -6624,11 +6624,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 22,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3013248110,
      "Id": ""6917530009468570468"",
      "Intellect": 6,
@@ -6662,11 +6662,11 @@
    },
    {
      "Discipline": 17,
      "Discipline (Base)": 15,
      "Energy Capacity": 10,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2687273800,
      "Id": ""6917530018729488429"",
      "Intellect": 12,
@@ -6698,11 +6698,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 786695846,
      "Id": ""6917530018768626410"",
      "Intellect": 0,
@@ -6736,11 +6736,11 @@
    },
    {
      "Discipline": 20,
      "Discipline (Base)": 20,
      "Energy Capacity": 2,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 260708852,
      "Id": ""6917530018787453896"",
      "Intellect": 12,
@@ -6774,11 +6774,11 @@
    },
    {
      "Discipline": 15,
      "Discipline (Base)": 15,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2598029856,
      "Id": ""6917530018792342807"",
      "Intellect": 15,
@@ -6812,11 +6812,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 5,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1004538825,
      "Id": ""6917530018792343235"",
      "Intellect": 0,
@@ -6850,11 +6850,11 @@
    },
    {
      "Discipline": 22,
      "Discipline (Base)": 22,
      "Energy Capacity": 3,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3663544278,
      "Id": ""6917530018792344864"",
      "Intellect": 10,
@@ -6888,11 +6888,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 4,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1322406401,
      "Id": ""6917530018792345494"",
      "Intellect": 12,
@@ -6926,11 +6926,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 11,
      "Energy Capacity": 3,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2953343703,
      "Id": ""6917530018792346489"",
      "Intellect": 12,
@@ -6964,11 +6964,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 23,
      "Energy Capacity": 1,
-     "Equippable": "Titan",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2817251955,
      "Id": ""6917530018792351089"",
      "Intellect": 8,
@@ -7002,11 +7002,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 1,
-     "Equippable": "Warlock",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2593354668,
      "Id": ""6917530018792352118"",
      "Intellect": 8,
@@ -7040,11 +7040,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 619556600,
      "Id": ""6917530018804521219"",
      "Intellect": 9,
@@ -7076,11 +7076,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1889156236,
      "Id": ""6917530018807532335"",
      "Intellect": 7,
@@ -7112,11 +7112,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 469333264,
      "Id": ""6917530018807538682"",
      "Intellect": 6,
@@ -7148,11 +7148,11 @@
    },
    {
      "Discipline": 2,
      "Discipline (Base)": 2,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2415768376,
      "Id": ""6917530018811250123"",
      "Intellect": 7,
@@ -7186,11 +7186,11 @@
    },
    {
      "Discipline": 7,
      "Discipline (Base)": 7,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 409820272,
      "Id": ""6917530018852229946"",
      "Intellect": 7,
@@ -7222,11 +7222,11 @@
    },
    {
      "Discipline": 14,
      "Discipline (Base)": 14,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 409820272,
      "Id": ""6917530018855891454"",
      "Intellect": 7,
@@ -7258,11 +7258,11 @@
    },
    {
      "Discipline": 9,
      "Discipline (Base)": 9,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2392018715,
      "Id": ""6917530018871072875"",
      "Intellect": 14,
@@ -7294,11 +7294,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 409820272,
      "Id": ""6917530018879383742"",
      "Intellect": 19,
@@ -7330,11 +7330,11 @@
    },
    {
      "Discipline": 10,
      "Discipline (Base)": 10,
      "Energy Capacity": 4,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 726878794,
      "Id": ""6917530018889365990"",
      "Intellect": 20,
@@ -7366,11 +7366,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 3,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3671791220,
      "Id": ""6917530018889370214"",
      "Intellect": 10,
@@ -7402,11 +7402,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 2,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 409820272,
      "Id": ""6917530018892752202"",
      "Intellect": 6,
@@ -7438,11 +7438,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 713622571,
      "Id": ""6917530018919845227"",
      "Intellect": 2,
@@ -7476,11 +7476,11 @@
    },
    {
      "Discipline": 11,
      "Discipline (Base)": 11,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1291141296,
      "Id": ""6917530018927521877"",
      "Intellect": 12,
@@ -7512,11 +7512,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3174394351,
      "Id": ""6917530019538500955"",
      "Intellect": 6,
@@ -7534,11 +7534,11 @@
      "Recovery (Base)": 12,
      "Resilience": 12,
      "Resilience (Base)": 12,
      "Season": 4,
      "Seasonal Mod": "",
-     "Source": "campaign",
+     "Source": "",
      "Strength": 7,
      "Strength (Base)": 7,
      "Tag": undefined,
      "Tier": "Rare",
      "Total": 52,
@@ -7548,11 +7548,11 @@
    },
    {
      "Discipline": 6,
      "Discipline (Base)": 6,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1571425240,
      "Id": ""6917530019545717273"",
      "Intellect": 11,
@@ -7584,11 +7584,11 @@
    },
    {
      "Discipline": 23,
      "Discipline (Base)": 23,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3174394351,
      "Id": ""6917530019545721517"",
      "Intellect": 2,
@@ -7606,11 +7606,11 @@
      "Recovery (Base)": 12,
      "Resilience": 13,
      "Resilience (Base)": 13,
      "Season": 4,
      "Seasonal Mod": "",
-     "Source": "campaign",
+     "Source": "",
      "Strength": 2,
      "Strength (Base)": 2,
      "Tag": undefined,
      "Tier": "Rare",
      "Total": 54,
@@ -7620,11 +7620,11 @@
    },
    {
      "Discipline": 13,
      "Discipline (Base)": 13,
      "Energy Capacity": 1,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 3967899461,
      "Id": ""6917530020162049131"",
      "Intellect": 2,
@@ -7656,11 +7656,11 @@
    },
    {
      "Discipline": 16,
      "Discipline (Base)": 16,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 856745412,
      "Id": ""6917530020640271526"",
      "Intellect": 6,
@@ -7678,11 +7678,11 @@
      "Recovery (Base)": 17,
      "Resilience": 6,
      "Resilience (Base)": 6,
      "Season": 4,
      "Seasonal Mod": "",
-     "Source": "campaign",
+     "Source": "",
      "Strength": 2,
      "Strength (Base)": 2,
      "Tag": undefined,
      "Tier": "Rare",
      "Total": 49,
@@ -7692,11 +7692,11 @@
    },
    {
      "Discipline": 6,
      "Discipline (Base)": 6,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 1641416381,
      "Id": ""6917530020643523542"",
      "Intellect": 6,
@@ -7728,11 +7728,11 @@
    },
    {
      "Discipline": 0,
      "Discipline (Base)": 0,
      "Energy Capacity": 5,
-     "Equippable": "Hunter",
+     "Equippable": "Any",
      "Equipped": false,
      "Event": "",
      "Hash": 2282780740,
      "Id": ""6917530020643524081"",
      "Intellect": 0,
    at toMatchSnapshot (/home/runner/work/DIM/DIM/src/app/inventory/d2-stores.test.ts:105:23)
    at Object.<anonymous> (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-each/build/bind.js:81:13)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircu...

Check failure on line 475 in src/app/loadout-drawer/loadout-utils.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/loadout-analyzer/analysis.test.ts ► basic loadout analysis finding tests ► finds UsesSeasonalMods/ModsDontFit

Failed test found in:
  junit.xml
Error:
  TypeError: Cannot read properties of undefined (reading 'id')
Raw output
TypeError: Cannot read properties of undefined (reading 'id')
    at id (/home/runner/work/DIM/DIM/src/app/loadout-drawer/loadout-utils.ts:475:14)
    at /home/runner/work/DIM/DIM/src/app/loadout-analyzer/analysis.test.ts:184:47
    at Array.map (<anonymous>)
    at Object.map (/home/runner/work/DIM/DIM/src/app/loadout-analyzer/analysis.test.ts:184:13)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircusTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:316:40)
    at _runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:252:3)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:126:9)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:121:9)
    at run (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:71:3)
    at runAndTransformResultsToJestFormat (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:444:34)
    at Object.worker (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/testWorker.js:106:12)

Check failure on line 475 in src/app/loadout-drawer/loadout-utils.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/loadout-analyzer/analysis.test.ts ► basic loadout analysis finding tests ► finds DoesNotRespectExotic

Failed test found in:
  junit.xml
Error:
  TypeError: Cannot read properties of undefined (reading 'id')
Raw output
TypeError: Cannot read properties of undefined (reading 'id')
    at id (/home/runner/work/DIM/DIM/src/app/loadout-drawer/loadout-utils.ts:475:14)
    at Object.<anonymous> (/home/runner/work/DIM/DIM/src/app/loadout-analyzer/analysis.test.ts:228:28)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircusTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:316:40)
    at _runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:252:3)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:126:9)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:121:9)
    at run (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:71:3)
    at runAndTransformResultsToJestFormat (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:444:34)
    at Object.worker (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/testWorker.js:106:12)

Check failure on line 268 in src/app/loadout-analyzer/analysis.test.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/loadout-analyzer/analysis.test.ts ► basic loadout analysis finding tests ► finds DoesNotSatisfyStatConstraints

Failed test found in:
  junit.xml
Error:
  Error: expect(received).toBe(expected) // Object.is equality
Raw output
Error: expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false
    at Object.toBe (/home/runner/work/DIM/DIM/src/app/loadout-analyzer/analysis.test.ts:268:64)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircusTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:316:40)
    at _runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:252:3)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:126:9)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:121:9)
    at run (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:71:3)
    at runAndTransformResultsToJestFormat (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:444:34)
    at Object.worker (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/testWorker.js:106:12)

Check failure on line 203 in src/app/loadout-drawer/loadout-drawer-reducer.test.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/loadout-drawer/loadout-drawer-reducer.test.ts ► addItem ► does nothing if the item is for the wrong class

Failed test found in:
  junit.xml
Error:
  Error: expect(received).toBeDefined()
Raw output
Error: expect(received).toBeDefined()

Received: undefined
    at Object.toBeDefined (/home/runner/work/DIM/DIM/src/app/loadout-drawer/loadout-drawer-reducer.test.ts:203:25)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircusTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:316:40)
    at _runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:252:3)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:126:9)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:121:9)
    at run (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:71:3)
    at runAndTransformResultsToJestFormat (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:444:34)
    at Object.worker (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/testWorker.js:106:12)

Check failure on line 212 in src/app/loadout-drawer/loadout-drawer-reducer.test.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/loadout-drawer/loadout-drawer-reducer.test.ts ► addItem ► does nothing when adding class-specific item to any-class loadout

Failed test found in:
  junit.xml
Error:
  Error: expect(received).toBeDefined()
Raw output
Error: expect(received).toBeDefined()

Received: undefined
    at Object.toBeDefined (/home/runner/work/DIM/DIM/src/app/loadout-drawer/loadout-drawer-reducer.test.ts:212:25)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircusTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:316:40)
    at _runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:252:3)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:126:9)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:121:9)
    at run (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:71:3)
    at runAndTransformResultsToJestFormat (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:444:34)
    at Object.worker (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/testWorker.js:106:12)

Check failure on line 222 in src/app/loadout-drawer/loadout-drawer-reducer.test.ts

See this annotation in the file changed.

@github-actions github-actions / JEST Tests

src/app/loadout-drawer/loadout-drawer-reducer.test.ts ► addItem ► removes class-specific items when saving as "any class"

Failed test found in:
  junit.xml
Error:
  Error: expect(received).toBeDefined()
Raw output
Error: expect(received).toBeDefined()

Received: undefined
    at Object.toBeDefined (/home/runner/work/DIM/DIM/src/app/loadout-drawer/loadout-drawer-reducer.test.ts:222:24)
    at Promise.then.completed (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:298:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/utils.js:231:10)
    at _callCircusTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:316:40)
    at _runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:252:3)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:126:9)
    at _runTestsForDescribeBlock (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:121:9)
    at run (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/run.js:71:3)
    at runAndTransformResultsToJestFormat (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:367:16)
    at runTest (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/runTest.js:444:34)
    at Object.worker (/home/runner/work/DIM/DIM/node_modules/.pnpm/[email protected]/node_modules/jest-runner/build/testWorker.js:106:12)