From 9ec8fb06f795db2cb1cb41de29c52a3001c20e68 Mon Sep 17 00:00:00 2001 From: Pranay Kothapalli Date: Wed, 24 Jun 2026 10:43:59 +0530 Subject: [PATCH 1/2] test(HoverCard): controlled/uncontrolled open switch (#1825) --- .../tests/HoverCard.controlledSwitch.test.tsx | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx diff --git a/src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx b/src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx new file mode 100644 index 000000000..1b65c5bd9 --- /dev/null +++ b/src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import HoverCard from '../HoverCard'; + +describe('HoverCard controlled switch', () => { + const hoverCard = (rootProps: Partial>) => ( + + Trigger + Hover content + + ); + + test('switches from uncontrolled to controlled open', () => { + const onOpenChange = jest.fn(); + + const { rerender } = render(hoverCard({ open: true })); + + expect(screen.getByText('Hover content')).toBeInTheDocument(); + + rerender(hoverCard({ open: false, onOpenChange })); + expect(screen.queryByText('Hover content')).not.toBeInTheDocument(); + }); + + test('switches from controlled open to uncontrolled', () => { + const { rerender } = render(hoverCard({ open: true })); + + expect(screen.getByText('Hover content')).toBeInTheDocument(); + + rerender(hoverCard({})); + expect(screen.queryByText('Hover content')).not.toBeInTheDocument(); + }); +}); From 9c1dcc56e7914e5f84e83ffd8afa3b576e1a353d Mon Sep 17 00:00:00 2001 From: Pranay Kothapalli Date: Wed, 24 Jun 2026 16:36:19 +0530 Subject: [PATCH 2/2] test: address code review feedback --- .../tests/HoverCard.controlledSwitch.test.tsx | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx b/src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx index 1b65c5bd9..d5a48c751 100644 --- a/src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx +++ b/src/components/ui/HoverCard/tests/HoverCard.controlledSwitch.test.tsx @@ -1,32 +1,47 @@ import React from 'react'; -import { render, screen } from '@testing-library/react'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import HoverCard from '../HoverCard'; describe('HoverCard controlled switch', () => { const hoverCard = (rootProps: Partial>) => ( - + Trigger Hover content ); - test('switches from uncontrolled to controlled open', () => { + test('switches from uncontrolled to controlled open', async() => { + const user = userEvent.setup(); const onOpenChange = jest.fn(); - const { rerender } = render(hoverCard({ open: true })); + const { rerender } = render(hoverCard({})); - expect(screen.getByText('Hover content')).toBeInTheDocument(); + await user.hover(screen.getByText('Trigger')); + await waitFor(() => { + expect(screen.getByText('Hover content')).toBeInTheDocument(); + }); rerender(hoverCard({ open: false, onOpenChange })); expect(screen.queryByText('Hover content')).not.toBeInTheDocument(); + + await user.hover(screen.getByText('Trigger')); + expect(screen.queryByText('Hover content')).not.toBeInTheDocument(); }); - test('switches from controlled open to uncontrolled', () => { + test('switches from controlled open to uncontrolled', async() => { + const user = userEvent.setup(); + const { rerender } = render(hoverCard({ open: true })); expect(screen.getByText('Hover content')).toBeInTheDocument(); rerender(hoverCard({})); expect(screen.queryByText('Hover content')).not.toBeInTheDocument(); + + await user.hover(screen.getByText('Trigger')); + await waitFor(() => { + expect(screen.getByText('Hover content')).toBeInTheDocument(); + }); }); });