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).

130 lines (125 loc) 5.77 kB
import { expect } from '@playwright/test'; class BasePageObjectModel { constructor(page, componentName, componentType) { this.page = page; this.sbFrame = this.frame; this.componentName = componentName; this.componentType = componentType; } get frame() { return this.page.frameLocator('#storybook-preview-iframe'); } async goToPage(variant = 'default', waitUntil = 'commit') { return this.page.goto(`?path=/story/${this.componentType}-${this.componentName}--${variant}`, { waitUntil, }); } /** * Permet de passer en mode plein écran afin d'éviter que le menu ne nuise à la pertinence des tests. */ async goToFullScreen() { await this.page.getByLabel('Go full screen').click(); } /** * Test par comparaison de screenshot. Permet de prévenir les régressions visuelles sur un composant. * * @param screenshotName Nom du screenshot (souvent le nom du composant) * @param options Options possibles de la méthode toHaveScreenshot */ async testSnapshot(screenshotName, options) { await expect(this.frame.locator('.sb-show-main')).toBeVisible(); await expect(this.page).toHaveScreenshot(screenshotName + '.png', options); } /** * Permet de vérifier le bon chargement d'un svg via la reponse de sa requête http. * * @param name Nom du svg (sans l'extension '.svg'). Vérifie le chargement de n'importe quel svg si non renseigné * @returns La Requête reçue correspondant au chargement du svg */ async waitForSvg(name = '') { return this.page.waitForResponse((response) => response.url().includes(`${name}.svg`)); } /** * Test le bon chargement du svg correspondant après avoir effectué une action spécifique afin d'assurer * la cohérence graphique d'une page en cas de tests screenshot * * @param action Promise correspondant à l'action censé déclencher le chargement du nouveau svg * @param svgName Nom du svg sensé être chargé (sans l'extension '.svg'). Vérifie le chargement de n'importe quel svg si non renseigné * @returns Une Promise contenant un tableau avec en index 0 le retour de l'action effectuée et en index 1 la reponse * de la requête d'appel du svg */ async doActionAndCheckSvg(action, svgName = '') { return Promise.all([action, this.waitForSvg(svgName)]); } } /** * Permet de charger la story faisant l'objet des tests. * * @param componentName Le nom canonique du composant tel qu'il est défini dans les métadonnées * (en minuscules et espaces remplacés par des tirets du milieu) * * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur) * * @param variant Le nom canonique de la story (en minuscules et espaces remplacés par des tirets du milieu) * * @returns une promesse sur la réponse HTTP reçue par l'onglet du navigateur */ async function goToComponentPage(componentName, page, variant = 'default') { return page.goto(`?path=/story/components-${componentName}--${variant}`); } /** * Permet de charger la story faisant l'objet des tests. * * @param componentName Le nom canonique du composant tel qu'il est défini dans les métadonnées * (en minuscules et espaces remplacés par des tirets du milieu) * * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur) * * @param variant Le nom canonique de la story (en minuscules et espaces remplacés par des tirets du milieu) * * @returns une promesse sur la réponse HTTP reçue par l'onglet du navigateur */ async function goToFormsPage(componentName, page, variant = 'default') { return page.goto(`?path=/story/forms-${componentName}--${variant}`); } /** * Permet de récupérer l'iframe générée par Storybook pour charger la story. * * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur) * * @returns un locator sur l'iframe dont l'attribut id est égal à "storybook-preview-iframe" */ function getSbFrame(page) { return page.frameLocator('#storybook-preview-iframe'); } /** * Actionne la combinaison clavier spécifiée et assure que le focus est positionné sur le bon élément en séquence. * * @param tabNavigationSequence Décrit la séquence de navigation attendue. * @param keyPressContext Fournit le locator pointant vers l'élément qui doit être actionné. * @param withShift */ async function testTabNavigation(tabNavigationSequence, keyPressContext, withShift = false) { const keyToPress = withShift ? 'Shift+Tab' : 'Tab'; for (let navigationStepIndex in tabNavigationSequence) { await keyPressContext.press(keyToPress); await expect(tabNavigationSequence[navigationStepIndex]).toBeFocused(); } } /** * Test par comparaison de screenshot. Permet de prévenir les régressions visuelles sur un composant. * * @param page La référence à une page Playwright (c'est à dire à un onglet unique du navigateur) * @param screenshotName Nom du screenshot (souvent le nom du composant) */ async function testSnapshot(page, screenshotName) { // Permet de passer en mode plein écran afin d'éviter que le menu ne nuise à la pertinence des tests. await page.press('body', 'Alt+F'); await expect(page).toHaveScreenshot(screenshotName + '.png'); } /* Public API Surface of @edugouvfr/ngx-dsfr/sdk */ /** * Generated bundle index. Do not edit. */ export { BasePageObjectModel, getSbFrame, goToComponentPage, goToFormsPage, testSnapshot, testTabNavigation }; //# sourceMappingURL=edugouvfr-ngx-dsfr-sdk.mjs.map