mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-30 06:59:41 -08:00
e3c363d72c
## Summary Fixes the bug when users leave the executions page but there is still an ongoing request for executions. --------- Co-authored-by: Alex Grozav <alex@grozav.com>
84 lines
3.2 KiB
TypeScript
84 lines
3.2 KiB
TypeScript
import { WorkflowPage } from '../pages';
|
|
import { WorkflowExecutionsTab } from '../pages/workflow-executions-tab';
|
|
import type { RouteHandler } from 'cypress/types/net-stubbing';
|
|
|
|
const workflowPage = new WorkflowPage();
|
|
const executionsTab = new WorkflowExecutionsTab();
|
|
const executionsRefreshInterval = 4000;
|
|
|
|
// Test suite for executions tab
|
|
describe('Current Workflow Executions', () => {
|
|
beforeEach(() => {
|
|
workflowPage.actions.visit();
|
|
cy.createFixtureWorkflow('Test_workflow_4_executions_view.json', `My test workflow`);
|
|
});
|
|
|
|
it('should render executions tab correctly', () => {
|
|
createMockExecutions();
|
|
cy.intercept('GET', '/rest/executions?filter=*').as('getExecutions');
|
|
cy.intercept('GET', '/rest/executions-current?filter=*').as('getCurrentExecutions');
|
|
|
|
executionsTab.actions.switchToExecutionsTab();
|
|
|
|
cy.wait(['@getExecutions', '@getCurrentExecutions']);
|
|
|
|
executionsTab.getters.executionListItems().should('have.length', 11);
|
|
executionsTab.getters.successfulExecutionListItems().should('have.length', 9);
|
|
executionsTab.getters.failedExecutionListItems().should('have.length', 2);
|
|
executionsTab.getters
|
|
.executionListItems()
|
|
.first()
|
|
.invoke('attr', 'class')
|
|
.should('match', /_active_/);
|
|
});
|
|
|
|
it('should not redirect back to execution tab when request is not done before leaving the page', () => {
|
|
cy.intercept('GET', '/rest/executions?filter=*');
|
|
cy.intercept('GET', '/rest/executions-current?filter=*');
|
|
|
|
executionsTab.actions.switchToExecutionsTab();
|
|
executionsTab.actions.switchToEditorTab();
|
|
cy.wait(executionsRefreshInterval);
|
|
cy.url().should('not.include', '/executions');
|
|
executionsTab.actions.switchToExecutionsTab();
|
|
executionsTab.actions.switchToEditorTab();
|
|
executionsTab.actions.switchToExecutionsTab();
|
|
executionsTab.actions.switchToEditorTab();
|
|
executionsTab.actions.switchToExecutionsTab();
|
|
executionsTab.actions.switchToEditorTab();
|
|
cy.wait(executionsRefreshInterval);
|
|
cy.url().should('not.include', '/executions');
|
|
executionsTab.actions.switchToExecutionsTab();
|
|
cy.wait(1000);
|
|
executionsTab.actions.switchToEditorTab();
|
|
cy.wait(executionsRefreshInterval);
|
|
cy.url().should('not.include', '/executions');
|
|
});
|
|
|
|
it('should not redirect back to execution tab when slow request is not done before leaving the page', () => {
|
|
const throttleResponse: RouteHandler = (req) => {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => resolve(req.continue()), 2000);
|
|
});
|
|
};
|
|
|
|
cy.intercept('GET', '/rest/executions?filter=*', throttleResponse);
|
|
cy.intercept('GET', '/rest/executions-current?filter=*', throttleResponse);
|
|
|
|
executionsTab.actions.switchToExecutionsTab();
|
|
executionsTab.actions.switchToEditorTab();
|
|
cy.wait(executionsRefreshInterval);
|
|
cy.url().should('not.include', '/executions');
|
|
});
|
|
});
|
|
|
|
const createMockExecutions = () => {
|
|
executionsTab.actions.createManualExecutions(5);
|
|
// Make some failed executions by enabling Code node with syntax error
|
|
executionsTab.actions.toggleNodeEnabled('Error');
|
|
executionsTab.actions.createManualExecutions(2);
|
|
// Then add some more successful ones
|
|
executionsTab.actions.toggleNodeEnabled('Error');
|
|
executionsTab.actions.createManualExecutions(4);
|
|
};
|