@@ -25,8 +25,8 @@ describe("TestImportReimport", function()
2525 }
2626 end
2727
28- -- Build a minimal import payload so the tests stay focused on state, not fixture noise.
29- local function buildImportPayload (itemTypeLine , inventoryId , socketedItems )
28+ -- Build a minimal import item so the tests stay focused on state, not fixture noise.
29+ local function makeImportItem (itemTypeLine , inventoryId , socketedItems , itemId )
3030 local maxSocketIndex = 0
3131 for _ , socketedItem in ipairs (socketedItems ) do
3232 maxSocketIndex = math.max (maxSocketIndex , socketedItem .socket + 1 )
@@ -35,28 +35,33 @@ describe("TestImportReimport", function()
3535 for index = 1 , maxSocketIndex do
3636 sockets [index ] = { group = 0 , sColour = DEFAULT_SOCKET_COLOR }
3737 end
38+ return {
39+ id = itemId or TEST_IMPORT_ITEM_ID ,
40+ frameType = 0 ,
41+ name = " " ,
42+ typeLine = itemTypeLine ,
43+ inventoryId = inventoryId ,
44+ ilvl = DEFAULT_ITEM_LEVEL ,
45+ properties = {},
46+ sockets = sockets ,
47+ socketedItems = socketedItems ,
48+ }
49+ end
50+
51+ -- Build a minimal import payload so the tests stay focused on state, not fixture noise.
52+ local function buildImportPayload (items )
3853 return dkjson .encode ({
3954 character = { level = DEFAULT_CHARACTER_LEVEL },
40- items = {
41- {
42- id = TEST_IMPORT_ITEM_ID ,
43- frameType = 0 ,
44- name = " " ,
45- typeLine = itemTypeLine ,
46- inventoryId = inventoryId ,
47- ilvl = DEFAULT_ITEM_LEVEL ,
48- properties = {},
49- sockets = sockets ,
50- socketedItems = socketedItems ,
51- }
52- },
55+ items = items ,
5356 })
5457 end
5558
5659 local function reimportSocketedItemsWithOptions (itemTypeLine , inventoryId , socketedItems , clearItems )
5760 build .importTab .controls .charImportItemsClearSkills .state = true
5861 build .importTab .controls .charImportItemsClearItems .state = clearItems
59- build .importTab :ImportItemsAndSkills (buildImportPayload (itemTypeLine , inventoryId , socketedItems ))
62+ build .importTab :ImportItemsAndSkills (buildImportPayload ({
63+ makeImportItem (itemTypeLine , inventoryId , socketedItems ),
64+ }))
6065 runCallback (" OnFrame" )
6166 end
6267
@@ -109,10 +114,12 @@ Added Fire Damage 1/0 Default DISABLED 1
109114
110115 build .importTab .controls .charImportItemsClearSkills .state = true
111116 build .importTab .controls .charImportItemsClearItems .state = false
112- build .importTab :ImportItemsAndSkills (buildImportPayload (" Iron Hat" , " Helm" , {
113- makeSocketedGemEntry (0 , false , " Cleave" , 1 ),
114- makeSocketedGemEntry (1 , false , " Heavy Strike" , 1 ),
115- makeSocketedGemEntry (2 , true , " Added Fire Damage Support" , 2 ),
117+ build .importTab :ImportItemsAndSkills (buildImportPayload ({
118+ makeImportItem (" Iron Hat" , " Helm" , {
119+ makeSocketedGemEntry (0 , false , " Cleave" , 1 ),
120+ makeSocketedGemEntry (1 , false , " Heavy Strike" , 1 ),
121+ makeSocketedGemEntry (2 , true , " Added Fire Damage Support" , 2 ),
122+ }),
116123 }))
117124 runCallback (" OnFrame" )
118125
@@ -152,6 +159,55 @@ Added Fire Damage 1/0 Default DISABLED 1
152159 assert .is_false (socketGroup .gemList [3 ].enabled )
153160 end )
154161
162+ it (" preserves two socket groups when reimporting items and skills" , function ()
163+ build .skillsTab :PasteSocketGroup ([[
164+ Slot: Helmet
165+ Cleave 1/0 Default 1
166+ Heavy Strike 1/0 Default 1
167+ Added Fire Damage 1/0 Default DISABLED 1
168+ ]] )
169+ runCallback (" OnFrame" )
170+
171+ build .skillsTab :PasteSocketGroup ([[
172+ Slot: Gloves
173+ Blight 20/0 Default 1
174+ ]] )
175+ runCallback (" OnFrame" )
176+
177+ local helmetGroup = build .skillsTab .socketGroupList [1 ]
178+ helmetGroup .includeInFullDPS = true
179+ helmetGroup .mainActiveSkill = 2
180+ local glovesGroup = build .skillsTab .socketGroupList [2 ]
181+ glovesGroup .enabled = false
182+ runCallback (" OnFrame" )
183+
184+ build .importTab .controls .charImportItemsClearSkills .state = true
185+ build .importTab .controls .charImportItemsClearItems .state = false
186+ build .importTab :ImportItemsAndSkills (buildImportPayload ({
187+ makeImportItem (" Iron Hat" , " Helm" , {
188+ makeSocketedGemEntry (0 , false , " Cleave" , 1 ),
189+ makeSocketedGemEntry (1 , false , " Heavy Strike" , 1 ),
190+ makeSocketedGemEntry (2 , true , " Added Fire Damage Support" , 2 ),
191+ }, " test-import-item-helmet" ),
192+ makeImportItem (" Rawhide Gloves" , " Gloves" , {
193+ makeSocketedGemEntry (0 , false , " Blight" , 20 ),
194+ }, " test-import-item-gloves" ),
195+ }))
196+ runCallback (" OnFrame" )
197+
198+ local groupsBySlot = {}
199+ for _ , socketGroup in ipairs (build .skillsTab .socketGroupList ) do
200+ groupsBySlot [socketGroup .slot ] = socketGroup
201+ end
202+
203+ assert .are .equal (2 , # build .skillsTab .socketGroupList )
204+ assert .is_not_nil (groupsBySlot .Helmet )
205+ assert .is_not_nil (groupsBySlot .Gloves )
206+ assert .is_true (groupsBySlot .Helmet .includeInFullDPS )
207+ assert .are .equal (2 , groupsBySlot .Helmet .mainActiveSkill )
208+ assert .is_false (groupsBySlot .Gloves .enabled )
209+ end )
210+
155211 it (" preserves skill part selection when reimporting items and skills" , function ()
156212 assertReimportPreservesSkillSubstate (" Helmet" , " Iron Hat" , " Helm" , " Blight" , " skillPart" , 2 )
157213 end )
0 commit comments