Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test/commerce searchbox #4030

Closed
wants to merge 69 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
3d4615a
checkpoint
louis-bompart May 22, 2024
109ee4f
checkpoint
louis-bompart May 22, 2024
2a7575b
clean enough
louis-bompart May 22, 2024
a7dbc0d
rm-old-patch
louis-bompart May 22, 2024
337f92a
rm-old-story-kernel
louis-bompart May 22, 2024
42d6fe6
file-gen
louis-bompart May 22, 2024
8bf47a0
gitignore
louis-bompart May 22, 2024
39b2de6
lint
louis-bompart May 22, 2024
5d8ffba
lint
louis-bompart May 22, 2024
35b1145
cem+dope setup
louis-bompart May 22, 2024
2b0335f
interactions and cleaning
louis-bompart May 22, 2024
25af9c7
stable
louis-bompart May 22, 2024
3b15811
result-component
louis-bompart May 23, 2024
6b0fadb
touch-up
louis-bompart May 23, 2024
f348047
fix header, rm old story
louis-bompart May 23, 2024
521d036
clean-up
louis-bompart May 24, 2024
8a0f962
config for searchinterface wrapper
louis-bompart May 24, 2024
d364825
slot support
louis-bompart May 24, 2024
b0ef0cb
Migrate atomic-load-more-results stories to new format
louis-bompart May 24, 2024
d905500
migrate more
louis-bompart May 24, 2024
91d1bbd
more migration
louis-bompart May 25, 2024
aae201e
normalize @example jsdoc
louis-bompart May 25, 2024
e42b59b
docs: migrate formats
louis-bompart May 25, 2024
ffbfaaf
docs: migrate result lists
louis-bompart May 25, 2024
01a3767
docs: migrate results component
louis-bompart May 25, 2024
444c863
derp format
louis-bompart May 25, 2024
4bc29c3
docs: migrate searchbox
louis-bompart May 25, 2024
37d977a
docs: migrate smartsnippets
louis-bompart May 25, 2024
55dd6e2
last stories
louis-bompart May 25, 2024
c2ae9b5
Add generated files
May 25, 2024
b3d324a
docs: migrate atomic-search-box story (#3985)
louis-bompart May 27, 2024
3721f19
build
louis-bompart May 27, 2024
912411c
docs: migrate atomic-no-results (#3991)
louis-bompart May 27, 2024
f826c9d
docs: migrate atomic-result-icon (#3993)
louis-bompart May 27, 2024
e3ca3dc
docs: migrate atomic-numeric-range (#3995)
louis-bompart May 27, 2024
e9cafbc
docs: migrate atomic-timeframe (#3997)
louis-bompart May 27, 2024
87e2ed2
docs: migrate atomic-did-you-mean (#3999)
louis-bompart May 27, 2024
3b41333
docs: migrate atomic-facet-manager (#4005)
louis-bompart May 27, 2024
7e66dfd
build
louis-bompart May 27, 2024
195fa62
add missing cem build
louis-bompart May 27, 2024
e99c662
docs: atomic-icon
louis-bompart May 27, 2024
774a61e
fixes
louis-bompart May 27, 2024
cc7eeec
deletion
louis-bompart May 27, 2024
e4835ab
Revert "normalize @example jsdoc"
louis-bompart May 27, 2024
5bb31b8
missing prestep
louis-bompart May 27, 2024
acf00f6
refactor plugin
louis-bompart May 27, 2024
4f08dea
plugin comments
louis-bompart May 27, 2024
ec4be77
cleanup
louis-bompart May 28, 2024
4386110
ensure-dir
louis-bompart May 28, 2024
48f0e97
derp
louis-bompart May 28, 2024
1823577
cleanup
louis-bompart May 28, 2024
8298c98
derp
louis-bompart May 28, 2024
8362e31
fixed
louis-bompart May 28, 2024
2b93d9d
add commerce wrapper
louis-bompart May 28, 2024
9ebd87a
basic commerce searchbox story
louis-bompart May 28, 2024
36e3e62
a11y
louis-bompart May 28, 2024
a80df81
setup-playwright
louis-bompart May 28, 2024
6261076
basic storybook+playwright search-box
louis-bompart May 28, 2024
2cf823c
make nx more reliable in various launch cwd
louis-bompart May 29, 2024
a4ce158
tests
louis-bompart May 29, 2024
eadd823
stabie
louis-bompart May 29, 2024
4ce360c
stable!
louis-bompart May 29, 2024
16687ba
remove focus stuff
louis-bompart May 29, 2024
361c73c
pageObject/fixture paradigm
louis-bompart May 29, 2024
271ebce
Add generated files
May 30, 2024
baff4cc
merge master
louis-bompart May 30, 2024
3d8fc4f
lockfile
louis-bompart May 30, 2024
96ec886
lockfileagain
louis-bompart May 30, 2024
f08e08a
Merge branch 'master' into test/commerce-searchbox
louis-bompart May 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/playwright.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#TODO: Merge into ci.

name: Playwright Tests
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Install dependencies
run: npm ci
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
2 changes: 1 addition & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
"esbenp.prettier-vscode",
"redhat.vscode-yaml",
"streetsidesoftware.code-spell-checker",
"orta.vscode-jest"
"ms-playwright.playwright"
]
}
2,872 changes: 2,266 additions & 606 deletions package-lock.json

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "ui-kit",
"private": true,
"scripts": {
"postinstall": "husky install && patch-package && nx run-many --target=install:isolated",
"postinstall": "husky install && patch-package && npx playwright install",
"reset:install": "git checkout origin/master package-lock.json && npm i",
"clean:install": "git clean -xfd && npm run reset:install",
"dev:atomic": "concurrently \"npm run -w @coveo/headless dev\" \"npm run -w @coveo/atomic dev\"",
Expand Down Expand Up @@ -34,10 +34,10 @@
"@coveo/release": "1.0.0",
"@cspell/dict-fr-fr": "2.2.2",
"@cspell/eslint-plugin": "8.8.1",
"@nx/js": "19.0.5",
"@nx/storybook": "19.0.5",
"@nx/vite": "19.0.5",
"@nx/web": "19.0.5",
"@nx/js": "19.1.0",
"@nx/storybook": "19.1.0",
"@nx/vite": "19.1.0",
"@nx/web": "19.1.0",
"@octokit/rest": "20.1.1",
"@rollup/plugin-typescript": "11.1.6",
"@storybook/addon-essentials": "8.1.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ AtomicAutomaticFacetGenerator,
AtomicBreadbox,
AtomicCategoryFacet,
AtomicColorFacet,
AtomicCommerceSearchBox,
AtomicComponentError,
AtomicDidYouMean,
AtomicExternal,
Expand Down Expand Up @@ -108,6 +109,7 @@ AtomicAutomaticFacetGenerator,
AtomicBreadbox,
AtomicCategoryFacet,
AtomicColorFacet,
AtomicCommerceSearchBox,
AtomicComponentError,
AtomicDidYouMean,
AtomicExternal,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,48 @@ export class AtomicColorFacet {
export declare interface AtomicColorFacet extends Components.AtomicColorFacet {}


@ProxyCmp({
inputs: ['clearFilters', 'disableSearch', 'minimumQueryLength', 'numberOfQueries', 'redirectionUrl', 'suggestionDelay', 'suggestionTimeout']
})
@Component({
selector: 'atomic-commerce-search-box',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['clearFilters', 'disableSearch', 'minimumQueryLength', 'numberOfQueries', 'redirectionUrl', 'suggestionDelay', 'suggestionTimeout'],
})
export class AtomicCommerceSearchBox {
protected el: HTMLElement;
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
c.detach();
this.el = r.nativeElement;
proxyOutputs(this, this.el, ['redirect']);
}
}


import type { RedirectionPayload as IAtomicCommerceSearchBoxRedirectionPayload } from '@coveo/atomic';

export declare interface AtomicCommerceSearchBox extends Components.AtomicCommerceSearchBox {
/**
* Event that is emitted when a standalone search box redirection is triggered. By default, the search box will directly change the URL and redirect accordingly, so if you want to handle the redirection differently, use this event.

Example:
```html
<script>
document.querySelector('atomic-commerce-search-box').addEventListener((e) => {
e.preventDefault();
// handle redirection
});
</script>
...
<atomic-commerce-search-box redirection-url="/search"></atomic-commerce-search-box>
```
*/
redirect: EventEmitter<CustomEvent<IAtomicCommerceSearchBoxRedirectionPayload>>;
}


@ProxyCmp({
inputs: ['element', 'error']
})
Expand Down
11 changes: 10 additions & 1 deletion packages/atomic/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,13 @@ src/generated
cypress/screenshots/*

headless/
dist-storybook/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/

storybook-static/
1 change: 1 addition & 0 deletions packages/atomic/.storybook/main.mts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const config: StorybookConfig = {
addons: [
'@storybook/addon-essentials',
'@storybook/addon-interactions',
'@storybook/addon-a11y',
'@whitespace/storybook-addon-html',
],
framework: {
Expand Down
14 changes: 9 additions & 5 deletions packages/atomic/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"clean": "rimraf -rf dist/*",
"build": "nx build",
"build:locales": "npx nx build:locales atomic",
"dev": "nx dev atomic",
"start": "nx dev atomic",
"prod": "npx serve www -l 3333 --no-request-logging",
"test": "npm run build:locales && stencil test --spec",
"test:watch": "stencil test --spec --watchAll",
Expand Down Expand Up @@ -71,15 +71,17 @@
"@coveo/release": "1.0.0",
"@custom-elements-manifest/analyzer": "0.10.2",
"@fullhuman/postcss-purgecss": "6.0.0",
"@nx/js": "19.0.5",
"@nx/storybook": "19.0.5",
"@nx/vite": "19.0.5",
"@nx/web": "19.0.5",
"@nx/js": "19.1.0",
"@nx/storybook": "19.1.0",
"@nx/vite": "19.1.0",
"@nx/web": "19.1.0",
"@playwright/test": "1.44.1",
"@rollup/plugin-alias": "5.1.0",
"@rollup/plugin-replace": "5.0.5",
"@stencil-community/postcss": "2.2.0",
"@stencil/angular-output-target": "0.8.4",
"@stencil/react-output-target": "0.5.3",
"@storybook/addon-a11y": "8.1.4",
"@storybook/addon-essentials": "8.1.2",
"@storybook/addon-interactions": "8.1.2",
"@storybook/core-events": "8.1.2",
Expand All @@ -98,6 +100,7 @@
"@types/escape-html": "1.0.4",
"@types/jest": "29.5.12",
"@types/lodash": "4.17.1",
"@types/node": "18.19.33",
"@types/postcss-import": "14.0.3",
"@types/puppeteer": "7.0.4",
"@whitespace/storybook-addon-html": "6.1.1",
Expand Down Expand Up @@ -125,6 +128,7 @@
"react": "18.3.1",
"rollup-plugin-html": "0.2.1",
"shadow-dom-testing-library": "1.11.2",
"storybook": "8.1.2",
"tailwindcss": "3.4.3",
"ts-node": "10.9.1",
"tslib": "^2.3.0",
Expand Down
82 changes: 82 additions & 0 deletions packages/atomic/playwright.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import {defineConfig, devices} from '@playwright/test';

/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// require('dotenv').config();

const DEFAULT_DESKTOP_VIEWPORT = {
width: 1920,
height: 1080,
};

/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: './src',
testMatch: '*.e2e.ts',
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
// baseURL: 'http://127.0.0.1:3000',

/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},

/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
viewport: DEFAULT_DESKTOP_VIEWPORT,
},
},

{
name: 'firefox',
use: {...devices['Desktop Firefox'], viewport: DEFAULT_DESKTOP_VIEWPORT},
},

{
name: 'webkit',
use: {...devices['Desktop Safari'], viewport: DEFAULT_DESKTOP_VIEWPORT},
},

/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },

/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],
expect: {
timeout: 20 * 1000,
},
});
26 changes: 8 additions & 18 deletions packages/atomic/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@
}
},
"dev": {
"dependsOn": ["storybook", "stencil:dev", "cem:dev"]
"dependsOn": ["storybook", "stencil:dev", "cem:dev"],
"executor": "nx:noop"
},
"stencil:dev": {
"dependsOn": ["^build", "build:locales"],
Expand Down Expand Up @@ -116,31 +117,20 @@
}
},
"storybook": {
"executor": "@nx/storybook:storybook",
"executor": "nx:run-commands",
"dependsOn": ["wait-on:dist"],
"options": {
"port": 4400,
"configDir": "{workspaceRoot}/packages/atomic/.storybook"
},
"configurations": {
"ci": {
"quiet": true
}
"cwd": "{projectRoot}",
"command": "npx storybook dev -p 4400"
}
},
"build-storybook": {
"dependsOn": ["cached:build:stencil", "cem:build", "list-assets"],
"executor": "@nx/storybook:build",
"executor": "nx:run-commands",
"outputs": ["{options.outputDir}"],
"cwd": "{projectRoot}",
"options": {
"outputDir": "{workspaceRoot}/packages/atomic/dist-storybook",
"configDir": "{workspaceRoot}/packages/atomic/.storybook"
},
"configurations": {
"ci": {
"quiet": true
}
"cwd": "{projectRoot}",
"command": "npx storybook build -o storybook-static"
}
},
"test-storybook": {
Expand Down
4 changes: 4 additions & 0 deletions packages/atomic/src/components.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,7 @@ export namespace Components {
}
/**
* The `atomic-commerce-search-box` component creates a search box with built-in support for suggestions.
* @alpha
*/
interface AtomicCommerceSearchBox {
/**
Expand Down Expand Up @@ -3557,6 +3558,7 @@ declare global {
}
/**
* The `atomic-commerce-search-box` component creates a search box with built-in support for suggestions.
* @alpha
*/
interface HTMLAtomicCommerceSearchBoxElement extends Components.AtomicCommerceSearchBox, HTMLStencilElement {
addEventListener<K extends keyof HTMLAtomicCommerceSearchBoxElementEventMap>(type: K, listener: (this: HTMLAtomicCommerceSearchBoxElement, ev: AtomicCommerceSearchBoxCustomEvent<HTMLAtomicCommerceSearchBoxElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
Expand Down Expand Up @@ -5837,6 +5839,7 @@ declare namespace LocalJSX {
}
/**
* The `atomic-commerce-search-box` component creates a search box with built-in support for suggestions.
* @alpha
*/
interface AtomicCommerceSearchBox {
/**
Expand Down Expand Up @@ -8691,6 +8694,7 @@ declare module "@stencil/core" {
"atomic-commerce-recommendation-list": LocalJSX.AtomicCommerceRecommendationList & JSXBase.HTMLAttributes<HTMLAtomicCommerceRecommendationListElement>;
/**
* The `atomic-commerce-search-box` component creates a search box with built-in support for suggestions.
* @alpha
*/
"atomic-commerce-search-box": LocalJSX.AtomicCommerceSearchBox & JSXBase.HTMLAttributes<HTMLAtomicCommerceSearchBoxElement>;
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import {Page} from '@playwright/test';

export class AtomicCommerceLoadMoreProductsLocators {
private page: Page;
constructor(page: Page) {
this.page = page;
}

summary({index, total}: {index?: number; total?: number} = {}) {
return this.page.getByText(
new RegExp(
`Showing ${index ?? '\\d'} of ${total ?? '\\d'} result${total === 1 ? '' : 's'}.`
)
);
}

get loadMoreButton() {
return this.page.getByText('Load more results');
}
}
Loading
Loading