Skip to content

Commit 33dc3e7

Browse files
committed
test(popover): add programmatic popover tests
1 parent 428b057 commit 33dc3e7

File tree

2 files changed

+104
-18
lines changed

2 files changed

+104
-18
lines changed

packages/kit-headless/src/components/popover/popover.driver.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,17 @@ export function createTestDriver<T extends DriverLocator>(rootLocator: T) {
1919
return getTrigger().all();
2020
};
2121

22+
const getProgrammaticButtonTrigger = () => {
23+
return rootLocator.locator('button');
24+
};
25+
2226
return {
2327
...rootLocator,
2428
locator: rootLocator,
2529
getPopover,
2630
getAllPopovers,
2731
getTrigger,
2832
getAllTriggers,
33+
getProgrammaticButtonTrigger,
2934
};
3035
}

packages/kit-headless/src/components/popover/popover.test.ts

Lines changed: 99 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,7 @@ test.describe('Mouse Behavior', () => {
5454
const { driver: d } = await setup(page, 'auto');
5555
//ask shai: is it good to use nth here???
5656
const [firstPopOver, secondPopOver] = await d.getAllPopovers();
57-
58-
const firstPopoverTrigger = d.getTrigger().nth(0);
59-
60-
const secondPopoverTrigger = d.getTrigger().nth(1);
57+
const [firstPopoverTrigger, secondPopoverTrigger] = await d.getAllTriggers();
6158

6259
await expect(firstPopOver).toBeHidden();
6360
await expect(secondPopOver).toBeHidden();
@@ -78,10 +75,7 @@ test.describe('Mouse Behavior', () => {
7875

7976
//ask shai: is it good to use nth here???
8077
const [firstPopOver, secondPopOver] = await d.getAllPopovers();
81-
82-
const firstPopoverTrigger = d.getTrigger().nth(0);
83-
84-
const secondPopoverTrigger = d.getTrigger().nth(1);
78+
const [firstPopoverTrigger, secondPopoverTrigger] = await d.getAllTriggers();
8579

8680
await expect(firstPopOver).toBeHidden();
8781
await expect(secondPopOver).toBeHidden();
@@ -95,21 +89,26 @@ test.describe('Mouse Behavior', () => {
9589

9690
test(`GIVEN a pair of manual opened popovers
9791
WHEN clicking the first trigger on the page and then clicking the second trigger
98-
THEN then both popovers should be opened`, async ({ page }) => {
92+
THEN then both popovers should be closed`, async ({ page }) => {
9993
const { driver: d } = await setup(page, 'manual');
10094

101-
//ask shai: is it good to use nth here???
10295
const [firstPopOver, secondPopOver] = await d.getAllPopovers();
10396
const [firstPopoverTrigger, secondPopoverTrigger] = await d.getAllTriggers();
10497

105-
await expect(firstPopOver).toBeHidden();
106-
await expect(secondPopOver).toBeHidden();
107-
98+
// Arrange
10899
await firstPopoverTrigger.click();
109100
await secondPopoverTrigger.click();
110101

111102
await expect(firstPopOver).toBeVisible();
112103
await expect(secondPopOver).toBeVisible();
104+
105+
// Act
106+
await firstPopoverTrigger.click();
107+
await secondPopoverTrigger.click();
108+
109+
// Assert
110+
await expect(firstPopOver).toBeHidden();
111+
await expect(secondPopOver).toBeHidden();
113112
});
114113
});
115114

@@ -133,11 +132,8 @@ test.describe('Keyboard Behavior', () => {
133132
THEN the first popover should close and the second one appear`, async ({ page }) => {
134133
const { driver: d } = await setup(page, 'auto');
135134
//ask shai: is it good to use nth here???
136-
const firstPopOver = d.getPopover().nth(0);
137-
const firstPopoverTrigger = d.getTrigger().nth(0);
138-
139-
const secondPopOver = d.getPopover().nth(1);
140-
const secondPopoverTrigger = d.getTrigger().nth(1);
135+
const [firstPopOver, secondPopOver] = await d.getAllPopovers();
136+
const [firstPopoverTrigger, secondPopoverTrigger] = await d.getAllTriggers();
141137

142138
await expect(firstPopOver).toBeHidden();
143139
await expect(secondPopOver).toBeHidden();
@@ -153,4 +149,89 @@ test.describe('Keyboard Behavior', () => {
153149

154150
await expect(firstPopOver).toBeHidden();
155151
});
152+
153+
test(`GIVEN a pair of manual popovers
154+
WHEN clicking the first trigger on the page and then clicking the second trigger
155+
THEN then both popovers should be opened`, async ({ page }) => {
156+
const { driver: d } = await setup(page, 'manual');
157+
158+
//ask shai: is it good to use nth here???
159+
const [firstPopOver, secondPopOver] = await d.getAllPopovers();
160+
const [firstPopoverTrigger, secondPopoverTrigger] = await d.getAllTriggers();
161+
162+
await expect(firstPopOver).toBeHidden();
163+
await expect(secondPopOver).toBeHidden();
164+
165+
await firstPopoverTrigger.focus();
166+
await firstPopoverTrigger.press('Enter');
167+
168+
await secondPopoverTrigger.focus();
169+
await secondPopoverTrigger.press('Enter');
170+
171+
await expect(firstPopOver).toBeVisible();
172+
await expect(secondPopOver).toBeVisible();
173+
});
174+
175+
test(`GIVEN a pair of manual opened popovers
176+
WHEN clicking the first trigger on the page and then clicking the second trigger
177+
THEN then both popovers should be closed`, async ({ page }) => {
178+
const { driver: d } = await setup(page, 'manual');
179+
180+
const [firstPopOver, secondPopOver] = await d.getAllPopovers();
181+
const [firstPopoverTrigger, secondPopoverTrigger] = await d.getAllTriggers();
182+
183+
// Arrange
184+
await firstPopoverTrigger.focus();
185+
await firstPopoverTrigger.press('Enter');
186+
187+
await secondPopoverTrigger.focus();
188+
await secondPopoverTrigger.press('Enter');
189+
190+
await expect(firstPopOver).toBeVisible();
191+
await expect(secondPopOver).toBeVisible();
192+
193+
// Act
194+
await secondPopoverTrigger.press('Enter');
195+
196+
await firstPopoverTrigger.focus();
197+
await firstPopoverTrigger.press('Enter');
198+
199+
// Assert
200+
await expect(firstPopOver).toBeHidden();
201+
await expect(secondPopOver).toBeHidden();
202+
});
203+
204+
test(`GIVEN a programmatic popover
205+
WHEN focusing the button on the page and then typing 'o'
206+
THEN the popover should open`, async ({ page }) => {
207+
const { driver: d } = await setup(page, 'programmatic');
208+
209+
const popover = d.getPopover();
210+
const programmaticButtonTrigger = d.getProgrammaticButtonTrigger();
211+
212+
await expect(popover).toBeHidden();
213+
214+
await programmaticButtonTrigger.focus();
215+
await programmaticButtonTrigger.press('o');
216+
217+
await expect(popover).toBeVisible();
218+
});
219+
220+
test(`GIVEN an open programmatic popover
221+
WHEN focusing the button on the page and then typing 'o'
222+
THEN the popover should close`, async ({ page }) => {
223+
const { driver: d } = await setup(page, 'programmatic');
224+
225+
const popover = d.getPopover();
226+
const programmaticButtonTrigger = d.getProgrammaticButtonTrigger();
227+
228+
await programmaticButtonTrigger.focus();
229+
await programmaticButtonTrigger.press('o');
230+
231+
await expect(popover).toBeVisible();
232+
233+
await programmaticButtonTrigger.press('o');
234+
235+
await expect(popover).toBeHidden();
236+
});
156237
});

0 commit comments

Comments
 (0)