@edugouvfr/ngx-dsfr
Version:
NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).
1 lines • 11.6 kB
Source Map (JSON)
{"version":3,"file":"edugouvfr-ngx-dsfr-sdk.mjs","sources":["../../../projects/ngx-dsfr-components/sdk/src/utils/e2e.utils.ts","../../../projects/ngx-dsfr-components/sdk/public-api.ts","../../../projects/ngx-dsfr-components/sdk/edugouvfr-ngx-dsfr-sdk.ts"],"sourcesContent":["import { FrameLocator, Locator, Page, PageAssertionsToHaveScreenshotOptions, Response, expect } from '@playwright/test';\n\nexport class BasePageObjectModel implements LocatorContext {\n page: Page;\n sbFrame: FrameLocator;\n componentName: string;\n componentType: 'components' | 'forms' | 'patterns';\n _locatorContext: LocatorContext;\n\n constructor(page: Page, componentName: string, componentType: 'components' | 'forms' | 'patterns') {\n this.page = page;\n this.componentName = componentName;\n this.componentType = componentType;\n this.sbFrame = page.frameLocator('#storybook-preview-iframe');\n // par défaut le contexte de localisation est la frame (story preview)\n this._locatorContext = this.frame;\n }\n\n get frame(): FrameLocator {\n return this.sbFrame;\n }\n\n getByAltText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n return this._locatorContext.getByAltText(text, options);\n }\n\n getByLabel(text: string | RegExp, options?: { exact?: boolean }): Locator {\n return this._locatorContext.getByLabel(text, options);\n }\n\n getByPlaceholder(text: string | RegExp, options?: { exact?: boolean }): Locator {\n return this._locatorContext.getByPlaceholder(text, options);\n }\n\n getByRole(\n role:\n | 'alert'\n | 'alertdialog'\n | 'application'\n | 'article'\n | 'banner'\n | 'blockquote'\n | 'button'\n | 'caption'\n | 'cell'\n | 'checkbox'\n | 'code'\n | 'columnheader'\n | 'combobox'\n | 'complementary'\n | 'contentinfo'\n | 'definition'\n | 'deletion'\n | 'dialog'\n | 'directory'\n | 'document'\n | 'emphasis'\n | 'feed'\n | 'figure'\n | 'form'\n | 'generic'\n | 'grid'\n | 'gridcell'\n | 'group'\n | 'heading'\n | 'img'\n | 'insertion'\n | 'link'\n | 'list'\n | 'listbox'\n | 'listitem'\n | 'log'\n | 'main'\n | 'marquee'\n | 'math'\n | 'meter'\n | 'menu'\n | 'menubar'\n | 'menuitem'\n | 'menuitemcheckbox'\n | 'menuitemradio'\n | 'navigation'\n | 'none'\n | 'note'\n | 'option'\n | 'paragraph'\n | 'presentation'\n | 'progressbar'\n | 'radio'\n | 'radiogroup'\n | 'region'\n | 'row'\n | 'rowgroup'\n | 'rowheader'\n | 'scrollbar'\n | 'search'\n | 'searchbox'\n | 'separator'\n | 'slider'\n | 'spinbutton'\n | 'status'\n | 'strong'\n | 'subscript'\n | 'superscript'\n | 'switch'\n | 'tab'\n | 'table'\n | 'tablist'\n | 'tabpanel'\n | 'term'\n | 'textbox'\n | 'time'\n | 'timer'\n | 'toolbar'\n | 'tooltip'\n | 'tree'\n | 'treegrid'\n | 'treeitem',\n options?: {\n checked?: boolean;\n disabled?: boolean;\n exact?: boolean;\n expanded?: boolean;\n includeHidden?: boolean;\n level?: number;\n name?: string | RegExp;\n pressed?: boolean;\n selected?: boolean;\n },\n ): Locator {\n return this._locatorContext.getByRole(role, options);\n }\n\n getByTestId(testId: string | RegExp): Locator {\n return this._locatorContext.getByTestId(testId);\n }\n\n getByText(text: string | RegExp, options?: { exact?: boolean }): Locator {\n return this._locatorContext.getByText(text, options);\n }\n\n getByTitle(text: string | RegExp, options?: { exact?: boolean }): Locator {\n return this._locatorContext.getByTitle(text, options);\n }\n\n locator(\n selector: string,\n options?: {\n has?: Locator;\n hasNot?: Locator;\n hasNotText?: string | RegExp;\n hasText?: string | RegExp;\n },\n ): Locator {\n return this._locatorContext.locator(selector, options);\n }\n\n async goToPage(\n variant: string = 'default',\n waitUntil: 'load' | 'domcontentloaded' | 'networkidle' | 'commit' | undefined = 'load',\n ): Promise<Response | null> {\n this._locatorContext = this.frame;\n\n return this.page.goto(`?path=/story/${this.componentType}-${this.componentName}--${variant}`, {\n waitUntil: waitUntil,\n });\n }\n\n /**\n * Permet de naviguer vers l'url de la story en mode standalone (hors storybook).\n */\n async goToFullScreenPage(variant: string = 'default', svgName: string = ''): Promise<void> {\n this._locatorContext = this.page;\n const url: string = `iframe.html?id=${this.componentType}-${this.componentName}--${variant}`;\n await this.doActionAndCheckSvg(this.page.goto(url, { waitUntil: 'load' }), svgName);\n }\n\n /**\n * Test par comparaison de screenshot. Permet de prévenir les régressions visuelles sur un composant.\n *\n * @param componentLocator Locator correspondant au composant sujet du screenshot\n * @param screenshotName Nom du screenshot (souvent le nom du composant)\n * @param options Options possibles de la méthode toHaveScreenshot\n */\n async testSnapshot(\n componentLocator: Locator | Page,\n screenshotName: string,\n options?: PageAssertionsToHaveScreenshotOptions,\n ): Promise<void> {\n if (componentLocator === this.page) {\n await expect(this.page.locator('storybook-root')).toBeVisible();\n } else {\n await expect(componentLocator as Locator).toBeVisible();\n }\n\n await expect(componentLocator).toHaveScreenshot(screenshotName + '.png', options);\n }\n\n /**\n * Permet de vérifier le bon chargement d'un svg via la reponse de sa requête http.\n *\n * @param name Nom du svg (sans l'extension '.svg'). Vérifie le chargement de n'importe quel svg si non renseigné\n * @returns La Requête reçue correspondant au chargement du svg\n */\n async waitForSvg(name: string = ''): Promise<Response> {\n return this.page.waitForResponse((response) => response.url().endsWith(`${name}.svg`));\n }\n\n /**\n * Test le bon chargement du svg correspondant après avoir effectué une action spécifique afin d'assurer\n * la cohérence graphique d'une page en cas de tests screenshot\n *\n * @param action Promise correspondant à l'action censé déclencher le chargement du nouveau svg\n * @param svgName Nom du svg sensé être chargé (sans l'extension '.svg'). Vérifie le chargement de n'importe quel svg si non renseigné\n * @returns Une Promise contenant un tableau avec en index 0 le retour de l'action effectuée et en index 1 la reponse\n * de la requête d'appel du svg\n */\n async doActionAndCheckSvg<T>(action: Promise<T>, svgName: string = ''): Promise<Awaited<T | Response>[]> {\n const promises: Promise<any>[] = [action];\n if (svgName) promises.push(this.waitForSvg(svgName));\n\n return Promise.all(promises);\n }\n\n /**\n * Permet de récupérer des éléments appartenant à l'onglet 'Controls' de Storybook.\n */\n sbControlLocator(\n selector: string,\n options?: {\n has?: Locator;\n hasNot?: Locator;\n hasNotText?: string | RegExp;\n hasText?: string | RegExp;\n },\n ): Locator {\n return this.page.locator(selector, options);\n }\n\n /**\n * Actionne la combinaison clavier spécifiée et assure que le focus est positionné sur le bon élément en séquence.\n *\n * @param tabNavigationSequence Décrit la séquence de navigation attendue.\n * @param keyPressContext Fournit le locator pointant vers l'élément qui doit être actionné.\n * @param withShift\n */\n async expectTabSequence(\n tabNavigationSequence: Locator[],\n keyPressContext: Locator,\n withShift: boolean = false,\n ): Promise<void> {\n const keyToPress = withShift ? 'Shift+Tab' : 'Tab';\n\n for (let navigationStepIndex in tabNavigationSequence) {\n await keyPressContext.press(keyToPress);\n await expect(tabNavigationSequence[navigationStepIndex]).toBeFocused();\n }\n }\n}\n\n/**\n * Abstraction du contxte de localisation Playwright.\n */\ninterface LocatorContext extends Omit<FrameLocator, 'first' | 'last' | 'nth' | 'frameLocator' | 'owner'> {}\n","/* Public API Surface of @edugouvfr/ngx-dsfr/sdk */\nexport * from './src/utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}