UNPKG

@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 9.09 kB
{"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 {\n page: Page;\n sbFrame: FrameLocator;\n componentName: string;\n componentType: 'components' | 'forms';\n\n constructor(page: Page, componentName: string, componentType: 'components' | 'forms') {\n this.page = page;\n this.sbFrame = this.frame;\n this.componentName = componentName;\n this.componentType = componentType;\n }\n\n get frame(): FrameLocator {\n return this.page.frameLocator('#storybook-preview-iframe');\n }\n\n async goToPage(\n variant: string = 'default',\n waitUntil: 'load' | 'domcontentloaded' | 'networkidle' | 'commit' | undefined = 'commit',\n ): Promise<Response | null> {\n return this.page.goto(`?path=/story/${this.componentType}-${this.componentName}--${variant}`, {\n waitUntil,\n });\n }\n\n /**\n * Permet de passer en mode plein écran afin d'éviter que le menu ne nuise à la pertinence des tests.\n */\n async goToFullScreen(): Promise<void> {\n await this.page.getByLabel('Go full screen').click();\n }\n\n /**\n * Test par comparaison de screenshot. Permet de prévenir les régressions visuelles sur un composant.\n *\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(screenshotName: string, options?: PageAssertionsToHaveScreenshotOptions): Promise<void> {\n await expect(this.frame.locator('.sb-show-main')).toBeVisible();\n await expect(this.page).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().includes(`${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 return Promise.all([action, this.waitForSvg(svgName)]);\n }\n}\n\n/**\n * Permet de charger la story faisant l'objet des tests.\n *\n * @param componentName Le nom canonique du composant tel qu'il est défini dans les métadonnées\n * (en minuscules et espaces remplacés par des tirets du milieu)\n *\n * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur)\n *\n * @param variant Le nom canonique de la story (en minuscules et espaces remplacés par des tirets du milieu)\n *\n * @returns une promesse sur la réponse HTTP reçue par l'onglet du navigateur\n */\nexport async function goToComponentPage(\n componentName: string,\n page: Page,\n variant: string = 'default',\n): Promise<Response | null> {\n return page.goto(`?path=/story/components-${componentName}--${variant}`);\n}\n\n/**\n * Permet de charger la story faisant l'objet des tests.\n *\n * @param componentName Le nom canonique du composant tel qu'il est défini dans les métadonnées\n * (en minuscules et espaces remplacés par des tirets du milieu)\n *\n * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur)\n *\n * @param variant Le nom canonique de la story (en minuscules et espaces remplacés par des tirets du milieu)\n *\n * @returns une promesse sur la réponse HTTP reçue par l'onglet du navigateur\n */\nexport async function goToFormsPage(\n componentName: string,\n page: Page,\n variant: string = 'default',\n): Promise<Response | null> {\n return page.goto(`?path=/story/forms-${componentName}--${variant}`);\n}\n\n/**\n * Permet de récupérer l'iframe générée par Storybook pour charger la story.\n *\n * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur)\n *\n * @returns un locator sur l'iframe dont l'attribut id est égal à \"storybook-preview-iframe\"\n */\nexport function getSbFrame(page: Page): FrameLocator {\n return page.frameLocator('#storybook-preview-iframe');\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 */\nexport async function testTabNavigation(\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 * Test par comparaison de screenshot. Permet de prévenir les régressions visuelles sur un composant.\n *\n * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur)\n * @param screenshotName Nom du screenshot (souvent le nom du composant)\n */\nexport async function testSnapshot(page: Page, screenshotName: string): Promise<void> {\n // Permet de passer en mode plein écran afin d'éviter que le menu ne nuise à la pertinence des tests.\n await page.press('body', 'Alt+F');\n\n await expect(page).toHaveScreenshot(screenshotName + '.png');\n}\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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"}