@@ -570,4 +570,86 @@ public function testSerialize_NullPaintwearProducesFewerBytes(): void
570570 $ withFloat = InspectLink::serialize (new ItemPreviewData (defindex: 7 , paintwear: 0.5 ));
571571 $ this ->assertLessThan (strlen ($ withFloat ), strlen ($ withNull ));
572572 }
573+
574+ // -----------------------------------------------------------------------
575+ // Sticker Slab test vectors (defIndex=1355, quality=8, sticker slab variant via paintKit)
576+ // -----------------------------------------------------------------------
577+
578+ /** Sticker Slab URL A — rarity=5, keychains[0].stickerId=37, keychains[0].paintKit=7256 */
579+ private const SLAB_URL_A = 'steam://run/730//+csgo_econ_action_preview%20918191895A9BB191B994A199F991E191339096999181B4F149A98D5C0889 ' ;
580+
581+ /** Sticker Slab URL B — rarity=3, keychains[0].stickerId=37, keychains[0].paintKit=275 */
582+ private const SLAB_URL_B = 'steam://run/730//+csgo_econ_action_preview%20CBDBCBD300C1EBCBE3C8FBC3A3CBBBCB69CACCC3CBDBEEAB58C9B8B67C83 ' ;
583+
584+ public function testSlabA_Defindex (): void
585+ {
586+ $ this ->assertSame (1355 , InspectLink::deserialize (self ::SLAB_URL_A )->defindex );
587+ }
588+
589+ public function testSlabA_Quality (): void
590+ {
591+ $ this ->assertSame (8 , InspectLink::deserialize (self ::SLAB_URL_A )->quality );
592+ }
593+
594+ public function testSlabA_Rarity (): void
595+ {
596+ $ this ->assertSame (5 , InspectLink::deserialize (self ::SLAB_URL_A )->rarity );
597+ }
598+
599+ public function testSlabA_KeychainStickerId (): void
600+ {
601+ $ keychains = InspectLink::deserialize (self ::SLAB_URL_A )->keychains ;
602+ $ this ->assertCount (1 , $ keychains );
603+ $ this ->assertSame (37 , $ keychains [0 ]->stickerId );
604+ }
605+
606+ public function testSlabA_KeychainPaintKit (): void
607+ {
608+ $ keychains = InspectLink::deserialize (self ::SLAB_URL_A )->keychains ;
609+ $ this ->assertCount (1 , $ keychains );
610+ $ this ->assertSame (7256 , $ keychains [0 ]->paintKit );
611+ }
612+
613+ public function testSlabB_Defindex (): void
614+ {
615+ $ this ->assertSame (1355 , InspectLink::deserialize (self ::SLAB_URL_B )->defindex );
616+ }
617+
618+ public function testSlabB_Quality (): void
619+ {
620+ $ this ->assertSame (8 , InspectLink::deserialize (self ::SLAB_URL_B )->quality );
621+ }
622+
623+ public function testSlabB_Rarity (): void
624+ {
625+ $ this ->assertSame (3 , InspectLink::deserialize (self ::SLAB_URL_B )->rarity );
626+ }
627+
628+ public function testSlabB_KeychainStickerId (): void
629+ {
630+ $ keychains = InspectLink::deserialize (self ::SLAB_URL_B )->keychains ;
631+ $ this ->assertCount (1 , $ keychains );
632+ $ this ->assertSame (37 , $ keychains [0 ]->stickerId );
633+ }
634+
635+ public function testSlabB_KeychainPaintKit (): void
636+ {
637+ $ keychains = InspectLink::deserialize (self ::SLAB_URL_B )->keychains ;
638+ $ this ->assertCount (1 , $ keychains );
639+ $ this ->assertSame (275 , $ keychains [0 ]->paintKit );
640+ }
641+
642+ public function testRoundtrip_PaintKit (): void
643+ {
644+ $ data = new ItemPreviewData (
645+ defindex: 1355 ,
646+ quality: 8 ,
647+ rarity: 5 ,
648+ keychains: [new Sticker (slot: 0 , stickerId: 37 , paintKit: 7256 )],
649+ );
650+ $ result = InspectLink::deserialize (InspectLink::serialize ($ data ));
651+ $ this ->assertCount (1 , $ result ->keychains );
652+ $ this ->assertSame (37 , $ result ->keychains [0 ]->stickerId );
653+ $ this ->assertSame (7256 , $ result ->keychains [0 ]->paintKit );
654+ }
573655}
0 commit comments