/// import { routeSelectors } from "./routeSelectors"; Cypress.Commands.add( "loadFixtures", (fixtures: string[], finalCallback: (results: any[]) => void) => { const loadFixtures = ( fixtures: string[], callback: (results: any[]) => void, index = 0, results: any[] = [], ) => { if (index >= fixtures.length) { callback(results); return; } cy.fixture(fixtures[index]).then(fixture => { results.push(fixture); loadFixtures(fixtures, callback, index + 1, results); }); }; loadFixtures(fixtures, finalCallback); }, ); const AUTH_RESOURCES = [ "token", "user", "users", "projects", "roles", "transfers", "deployments", ]; Cypress.Commands.add("mockAuth", (options?: { filterResources?: string[] }) => { const { filterResources = [] } = options || {}; const resources = AUTH_RESOURCES.filter(r => !filterResources.includes(r)); for (const resource of resources) { switch (resource) { case "token": cy.intercept(routeSelectors.AUTH_TOKENS, { fixture: "auth/token-scoped", }).as("token"); break; case "user": cy.intercept(routeSelectors.USER, { fixture: "users/user", }).as("user"); break; case "users": cy.intercept(routeSelectors.USERS, { fixture: "users/users", }).as("users"); break; case "projects": cy.intercept(routeSelectors.PROJECTS, { fixture: "projects/projects", }).as("projects"); break; case "roles": cy.intercept(routeSelectors.ROLE_ASSIGNMENTS, { fixture: "auth/role-assignments", }).as("roles"); break; case "transfers": cy.intercept(routeSelectors.TRANSFERS, { fixture: "transfers/replicas", }).as("transfers"); break; case "deployments": cy.intercept(routeSelectors.DEPLOYMENTS, { fixture: "transfers/migrations", }).as("deployments"); break; } } }); Cypress.Commands.add( "waitMockAuth", (options?: { filterResources?: string[] }) => { const { filterResources = [] } = options || {}; const resources = AUTH_RESOURCES.filter(r => !filterResources.includes(r)); for (const resource of resources) { cy.wait(`@${resource}`); } }, ); Cypress.Commands.add("setProjectIdCookie", () => { cy.setCookie("projectId", "[project-id]"); }); declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace Cypress { interface Chainable { loadFixtures( fixtures: string[], finalCallback: (results: any[]) => void, ): Chainable; mockAuth(options?: { filterResources?: string[] }): Chainable; waitMockAuth(options?: { filterResources?: string[] }): Chainable; setProjectIdCookie(): Chainable; } } } export {};