@@ -5,6 +5,10 @@ import {
55 EQUIPMENT_DATA ,
66 EQUIPMENT_PART_TYPES ,
77} from "@/data/equipment/EQUIPMENT_DATA" ;
8+ import {
9+ EQUIPMENT_SET_EFFECTS_DATA ,
10+ type EquipmentSetName ,
11+ } from "@/data/equipment/EQUIPMENT_SET_EFFECTS_DATA" ;
812
913describe ( "equipment data" , ( ) => {
1014 it ( "contains the 100 catalog pieces across the 34 reference sets" , ( ) => {
@@ -20,21 +24,21 @@ describe("equipment data", () => {
2024 for ( const piece of pieces ) {
2125 expect ( EQUIPMENT_PART_TYPES ) . toContain ( piece . part_type ) ;
2226 expect ( existsSync ( resolve ( "public" , piece . image . slice ( 1 ) ) ) ) . toBe ( true ) ;
23- expect ( piece . set_effects . length ) . toBeGreaterThan ( 0 ) ;
27+ expect ( EQUIPMENT_SET_EFFECTS_DATA [ piece . set_name ] ) . toBeDefined ( ) ;
2428 }
25- const sets = pieces . reduce ( ( grouped , piece ) => {
26- const set = grouped . get ( piece . set_name ) ?? [ ] ;
27- set . push ( piece ) ;
28- grouped . set ( piece . set_name , set ) ;
29- return grouped ;
30- } , new Map < string , typeof pieces > ( ) ) ;
31- for ( const set of sets . values ( ) ) {
32- const requiredPieces = set [ 0 ] . set_effects . at ( - 1 ) ?. pieces ;
29+ const setNames = new Set ( pieces . map ( ( piece ) => piece . set_name ) ) ;
30+ expect (
31+ Object . keys ( EQUIPMENT_SET_EFFECTS_DATA ) . filter (
32+ ( setName ) => ! setNames . has ( setName as EquipmentSetName ) ,
33+ ) ,
34+ ) . toEqual ( [ ] ) ;
35+ for ( const setName of setNames ) {
36+ const setPieces = pieces . filter ( ( piece ) => piece . set_name === setName ) ;
37+ const requiredPieces = EQUIPMENT_SET_EFFECTS_DATA [ setName ] . at ( - 1 ) ?. pieces ;
3338 expect ( requiredPieces ) . toBeDefined ( ) ;
34- if ( ! requiredPieces ) continue ;
35- expect ( set ) . toHaveLength ( requiredPieces ) ;
39+ expect ( setPieces ) . toHaveLength ( requiredPieces ?? 0 ) ;
3640 if ( requiredPieces === 4 )
37- expect ( new Set ( set . map ( ( piece ) => piece . part_type ) ) ) . toEqual (
41+ expect ( new Set ( setPieces . map ( ( piece ) => piece . part_type ) ) ) . toEqual (
3842 new Set ( EQUIPMENT_PART_TYPES ) ,
3943 ) ;
4044 }
@@ -49,15 +53,77 @@ describe("equipment data", () => {
4953 expect ( primeVariants . map ( ( piece ) => piece . image ) ) . toEqual (
5054 primeVariantSourceIds . map ( ( id ) => EQUIPMENT_DATA [ id ] . image ) ,
5155 ) ;
52- expect ( new Set ( primeVariants . map ( ( piece ) => piece . name ) ) . size ) . toBe ( 38 ) ;
5356 for ( const piece of primeVariants ) {
5457 expect ( piece . tier_id ) . toBe ( 5 ) ;
5558 expect ( tier4Images ) . toContain ( piece . image ) ;
5659 expect (
57- piece . set_effects . every (
60+ EQUIPMENT_SET_EFFECTS_DATA [ piece . set_name ] . every (
5861 ( { effect } ) => effect === "Effect details pending." ,
5962 ) ,
6063 ) . toBe ( true ) ;
6164 }
6265 } ) ;
66+
67+ it ( "preserves representative equipment records" , ( ) => {
68+ expect ( EQUIPMENT_DATA [ 1 ] ) . toEqual ( {
69+ id : 1 ,
70+ name : "Glutton's Hat" ,
71+ image : "/images/Equipment/EQUIP_HAT_005.webp" ,
72+ tier_id : 4 ,
73+ part_type : "headgear" ,
74+ set_name : "Glutton's Visage" ,
75+ } ) ;
76+ expect ( EQUIPMENT_DATA [ 39 ] ) . toEqual ( {
77+ id : 39 ,
78+ name : "Warden Helmet" ,
79+ image : "/images/Equipment/EQUIP_SET_102_H.webp" ,
80+ tier_id : 5 ,
81+ part_type : "headgear" ,
82+ set_name : "Arbiter" ,
83+ } ) ;
84+ expect (
85+ Object . values ( EQUIPMENT_DATA )
86+ . filter ( ( piece ) => piece . id >= 63 )
87+ . map ( ( piece ) => piece . name ) ,
88+ ) . toEqual ( [
89+ "Grand Banquet Chapeau" ,
90+ "Gourmand's Apron" ,
91+ "Devourer's Sticky Gloves" ,
92+ "Devourer's Sticky Footwear" ,
93+ "Tyrant's Helmet" ,
94+ "Tyrant's Armor" ,
95+ "Tyrant's Gauntlets" ,
96+ "Tyrant's Boots" ,
97+ "Ascendant White Wolf's Mask" ,
98+ "Ascendant White Wolf's Restraints" ,
99+ "Ascendant White Wolf's Grasp" ,
100+ "Ascendant White Wolf's Claw" ,
101+ "Ancient Stone Mark" ,
102+ "Ancient Stone Sandals" ,
103+ "Towering Mount Tai's Helmet" ,
104+ "Towering Mount Tai's Iron Armor" ,
105+ "Towering Mount Tai's Gloves" ,
106+ "Towering Mount Tai's Boots" ,
107+ "Crown of Eternal Frost" ,
108+ "Touch of Eternal Frost" ,
109+ "Vanguard Buff Coat" ,
110+ "Vanguard Leather Boots" ,
111+ "Gourmand's Hat" ,
112+ "Gourmand's Apron" ,
113+ "Gourmand's Gloves" ,
114+ "Gourmand's Slippers" ,
115+ "Victorious General's Gilded Armguards" ,
116+ "Victorious General's Gilded Greaves" ,
117+ "Almighty Jade Odong Hat" ,
118+ "Almighty Jade Odong Armor" ,
119+ "Manwol's Antlers" ,
120+ "Radiant Garb" ,
121+ "Great Sage's Touch" ,
122+ "Moonlight Hooves" ,
123+ "Fox Youkai's Fur Gloves" ,
124+ "Fox Youkai's Paws" ,
125+ "Undefeated Gisaeng's Headband" ,
126+ "Undefeated Gisaeng's Flower Slippers" ,
127+ ] ) ;
128+ } ) ;
63129} ) ;
0 commit comments