@@ -135,5 +135,83 @@ describe('packages/chat-layout', () => {
135135 const element = screen . getByTestId ( 'chat-layout' ) ;
136136 expect ( element ) . toHaveClass ( 'custom-class' ) ;
137137 } ) ;
138+
139+ test ( 'provides isSideNavHovered context with default value' , ( ) => {
140+ const TestConsumer = ( ) => {
141+ const { isSideNavHovered } = useChatLayoutContext ( ) ;
142+ return < div > isSideNavHovered: { isSideNavHovered . toString ( ) } </ div > ;
143+ } ;
144+
145+ render (
146+ < ChatLayout >
147+ < TestConsumer />
148+ </ ChatLayout > ,
149+ ) ;
150+ expect ( screen . getByText ( 'isSideNavHovered: false' ) ) . toBeInTheDocument ( ) ;
151+ } ) ;
152+
153+ test ( 'setIsSideNavHovered function updates isSideNavHovered state' , async ( ) => {
154+ const TestConsumer = ( ) => {
155+ const { isSideNavHovered, setIsSideNavHovered } =
156+ useChatLayoutContext ( ) ;
157+ return (
158+ < >
159+ < div > isSideNavHovered: { isSideNavHovered . toString ( ) } </ div >
160+ < button onClick = { ( ) => setIsSideNavHovered ( true ) } >
161+ Set Hovered
162+ </ button >
163+ < button onClick = { ( ) => setIsSideNavHovered ( false ) } >
164+ Set Not Hovered
165+ </ button >
166+ </ >
167+ ) ;
168+ } ;
169+
170+ render (
171+ < ChatLayout >
172+ < TestConsumer />
173+ </ ChatLayout > ,
174+ ) ;
175+
176+ expect ( screen . getByText ( 'isSideNavHovered: false' ) ) . toBeInTheDocument ( ) ;
177+
178+ await userEvent . click (
179+ screen . getByRole ( 'button' , { name : 'Set Hovered' } ) ,
180+ ) ;
181+ expect ( screen . getByText ( 'isSideNavHovered: true' ) ) . toBeInTheDocument ( ) ;
182+
183+ await userEvent . click (
184+ screen . getByRole ( 'button' , { name : 'Set Not Hovered' } ) ,
185+ ) ;
186+ expect ( screen . getByText ( 'isSideNavHovered: false' ) ) . toBeInTheDocument ( ) ;
187+ } ) ;
188+
189+ test ( 'togglePin updates isPinned state correctly when hovered' , async ( ) => {
190+ const TestConsumer = ( ) => {
191+ const { isPinned, togglePin, isSideNavHovered } =
192+ useChatLayoutContext ( ) ;
193+ return (
194+ < >
195+ < div > isPinned: { isPinned . toString ( ) } </ div >
196+ < div > isSideNavHovered: { isSideNavHovered . toString ( ) } </ div >
197+ < button onClick = { togglePin } > Toggle</ button >
198+ </ >
199+ ) ;
200+ } ;
201+
202+ render (
203+ < ChatLayout initialIsPinned = { false } >
204+ < TestConsumer />
205+ </ ChatLayout > ,
206+ ) ;
207+
208+ expect ( screen . getByText ( 'isPinned: false' ) ) . toBeInTheDocument ( ) ;
209+ expect ( screen . getByText ( 'isSideNavHovered: false' ) ) . toBeInTheDocument ( ) ;
210+
211+ await userEvent . click ( screen . getByRole ( 'button' , { name : 'Toggle' } ) ) ;
212+
213+ expect ( screen . getByText ( 'isPinned: true' ) ) . toBeInTheDocument ( ) ;
214+ expect ( screen . getByText ( 'isSideNavHovered: false' ) ) . toBeInTheDocument ( ) ;
215+ } ) ;
138216 } ) ;
139217} ) ;
0 commit comments