ci: Fix flaky credentials saving in e2e tests (no-changelog) (#11919)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2024-12-02 17:28:08 +01:00
committed by GitHub
parent 85f30b27ae
commit d4e8d6778c
5 changed files with 18 additions and 16 deletions

View File

@@ -40,6 +40,7 @@ export function saveCredential() {
.within(() => { .within(() => {
cy.get('button').should('not.exist'); cy.get('button').should('not.exist');
}); });
getCredentialSaveButton().should('have.text', 'Saved');
} }
export function closeCredentialModal() { export function closeCredentialModal() {

View File

@@ -1,3 +1,4 @@
import { saveCredential } from '../composables/modals/credential-modal';
import * as projects from '../composables/projects'; import * as projects from '../composables/projects';
import { INSTANCE_MEMBERS, INSTANCE_OWNER, INSTANCE_ADMIN, NOTION_NODE_NAME } from '../constants'; import { INSTANCE_MEMBERS, INSTANCE_OWNER, INSTANCE_ADMIN, NOTION_NODE_NAME } from '../constants';
import { import {
@@ -225,8 +226,7 @@ describe('Sharing', { disableAutoLogin: true }, () => {
.filter(':contains("Development")') .filter(':contains("Development")')
.should('have.length', 1) .should('have.length', 1)
.click(); .click();
credentialsModal.getters.saveButton().click(); saveCredential();
credentialsModal.getters.saveButton().should('have.text', 'Saved');
credentialsModal.actions.close(); credentialsModal.actions.close();
projects.getProjectTabWorkflows().click(); projects.getProjectTabWorkflows().click();
@@ -252,8 +252,7 @@ describe('Sharing', { disableAutoLogin: true }, () => {
credentialsModal.actions.changeTab('Sharing'); credentialsModal.actions.changeTab('Sharing');
credentialsModal.getters.usersSelect().click(); credentialsModal.getters.usersSelect().click();
getVisibleSelect().find('li').should('have.length', 4).first().click(); getVisibleSelect().find('li').should('have.length', 4).first().click();
credentialsModal.getters.saveButton().click(); saveCredential();
credentialsModal.getters.saveButton().should('have.text', 'Saved');
credentialsModal.actions.close(); credentialsModal.actions.close();
credentialsPage.getters credentialsPage.getters

View File

@@ -1,5 +1,6 @@
import { type ICredentialType } from 'n8n-workflow'; import { type ICredentialType } from 'n8n-workflow';
import { getCredentialSaveButton, saveCredential } from '../composables/modals/credential-modal';
import { import {
AGENT_NODE_NAME, AGENT_NODE_NAME,
AI_TOOL_HTTP_NODE_NAME, AI_TOOL_HTTP_NODE_NAME,
@@ -194,7 +195,7 @@ describe('Credentials', () => {
credentialsModal.getters.credentialsEditModal().should('be.visible'); credentialsModal.getters.credentialsEditModal().should('be.visible');
credentialsModal.getters.name().click(); credentialsModal.getters.name().click();
credentialsModal.actions.renameCredential(NEW_CREDENTIAL_NAME); credentialsModal.actions.renameCredential(NEW_CREDENTIAL_NAME);
credentialsModal.getters.saveButton().click(); saveCredential();
credentialsModal.getters.closeButton().click(); credentialsModal.getters.closeButton().click();
workflowPage.getters workflowPage.getters
.nodeCredentialsSelect() .nodeCredentialsSelect()
@@ -212,7 +213,7 @@ describe('Credentials', () => {
credentialsModal.getters.credentialsEditModal().should('be.visible'); credentialsModal.getters.credentialsEditModal().should('be.visible');
credentialsModal.getters.name().click(); credentialsModal.getters.name().click();
credentialsModal.actions.renameCredential(NEW_CREDENTIAL_NAME2); credentialsModal.actions.renameCredential(NEW_CREDENTIAL_NAME2);
credentialsModal.getters.saveButton().click(); saveCredential();
credentialsModal.getters.closeButton().click(); credentialsModal.getters.closeButton().click();
workflowPage.getters workflowPage.getters
.nodeCredentialsSelect() .nodeCredentialsSelect()
@@ -237,7 +238,7 @@ describe('Credentials', () => {
credentialsModal.getters.credentialsEditModal().should('be.visible'); credentialsModal.getters.credentialsEditModal().should('be.visible');
credentialsModal.getters.name().click(); credentialsModal.getters.name().click();
credentialsModal.actions.renameCredential(NEW_CREDENTIAL_NAME); credentialsModal.actions.renameCredential(NEW_CREDENTIAL_NAME);
credentialsModal.getters.saveButton().click(); saveCredential();
credentialsModal.getters.closeButton().click(); credentialsModal.getters.closeButton().click();
workflowPage.getters workflowPage.getters
.nodeCredentialsSelect() .nodeCredentialsSelect()
@@ -342,7 +343,8 @@ describe('Credentials', () => {
credentialsModal.getters.connectionParameter('Internal Integration Secret').type('1234567890'); credentialsModal.getters.connectionParameter('Internal Integration Secret').type('1234567890');
credentialsModal.actions.setName('My awesome Notion account'); credentialsModal.actions.setName('My awesome Notion account');
credentialsModal.getters.saveButton().click({ force: true }); getCredentialSaveButton().click();
errorToast().should('have.length', 1); errorToast().should('have.length', 1);
errorToast().should('be.visible'); errorToast().should('be.visible');

View File

@@ -1,3 +1,4 @@
import { getCredentialSaveButton } from '../composables/modals/credential-modal';
import { CredentialsPage, CredentialsModal } from '../pages'; import { CredentialsPage, CredentialsModal } from '../pages';
const credentialsPage = new CredentialsPage(); const credentialsPage = new CredentialsPage();
@@ -40,7 +41,7 @@ describe('Credentials', () => {
}); });
// Check that the credential was saved and connected successfully // Check that the credential was saved and connected successfully
credentialsModal.getters.saveButton().should('contain.text', 'Saved'); getCredentialSaveButton().should('contain.text', 'Saved');
credentialsModal.getters.oauthConnectSuccessBanner().should('be.visible'); credentialsModal.getters.oauthConnectSuccessBanner().should('be.visible');
}); });
}); });

View File

@@ -1,3 +1,4 @@
import { getCredentialSaveButton, saveCredential } from '../../composables/modals/credential-modal';
import { getVisibleSelect } from '../../utils'; import { getVisibleSelect } from '../../utils';
import { BasePage } from '../base'; import { BasePage } from '../base';
@@ -13,8 +14,6 @@ export class CredentialsModal extends BasePage {
this.getters.credentialInputs().find(`:contains('${fieldName}') .n8n-input input`), this.getters.credentialInputs().find(`:contains('${fieldName}') .n8n-input input`),
name: () => cy.getByTestId('credential-name'), name: () => cy.getByTestId('credential-name'),
nameInput: () => cy.getByTestId('credential-name').find('input'), nameInput: () => cy.getByTestId('credential-name').find('input'),
// Saving of the credentials takes a while on the CI so we need to increase the timeout
saveButton: () => cy.getByTestId('credential-save-button', { timeout: 5000 }),
deleteButton: () => cy.getByTestId('credential-delete-button'), deleteButton: () => cy.getByTestId('credential-delete-button'),
closeButton: () => this.getters.editCredentialModal().find('.el-dialog__close').first(), closeButton: () => this.getters.editCredentialModal().find('.el-dialog__close').first(),
oauthConnectButton: () => cy.getByTestId('oauth-connect-button'), oauthConnectButton: () => cy.getByTestId('oauth-connect-button'),
@@ -41,17 +40,17 @@ export class CredentialsModal extends BasePage {
}, },
save: (test = false) => { save: (test = false) => {
cy.intercept('POST', '/rest/credentials').as('saveCredential'); cy.intercept('POST', '/rest/credentials').as('saveCredential');
this.getters.saveButton().click({ force: true }); saveCredential();
cy.wait('@saveCredential'); cy.wait('@saveCredential');
if (test) cy.wait('@testCredential'); if (test) cy.wait('@testCredential');
this.getters.saveButton().should('contain.text', 'Saved'); getCredentialSaveButton().should('contain.text', 'Saved');
}, },
saveSharing: () => { saveSharing: () => {
cy.intercept('PUT', '/rest/credentials/*/share').as('shareCredential'); cy.intercept('PUT', '/rest/credentials/*/share').as('shareCredential');
this.getters.saveButton().click({ force: true }); saveCredential();
cy.wait('@shareCredential'); cy.wait('@shareCredential');
this.getters.saveButton().should('contain.text', 'Saved'); getCredentialSaveButton().should('contain.text', 'Saved');
}, },
close: () => { close: () => {
this.getters.closeButton().click(); this.getters.closeButton().click();
@@ -65,7 +64,7 @@ export class CredentialsModal extends BasePage {
.each(($el) => { .each(($el) => {
cy.wrap($el).type('test'); cy.wrap($el).type('test');
}); });
this.getters.saveButton().click(); saveCredential();
if (closeModal) { if (closeModal) {
this.getters.closeButton().click(); this.getters.closeButton().click();
} }