Skip to content

Commit b49df2d

Browse files
authored
Merge pull request #655 from qwikifiers/pr-popover-tests
Added Popover test and select a11y test
2 parents 97075c1 + 7a9a76d commit b49df2d

File tree

13 files changed

+138
-29
lines changed

13 files changed

+138
-29
lines changed

apps/component-tests/src/components/showcase-test/component-imports.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ function createMetaGlobComponents() {
1515
},
1616
);
1717

18-
const newThing: Record<string, unknown> = {};
18+
const componentsMap: Record<string, unknown> = {};
1919

2020
for (const key in metaGlobComponents) {
2121
const component = metaGlobComponents[key];
2222

2323
if (component) {
2424
const componentName = key.split('routes/docs/')[1];
2525
if (componentName) {
26-
newThing[componentName] = component;
26+
componentsMap[componentName] = component;
2727
}
2828
}
2929
}
3030

31-
return newThing;
31+
return componentsMap;
3232
}
3333

3434
export const metaGlobComponents = createMetaGlobComponents();

apps/component-tests/tailwind.config.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const plugin = require('tailwindcss/plugin');
66
module.exports = {
77
content: [
88
join(__dirname, 'src/**/*.{js,ts,jsx,tsx,mdx}'),
9-
join(__dirname, '../../packages/kit-tailwind/src/**/*.{js,ts,jsx,tsx,mdx}'),
9+
join(__dirname, '../website/src/**/*.{js,ts,jsx,tsx,mdx}'),
1010
join(__dirname, '../../packages/kit-styled/src/**/*.{js,ts,jsx,tsx,mdx}'),
1111
],
1212
plugins: [

apps/website/src/routes/docs/headless/select/examples/hero.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { component$, useStyles$ } from '@builder.io/qwik';
22
import {
33
Select,
4-
SelectPopover,
54
SelectListbox,
65
SelectOption,
6+
SelectPopover,
77
SelectTrigger,
88
SelectValue,
99
} from '@qwik-ui/headless';
@@ -14,7 +14,7 @@ export default component$(() => {
1414
const users = ['Tim', 'Ryan', 'Jim', 'Jessie', 'Abby'];
1515

1616
return (
17-
<Select class="select">
17+
<Select class="select" aria-label="hero">
1818
<SelectTrigger class="select-trigger">
1919
<SelectValue placeholder="Select an option" />
2020
</SelectTrigger>

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@
3232
"story.headless": "nx storybook headless",
3333
"test.cli": "nx test cli",
3434
"test.headless": "nx component-test headless",
35+
"test.visual.headless": "nx visual-test headless",
3536
"test.pw.headless": "nx e2e headless",
37+
"test.pw.headless.ci": "nx e2e headless",
3638
"test.headless.ci": "nx component-test-ci headless",
3739
"test.utils": "nx test utils"
3840
},
3941
"packageManager": "[email protected]",
4042
"devDependencies": {
43+
"@axe-core/playwright": "4.8.5",
4144
"@builder.io/qwik": "^1.4.0",
4245
"@builder.io/qwik-city": "^1.4.0",
4346
"@builder.io/qwik-react": "0.5.3",
@@ -217,6 +220,5 @@
217220
],
218221
"nx": {
219222
"includedScripts": []
220-
},
221-
"dependencies": {}
223+
}
222224
}

packages/kit-headless/playwright.config.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,15 @@ export default defineConfig({
3636
},
3737
projects: [
3838
{
39-
name: 'chromium',
39+
name: 'logic',
4040
use: { ...devices['Desktop Chrome'] },
41+
grepInvert: /@Visual.*/,
42+
},
43+
44+
{
45+
name: 'visual',
46+
use: { ...devices['Desktop Chrome'] },
47+
grep: /@Visual.*/,
4148
},
4249

4350
// {

packages/kit-headless/project.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,16 @@
8484
"executor": "@nx/playwright:playwright",
8585
"outputs": ["{workspaceRoot}/dist/.playwright/packages/kit-headless"],
8686
"options": {
87-
"config": "packages/kit-headless/playwright.config.ts"
87+
"config": "packages/kit-headless/playwright.config.ts",
88+
"project": ["logic"]
89+
}
90+
},
91+
"visual-test": {
92+
"executor": "@nx/playwright:playwright",
93+
"outputs": ["{workspaceRoot}/dist/.playwright/packages/kit-headless"],
94+
"options": {
95+
"config": "packages/kit-headless/playwright.config.ts",
96+
"project": ["visual"]
8897
}
8998
}
9099
},
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { type Locator, type Page } from '@playwright/test';
2+
3+
export type DriverLocator = Locator | Page;
4+
5+
export function createTestDriver<T extends DriverLocator>(rootLocator: T) {
6+
const getPopover = () => {
7+
return rootLocator.locator('[popover]');
8+
};
9+
10+
const getTrigger = () => {
11+
return rootLocator.locator('[popovertarget]');
12+
};
13+
14+
return {
15+
...rootLocator,
16+
locator: rootLocator,
17+
getPopover,
18+
getTrigger,
19+
};
20+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { expect, test, type Page } from '@playwright/test';
2+
import { createTestDriver } from './popover.driver';
3+
4+
async function setup(page: Page, exampleName: string) {
5+
await page.goto(`/headless/popover/${exampleName}`);
6+
7+
const driver = createTestDriver(page);
8+
9+
return {
10+
driver,
11+
};
12+
}
13+
14+
test('@Visual diff', async ({ page }) => {
15+
const { driver: d } = await setup(page, 'hero');
16+
await expect(page).toHaveScreenshot('closed popover.png');
17+
18+
await d.getTrigger().click();
19+
20+
await expect(page).toHaveScreenshot('opened popover.png');
21+
});
22+
23+
test.describe('Mouse Behavior', () => {
24+
test(`GIVEN a popover
25+
WHEN clicking on the trigger
26+
THEN the popover should be opened `, async ({ page }) => {
27+
const { driver: d } = await setup(page, 'hero');
28+
29+
await expect(d.getPopover()).toBeHidden();
30+
await d.getTrigger().click();
31+
32+
await expect(d.getPopover()).toBeVisible();
33+
});
34+
});

packages/kit-headless/src/components/select/select-trigger.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { component$, type PropsOf, useContext, sync$, $, Slot } from '@builder.io/qwik';
1+
import { $, Slot, component$, sync$, useContext, type PropsOf } from '@builder.io/qwik';
22
import SelectContextId from './select-context';
3-
import { getNextEnabledOptionIndex, getPrevEnabledOptionIndex } from './utils';
43
import { useTypeahead } from './use-select';
4+
import { getNextEnabledOptionIndex, getPrevEnabledOptionIndex } from './utils';
55

66
type SelectTriggerProps = PropsOf<'button'>;
77
export const SelectTrigger = component$<SelectTriggerProps>((props) => {

0 commit comments

Comments
 (0)