import "dotenv/config"; import { Cookie } from "playwright"; import { expect } from "playwright/test"; import { App } from "../app"; type User = { email: string; password: string; }; type AuthCache = Array; const docusign = { name: "DocuSign", userAuthEnvVars: { email: "ZYGON_DOCUSIGN_EMAIL", password: "ZYGON_DOCUSIGN_PASSWORD", }, login: async (user, page) => { await page.goto("https://account.docusign.com/oauth/auth?ui_locales=fr-FR"); await page.locator("input[autocomplete=username]").fill(user.email); await page.getByText("SUIVANT").click(); await page.locator("input[type=password]").fill(user.password); await page.locator("button[data-qa=submit-password]").click(); await page.waitForSelector("[data-qa=app-loading-spinner]"); }, cacheAuth: async (_, context) => { return await context.cookies(); }, restoreAuthCache: async (cache, _, context) => { await context.addCookies(cache); }, listCollaborators: async (page) => { await page.goto("https://apps.docusign.com/admin/users"); await page.waitForSelector("tbody tr"); return await page.$$eval("tbody tr", (elements) => elements.map((element) => ({ fullName: element.querySelector("td:nth-child(1)")!.textContent!, email: element.querySelector("td:nth-child(2)")!.textContent!, })), ); }, addCollaborator: async (collaborator, page) => { await page.goto("https://apps.docusign.com/admin/add-user"); await page.getByLabel("mail").fill(collaborator.email); await page.locator("[data-qa=add_user_step1_next_btn]").click(); await page.getByLabel("Nom complet").fill(collaborator.fullName); await page.locator("[data-qa=add_user_step2_next_btn]").click(); await page.locator("[data-qa=add_user_step3_next_btn]").click(); await page.getByLabel("Profil").selectOption({ label: "DS Viewer" }); await page.locator("[data-qa=add_user_step4_next_btn]").click(); await expect( page.getByText( `Vous avez créé l’utilisateur ${collaborator.email} avec succès.`, ), ).toBeVisible(); }, removeCollaborator: async (collaborator, page) => { await page.goto("https://apps.docusign.com/admin/users"); await page.waitForSelector("tbody tr"); const collaboratorList = await page.$$eval("tbody tr", (elements) => elements.map((element) => element.textContent), ); const collaboratorIndex = collaboratorList.findIndex((item) => item?.includes(collaborator.email), ); await page .locator( `tbody tr:nth-child(${collaboratorIndex + 1}) td:last-of-type button`, ) .click(); await page.getByRole("menuitem", { name: "Fermer" }).click(); await page.locator('[role=dialog] [data-qa="modal-submit-button"]').click(); await expect( page.getByText( `Le compte ${collaborator.email} de l’utilisateur a été fermé.`, ), ).toBeVisible(); }, } satisfies App; export default docusign;