|
1 | 1 | import { render, screen } from "@testing-library/svelte"; |
2 | 2 | import { user } from "../setup-tests"; |
| 3 | +import OverflowMenuPreventDefault from "./OverflowMenu.preventDefault.test.svelte"; |
3 | 4 | import OverflowMenu from "./OverflowMenu.test.svelte"; |
4 | 5 |
|
5 | 6 | describe("OverflowMenu", () => { |
@@ -287,4 +288,39 @@ describe("OverflowMenu", () => { |
287 | 288 |
|
288 | 289 | expect(spy).toHaveBeenCalledWith("close", null); |
289 | 290 | }); |
| 291 | + |
| 292 | + it("supports preventDefault on item to prevent menu from closing", async () => { |
| 293 | + const consoleLog = vi.spyOn(console, "log"); |
| 294 | + render(OverflowMenuPreventDefault); |
| 295 | + |
| 296 | + const menuButton = screen.getByRole("button"); |
| 297 | + await user.click(menuButton); |
| 298 | + expect(menuButton).toHaveAttribute("aria-expanded", "true"); |
| 299 | + |
| 300 | + const menuItems = screen.getAllByRole("menuitem"); |
| 301 | + await user.click(menuItems[0]); |
| 302 | + |
| 303 | + expect(consoleLog).toHaveBeenCalledWith("click", "Manage credentials"); |
| 304 | + expect(consoleLog).not.toHaveBeenCalledWith("close", { |
| 305 | + index: 0, |
| 306 | + text: "Manage credentials", |
| 307 | + }); |
| 308 | + |
| 309 | + expect(menuButton).toHaveAttribute("aria-expanded", "true"); |
| 310 | + expect(screen.queryByRole("menu")).toBeInTheDocument(); |
| 311 | + }); |
| 312 | + |
| 313 | + it("closes menu normally when preventDefault is not called", async () => { |
| 314 | + render(OverflowMenu); |
| 315 | + |
| 316 | + const menuButton = screen.getByRole("button"); |
| 317 | + await user.click(menuButton); |
| 318 | + expect(menuButton).toHaveAttribute("aria-expanded", "true"); |
| 319 | + |
| 320 | + const menuItems = screen.getAllByRole("menuitem"); |
| 321 | + await user.click(menuItems[0]); |
| 322 | + |
| 323 | + expect(menuButton).toHaveAttribute("aria-expanded", "false"); |
| 324 | + expect(screen.queryByRole("menu")).not.toBeInTheDocument(); |
| 325 | + }); |
290 | 326 | }); |
0 commit comments