Files
2023-01-03 00:04:38 +00:00

151 lines
4.7 KiB
JavaScript

// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add("login", (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This is will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
import '@testing-library/cypress/add-commands.js';
import 'cypress-file-upload';
/**
* This is related to `react-resize-detector` library usage.
* For more information why this is here follow this link:
* https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded
*/
Cypress.on(
'uncaught:exception',
(err) => !err.message.includes('ResizeObserver loop limit exceeded')
);
Cypress.on('window:before:load', (win) => {
cy.stub(win.console, 'error', (msg) => {
cy.now('task', 'error', msg);
});
cy.stub(win.console, 'warn', (msg) => {
cy.now('task', 'warn', msg);
});
});
Cypress.on('uncaught:exception', (err) => {
cy.now('task', 'uncaught', err);
return true; // true = fail the test
});
Cypress.Commands.add('prepareAsyncAPI', () => {
cy.intercept(
'GET',
'https://raw.githubusercontent.com/asyncapi/spec/v2.5.0/examples/streetlights-kafka.yml',
{
fixture: 'streetlights-kafka.yml',
}
).as('streetlightsKafka');
cy.visit('/');
cy.wait('@streetlightsKafka');
});
Cypress.Commands.add('prepareOpenAPI30x', () => {
cy.intercept('GET', 'https://petstore3.swagger.io/api/v3/openapi.json', {
fixture: 'petstore-oas3.yaml',
}).as('externalPetstore');
cy.visit('/');
cy.wait(['@externalPetstore']);
});
Cypress.Commands.add('prepareOasGenerator', () => {
const staticResponse = {
servers: ['blue', 'brown'],
clients: ['apple', 'avocado'],
};
const staticFixture = {
fixture: 'rejected.file.1', // picking a minimal file, doesn't matter what it is
};
const staticOas2resDownloadUrl = {
link: 'https://generator.swagger.io/api/gen/download/mocked-hash',
};
cy.intercept('GET', 'https://generator3.swagger.io/api/servers', staticResponse.servers).as(
'externalGeneratorServersOas3reqList'
);
cy.intercept('GET', 'https://generator3.swagger.io/api/clients', staticResponse.clients).as(
'externalGeneratorClientsOas3reqList'
);
// OAS3 server and client generators uses same URI
cy.intercept('POST', 'https://generator3.swagger.io/api/generate', staticFixture).as(
'externalGeneratorOas3Download'
);
cy.intercept('GET', 'https://generator.swagger.io/api/gen/servers', staticResponse.servers).as(
'externalGeneratorServersOAS2reqList'
);
cy.intercept('GET', 'https://generator.swagger.io/api/gen/clients', staticResponse.clients).as(
'externalGeneratorClientsOAS2reqList'
);
cy.intercept(
'POST',
'https://generator.swagger.io/api/gen/servers/*',
staticOas2resDownloadUrl
).as('externalGeneratorServersOAS2reqDownloadUrl');
cy.intercept(
'POST',
'https://generator.swagger.io/api/gen/clients/*',
staticOas2resDownloadUrl
).as('externalGeneratorClientsOAS2reqDownloadUrl');
// OAS2 server and client generators uses same base URI, but all requests have an appended hash
cy.intercept(
'GET',
'https://generator.swagger.io/api/gen/download/mocked-hash',
staticFixture
).as('externalGeneratorOas2Download');
// always return same OAS3 fixture. not testing the actual http service to convert
cy.intercept('POST', 'https://converter.swagger.io/api/convert', {
fixture: 'petstore-oas3.yaml',
}).as('externalConverterToOas3');
});
Cypress.Commands.add('clearDownloadsFolder', () => {
cy.exec('rm cypress/downloads/*', { log: true, failOnNonZeroExit: false });
});
Cypress.Commands.add('waitForSplashScreen', () => {
cy.get('.swagger-editor__splash-screen', { timeout: 10000 }).should('not.be.visible');
});
Cypress.Commands.add('waitForContentPropagation', () => {
/**
* Content is propagated to application after 500ms debouncing.
*/
// eslint-disable-next-line testing-library/await-async-utils,cypress/no-unnecessary-waiting
cy.wait(600);
});
Cypress.Commands.add('visitBlankPage', () => {
cy.window().then((win) => {
// eslint-disable-next-line no-param-reassign
win.location.href = 'about:blank';
});
});