@@ -28,7 +28,7 @@ vi.mock("@/components/ui", () => {
2828 }
2929} )
3030
31- import { render , waitFor , screen } from "@/utils/test-utils"
31+ import { render , waitFor , screen , fireEvent } from "@/utils/test-utils"
3232import React from "react"
3333import userEvent from "@testing-library/user-event"
3434import { CheckpointSaved } from "../CheckpointSaved"
@@ -54,7 +54,7 @@ describe("CheckpointSaved popover visibility", () => {
5454
5555 const getMenu = ( ) => getByTestId ( "checkpoint-menu-container" ) as HTMLElement
5656
57- // Initially hidden (relies on group-hover )
57+ // Initially hidden (not hovering )
5858 expect ( getMenu ( ) ) . toBeTruthy ( )
5959 expect ( getMenu ( ) . className ) . toContain ( "hidden" )
6060
@@ -80,7 +80,12 @@ describe("CheckpointSaved popover visibility", () => {
8080 } )
8181
8282 it ( "resets confirm state when popover closes" , async ( ) => {
83- const { getByTestId } = render ( < CheckpointSaved { ...baseProps } /> )
83+ const { getByTestId, container } = render ( < CheckpointSaved { ...baseProps } /> )
84+ const getParentDiv = ( ) =>
85+ container . querySelector ( "[class*='flex items-center justify-between']" ) as HTMLElement
86+
87+ // Hover to make menu visible
88+ fireEvent . mouseEnter ( getParentDiv ( ) )
8489
8590 // Open the popover
8691 await waitForOpenHandler ( )
@@ -106,10 +111,12 @@ describe("CheckpointSaved popover visibility", () => {
106111 } )
107112
108113 it ( "closes popover after preview and after confirm restore" , async ( ) => {
109- const { getByTestId } = render ( < CheckpointSaved { ...baseProps } /> )
114+ const { getByTestId, container } = render ( < CheckpointSaved { ...baseProps } /> )
110115
111116 const popoverRoot = ( ) => getByTestId ( "restore-popover" )
112117 const menuContainer = ( ) => getByTestId ( "checkpoint-menu-container" )
118+ const getParentDiv = ( ) =>
119+ container . querySelector ( "[class*='flex items-center justify-between']" ) as HTMLElement
113120
114121 // Open
115122 await waitForOpenHandler ( )
@@ -125,11 +132,16 @@ describe("CheckpointSaved popover visibility", () => {
125132 expect ( popoverRoot ( ) . getAttribute ( "data-open" ) ) . toBe ( "false" )
126133 expect ( menuContainer ( ) . className ) . toContain ( "block" )
127134 } )
135+
136+ // Simulate mouse leaving the component to trigger hide
137+ fireEvent . mouseLeave ( getParentDiv ( ) )
138+
128139 await waitFor ( ( ) => {
129140 expect ( menuContainer ( ) . className ) . toContain ( "hidden" )
130141 } )
131142
132- // Reopen
143+ // Hover to make menu visible again, then reopen
144+ fireEvent . mouseEnter ( getParentDiv ( ) )
133145 lastOnOpenChange ?.( true )
134146 await waitFor ( ( ) => {
135147 expect ( popoverRoot ( ) . getAttribute ( "data-open" ) ) . toBe ( "true" )
@@ -141,8 +153,36 @@ describe("CheckpointSaved popover visibility", () => {
141153 await waitFor ( ( ) => {
142154 expect ( popoverRoot ( ) . getAttribute ( "data-open" ) ) . toBe ( "false" )
143155 } )
156+
157+ // Simulate mouse leaving the component to trigger hide
158+ fireEvent . mouseLeave ( getParentDiv ( ) )
159+
144160 await waitFor ( ( ) => {
145161 expect ( menuContainer ( ) . className ) . toContain ( "hidden" )
146162 } )
147163 } )
164+
165+ it ( "shows menu on hover and hides when mouse leaves" , async ( ) => {
166+ const { getByTestId, container } = render ( < CheckpointSaved { ...baseProps } /> )
167+
168+ const getMenu = ( ) => getByTestId ( "checkpoint-menu-container" ) as HTMLElement
169+ const getParentDiv = ( ) =>
170+ container . querySelector ( "[class*='flex items-center justify-between']" ) as HTMLElement
171+
172+ // Initially hidden (not hovering)
173+ expect ( getMenu ( ) . className ) . toContain ( "hidden" )
174+
175+ // Hover over the component
176+ fireEvent . mouseEnter ( getParentDiv ( ) )
177+ await waitFor ( ( ) => {
178+ expect ( getMenu ( ) . className ) . toContain ( "block" )
179+ expect ( getMenu ( ) . className ) . not . toContain ( "hidden" )
180+ } )
181+
182+ // Mouse leaves the component
183+ fireEvent . mouseLeave ( getParentDiv ( ) )
184+ await waitFor ( ( ) => {
185+ expect ( getMenu ( ) . className ) . toContain ( "hidden" )
186+ } )
187+ } )
148188} )
0 commit comments