@@ -408,4 +408,217 @@ describe("TestItemsTab", function()
408408 end )
409409 end )
410410 end )
411+
412+ describe (" TestCopyAnointsAndAugments" , function ()
413+ before_each (function ()
414+ newBuild ()
415+ end )
416+
417+ -- Equips an item into the active item set's appropriate slot
418+ local function equip (raw )
419+ local item = new (" Item" , raw )
420+ build .itemsTab :AddItem (item )
421+ build .itemsTab :EquipItemInSet (item , build .itemsTab .activeItemSetId )
422+ return item
423+ end
424+
425+ describe (" Anoints" , function ()
426+ it (" copies an anoint from the equipped item onto a new item" , function ()
427+ equip ([[
428+ Rarity: RARE
429+ Equipped
430+ Crimson Amulet
431+ Allocates Serrated Edges (enchant)
432+ ]] )
433+
434+ local newItem = new (" Item" , [[
435+ Rarity: RARE
436+ New
437+ Azure Amulet
438+ ]] )
439+ build .itemsTab :CopyAnointsAndAugments (newItem , false , false )
440+
441+ assert .are .equals (1 , # newItem .enchantModLines )
442+ end )
443+
444+ it (" does not overwrite an existing anoint when overwrite is false" , function ()
445+ equip ([[
446+ Rarity: RARE
447+ Equipped
448+ Crimson Amulet
449+ Allocates Serrated Edges (enchant)
450+ ]] )
451+
452+ local newItem = new (" Item" , [[
453+ Rarity: RARE
454+ New
455+ Azure Amulet
456+ Allocates Unbound Forces (enchant)
457+ ]] )
458+ build .itemsTab :CopyAnointsAndAugments (newItem , false , false )
459+
460+ assert .are .equals (1 , # newItem .enchantModLines )
461+ assert .is_not_nil (newItem .enchantModLines [1 ].line :find (" Unbound Forces" ))
462+ end )
463+
464+ it (" overwrites an existing anoint when overwrite is true" , function ()
465+ equip ([[
466+ Rarity: RARE
467+ Equipped
468+ Crimson Amulet
469+ Allocates Serrated Edges (enchant)
470+ ]] )
471+
472+ local newItem = new (" Item" , [[
473+ Rarity: RARE
474+ New
475+ Azure Amulet
476+ Allocates Unbound Forces (enchant)
477+ ]] )
478+ build .itemsTab :CopyAnointsAndAugments (newItem , false , true )
479+
480+ assert .are .equals (1 , # newItem .enchantModLines )
481+ assert .is_not_nil (newItem .enchantModLines [1 ].line :find (" Serrated Edges" ))
482+ end )
483+
484+ it (" does not modify a corrupted item" , function ()
485+ equip ([[
486+ Rarity: RARE
487+ Equipped
488+ Crimson Amulet
489+ Allocates Serrated Edges (enchant)
490+ ]] )
491+
492+ for _ , status in ipairs ({ " Corrupted" , " Mirrored" , " Sanctified" }) do
493+ local newItem = new (" Item" , string.format ([[
494+ Rarity: RARE
495+ New
496+ Azure Amulet
497+ %s
498+ ]] , status ))
499+ build .itemsTab :CopyAnointsAndAugments (newItem , false , false )
500+
501+ assert .are .equals (0 , # newItem .enchantModLines )
502+ end
503+ end )
504+ end )
505+
506+ describe (" Augments" , function ()
507+ local rune = " Greater Robust Rune"
508+
509+ local existingItemText = string.format ([[
510+ Rarity: RARE
511+ Equipped
512+ Stocky Mitts
513+ Sockets: S
514+ Rune: %s
515+ ]] , rune )
516+
517+ local newItemText = [[
518+ Rarity: RARE
519+ New
520+ Stocky Mitts
521+ ]]
522+
523+ it (" copies runes from the equipped item when copyAugments is true" , function ()
524+ equip (existingItemText )
525+
526+ local newItem = new (" Item" , [[
527+ Rarity: RARE
528+ New
529+ Stocky Mitts
530+ ]] )
531+ build .itemsTab :CopyAnointsAndAugments (newItem , true , false )
532+
533+ assert .are .equals (rune , newItem .runes [1 ])
534+ end )
535+
536+ it (" adds sockets to the new item to fit the copied runes" , function ()
537+ equip (existingItemText )
538+
539+ local newItem = new (" Item" , newItemText )
540+ assert .are .equals (0 , # newItem .sockets )
541+
542+ build .itemsTab :CopyAnointsAndAugments (newItem , true , false )
543+
544+ assert .are .equals (1 , # newItem .sockets )
545+ end )
546+
547+ it (" does not copy runes when copyAugments is false" , function ()
548+ equip (existingItemText )
549+
550+ local newItem = new (" Item" , newItemText )
551+ build .itemsTab :CopyAnointsAndAugments (newItem , false , false )
552+
553+ assert .are .equals (0 , # newItem .sockets )
554+ end )
555+
556+ it (" does not replace socket bound runes" , function ()
557+ equip (existingItemText )
558+
559+ local newItem = new (" Item" , [[
560+ Rarity: RARE
561+ Equipped
562+ Stocky Mitts
563+ Sockets: S
564+ Rune: Kolr's Hunt
565+ ]] )
566+ build .itemsTab :CopyAnointsAndAugments (newItem , true , true )
567+ assert .are .equals (newItem .runes [1 ], " Kolr's Hunt" )
568+
569+ local newItem = new (" Item" , [[
570+ Rarity: RARE
571+ Equipped
572+ Stocky Mitts
573+ Sockets: S S
574+ Rune: Kolr's Hunt
575+ ]] )
576+ build .itemsTab :CopyAnointsAndAugments (newItem , true , true )
577+ assert .are .equals (newItem .runes [1 ], " Kolr's Hunt" )
578+ assert .are .equals (newItem .runes [2 ], rune )
579+ end )
580+
581+ it (" replaces runes when overwrite is true" , function ()
582+ equip (existingItemText )
583+
584+ local newItem = new (" Item" , [[
585+ Rarity: RARE
586+ Equipped
587+ Stocky Mitts
588+ Sockets: S S
589+ Rune: Lesser Robust Rune
590+ ]] )
591+ build .itemsTab :CopyAnointsAndAugments (newItem , true , true )
592+ assert .are .equals (newItem .runes [1 ], rune )
593+ assert .are .equals (newItem .runes [2 ], " None" )
594+ end )
595+
596+ it (" identifies socket bound runes" , function ()
597+ local item = new (" Item" , [[
598+ Rarity: RARE
599+ Equipped
600+ Stocky Mitts
601+ Sockets: S S
602+ Rune: Kolr's Hunt
603+ Rune: Lesser Robust Rune
604+ ]] )
605+ local validRunes = build .itemsTab :GetValidRunesForItem (item )
606+
607+ assert .is_true (build .itemsTab :IsSocketBoundRune (item , item .runes [1 ], validRunes ))
608+ assert .is_false (build .itemsTab :IsSocketBoundRune (item , item .runes [2 ], validRunes ))
609+ end )
610+ end )
611+
612+ it (" does nothing when no matching item is equipped" , function ()
613+ local newItem = new (" Item" , [[
614+ Rarity: RARE
615+ New
616+ Azure Amulet
617+ +8 to Strength (enchant)
618+ ]] )
619+ build .itemsTab :CopyAnointsAndAugments (newItem , true , false )
620+
621+ assert .are .equals (1 , # newItem .enchantModLines )
622+ end )
623+ end )
411624end )
0 commit comments