commands.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /// <reference types="cypress" />
  2. import { routeSelectors } from "./routeSelectors";
  3. Cypress.Commands.add(
  4. "loadFixtures",
  5. (fixtures: string[], finalCallback: (results: any[]) => void) => {
  6. const loadFixtures = (
  7. fixtures: string[],
  8. callback: (results: any[]) => void,
  9. index = 0,
  10. results: any[] = []
  11. ) => {
  12. if (index >= fixtures.length) {
  13. callback(results);
  14. return;
  15. }
  16. cy.fixture(fixtures[index]).then(fixture => {
  17. results.push(fixture);
  18. loadFixtures(fixtures, callback, index + 1, results);
  19. });
  20. };
  21. loadFixtures(fixtures, finalCallback);
  22. }
  23. );
  24. const AUTH_RESOURCES = [
  25. "token",
  26. "user",
  27. "users",
  28. "projects",
  29. "roles",
  30. "replicas",
  31. "migrations",
  32. ];
  33. Cypress.Commands.add("mockAuth", (options?: { filterResources?: string[] }) => {
  34. const { filterResources = [] } = options || {};
  35. const resources = AUTH_RESOURCES.filter(r => !filterResources.includes(r));
  36. for (const resource of resources) {
  37. switch (resource) {
  38. case "token":
  39. cy.intercept(routeSelectors.AUTH_TOKENS, {
  40. fixture: "auth/token-scoped",
  41. }).as("token");
  42. break;
  43. case "user":
  44. cy.intercept(routeSelectors.USER, {
  45. fixture: "users/user",
  46. }).as("user");
  47. break;
  48. case "users":
  49. cy.intercept(routeSelectors.USERS, {
  50. fixture: "users/users",
  51. }).as("users");
  52. break;
  53. case "projects":
  54. cy.intercept(routeSelectors.PROJECTS, {
  55. fixture: "projects/projects",
  56. }).as("projects");
  57. break;
  58. case "roles":
  59. cy.intercept(routeSelectors.ROLE_ASSIGNMENTS, {
  60. fixture: "auth/role-assignments",
  61. }).as("roles");
  62. break;
  63. case "replicas":
  64. cy.intercept(routeSelectors.REPLICAS, {
  65. fixture: "transfers/replicas",
  66. }).as("replicas");
  67. break;
  68. case "migrations":
  69. cy.intercept(routeSelectors.MIGRATIONS, {
  70. fixture: "transfers/migrations",
  71. }).as("migrations");
  72. break;
  73. }
  74. }
  75. });
  76. Cypress.Commands.add(
  77. "waitMockAuth",
  78. (options?: { filterResources?: string[] }) => {
  79. const { filterResources = [] } = options || {};
  80. const resources = AUTH_RESOURCES.filter(r => !filterResources.includes(r));
  81. for (const resource of resources) {
  82. cy.wait(`@${resource}`);
  83. }
  84. }
  85. );
  86. Cypress.Commands.add("setProjectIdCookie", () => {
  87. cy.setCookie("projectId", "[project-id]");
  88. });
  89. declare global {
  90. // eslint-disable-next-line @typescript-eslint/no-namespace
  91. namespace Cypress {
  92. interface Chainable {
  93. loadFixtures(
  94. fixtures: string[],
  95. finalCallback: (results: any[]) => void
  96. ): Chainable<void>;
  97. mockAuth(options?: { filterResources?: string[] }): Chainable<void>;
  98. waitMockAuth(options?: { filterResources?: string[] }): Chainable<void>;
  99. setProjectIdCookie(): Chainable<void>;
  100. }
  101. }
  102. }
  103. export {};