1- /* eslint-disable @typescript-eslint/non-nullable-type-assertion-style */
1+
22import { act , fireEvent , render } from '@testing-library/react'
33import React from 'react'
44import { beforeEach , describe , expect , it , vi } from 'vitest'
@@ -36,58 +36,59 @@ describe('SlidePanel', () => {
3636 } )
3737
3838 it ( 'does not render the resizer if panel is closed' , ( ) => {
39- const { container } = render (
39+ const { queryByRole } = render (
4040 < SlidePanel
4141 mainContent = { < div > Main</ div > }
4242 panelContent = { < div > Panel</ div > }
4343 isPanelOpen = { false }
4444 />
4545 )
46- const resizer = container . querySelector ( '.resizer' )
47- expect ( resizer ) . toBeNull ( )
46+ expect ( queryByRole ( 'separator' ) ) . toBeNull ( )
4847 } )
4948
5049 it ( 'uses default width of 400 when localStorage is empty' , ( ) => {
51- const { container } = render (
50+ const { getByRole } = render (
5251 < SlidePanel
5352 mainContent = { < div > Main</ div > }
5453 panelContent = { < div > Panel</ div > }
5554 isPanelOpen
5655 />
5756 )
58- const panel = container . querySelector ( '.slidePanel' ) as HTMLElement
57+ // Panel is an <aside> element, and has the implicit role 'complementary'
58+ const panel = getByRole ( 'complementary' )
59+ expect ( panel . textContent ) . toBe ( 'Panel' )
5960 expect ( panel . style . width ) . toBe ( '400px' )
6061 } )
6162
6263 it ( 'loads width from localStorage if present' , ( ) => {
6364 localStorage . setItem ( 'panelWidth' , '250' )
64- const { container } = render (
65+ const { getByRole } = render (
6566 < SlidePanel
6667 mainContent = { < div > Main</ div > }
6768 panelContent = { < div > Panel</ div > }
6869 isPanelOpen
6970 />
7071 )
71- const panel = container . querySelector ( '.slidePanel' ) as HTMLElement
72+ const panel = getByRole ( 'complementary' )
7273 expect ( panel . style . width ) . toBe ( '250px' )
7374 } )
7475
7576 it ( 'falls back to default width if localStorage width is invalid' , ( ) => {
7677 localStorage . setItem ( 'panelWidth' , 'not-a-number' )
77- const { container } = render (
78+ const { getByRole } = render (
7879 < SlidePanel
7980 mainContent = { < div > Main</ div > }
8081 panelContent = { < div > Panel</ div > }
8182 isPanelOpen
8283 />
8384 )
84- const panel = container . querySelector ( '.slidePanel' ) as HTMLElement
85+ const panel = getByRole ( 'complementary' )
8586 // parseInt of 'not-a-number' yields NaN so default width of 400 is expected
8687 expect ( panel . style . width ) . toBe ( '400px' )
8788 } )
8889
8990 it ( 'respects minWidth from config' , ( ) => {
90- const { container } = render (
91+ const { getByRole } = render (
9192 < ConfigProvider value = { { slidePanel : { minWidth : 300 } } } >
9293 < SlidePanel
9394 mainContent = { < div > Main</ div > }
@@ -96,8 +97,8 @@ describe('SlidePanel', () => {
9697 />
9798 </ ConfigProvider >
9899 )
99- const resizer = container . querySelector ( '.resizer' ) as HTMLElement
100- const panel = container . querySelector ( '.slidePanel' ) as HTMLElement
100+ const resizer = getByRole ( 'separator' )
101+ const panel = getByRole ( 'complementary' )
101102 expect ( panel . style . width ) . toBe ( '400px' )
102103
103104 // Simulate mousedown on resizer with clientX 800
@@ -116,15 +117,15 @@ describe('SlidePanel', () => {
116117 } )
117118
118119 it ( 'handles dragging to resize' , ( ) => {
119- const { container } = render (
120+ const { getByRole } = render (
120121 < SlidePanel
121122 mainContent = { < div > Main</ div > }
122123 panelContent = { < div > Panel</ div > }
123124 isPanelOpen
124125 />
125126 )
126- const resizer = container . querySelector ( '.resizer' ) as HTMLElement
127- const panel = container . querySelector ( '.slidePanel' ) as HTMLElement
127+ const resizer = getByRole ( 'separator' )
128+ const panel = getByRole ( 'complementary' )
128129 expect ( panel . style . width ) . toBe ( '400px' )
129130
130131 // Mock panel's offsetWidth to be 400px
@@ -151,7 +152,7 @@ describe('SlidePanel', () => {
151152 } )
152153
153154 it ( 'uses config defaultWidth if valid' , ( ) => {
154- const { container } = render (
155+ const { getByRole } = render (
155156 < ConfigProvider value = { { slidePanel : { defaultWidth : 500 } } } >
156157 < SlidePanel
157158 mainContent = { < div > Main</ div > }
@@ -160,12 +161,12 @@ describe('SlidePanel', () => {
160161 />
161162 </ ConfigProvider >
162163 )
163- const panel = container . querySelector ( '.slidePanel' ) as HTMLElement
164+ const panel = getByRole ( 'complementary' )
164165 expect ( panel . style . width ) . toBe ( '500px' )
165166 } )
166167
167168 it ( 'ignores negative config.defaultWidth and uses 400 instead' , ( ) => {
168- const { container } = render (
169+ const { getByRole } = render (
169170 < ConfigProvider value = { { slidePanel : { defaultWidth : - 10 } } } >
170171 < SlidePanel
171172 mainContent = { < div > Main</ div > }
@@ -174,7 +175,7 @@ describe('SlidePanel', () => {
174175 />
175176 </ ConfigProvider >
176177 )
177- const panel = container . querySelector ( '.slidePanel' ) as HTMLElement
178+ const panel = getByRole ( 'complementary' )
178179 expect ( panel . style . width ) . toBe ( '400px' )
179180 } )
180181} )
0 commit comments