mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-24 20:24:05 -08:00
test: Use nanoid instead of UUID in e2e tests for wf names (no-changelog) (#9717)
This commit is contained in:
parent
a9179896f6
commit
58f00bbacd
|
@ -1,6 +1,6 @@
|
||||||
import { v4 as uuid } from 'uuid';
|
|
||||||
import { WorkflowsPage as WorkflowsPageClass } from '../pages/workflows';
|
import { WorkflowsPage as WorkflowsPageClass } from '../pages/workflows';
|
||||||
import { WorkflowPage as WorkflowPageClass } from '../pages/workflow';
|
import { WorkflowPage as WorkflowPageClass } from '../pages/workflow';
|
||||||
|
import { getUniqueWorkflowName } from '../utils/workflowUtils';
|
||||||
|
|
||||||
const WorkflowsPage = new WorkflowsPageClass();
|
const WorkflowsPage = new WorkflowsPageClass();
|
||||||
const WorkflowPage = new WorkflowPageClass();
|
const WorkflowPage = new WorkflowPageClass();
|
||||||
|
@ -16,7 +16,7 @@ describe('Workflows', () => {
|
||||||
WorkflowsPage.getters.newWorkflowButtonCard().should('be.visible');
|
WorkflowsPage.getters.newWorkflowButtonCard().should('be.visible');
|
||||||
WorkflowsPage.getters.newWorkflowButtonCard().click();
|
WorkflowsPage.getters.newWorkflowButtonCard().click();
|
||||||
|
|
||||||
cy.createFixtureWorkflow('Test_workflow_1.json', `Empty State Card Workflow ${uuid()}`);
|
cy.createFixtureWorkflow('Test_workflow_1.json', 'Empty State Card Workflow');
|
||||||
|
|
||||||
WorkflowPage.getters.workflowTags().should('contain.text', 'some-tag-1');
|
WorkflowPage.getters.workflowTags().should('contain.text', 'some-tag-1');
|
||||||
WorkflowPage.getters.workflowTags().should('contain.text', 'some-tag-2');
|
WorkflowPage.getters.workflowTags().should('contain.text', 'some-tag-2');
|
||||||
|
@ -27,7 +27,7 @@ describe('Workflows', () => {
|
||||||
cy.visit(WorkflowsPage.url);
|
cy.visit(WorkflowsPage.url);
|
||||||
WorkflowsPage.getters.createWorkflowButton().click();
|
WorkflowsPage.getters.createWorkflowButton().click();
|
||||||
|
|
||||||
cy.createFixtureWorkflow('Test_workflow_2.json', `My New Workflow ${uuid()}`);
|
cy.createFixtureWorkflow('Test_workflow_2.json', getUniqueWorkflowName('My New Workflow'));
|
||||||
|
|
||||||
WorkflowPage.getters.workflowTags().should('contain.text', 'other-tag-1');
|
WorkflowPage.getters.workflowTags().should('contain.text', 'other-tag-1');
|
||||||
WorkflowPage.getters.workflowTags().should('contain.text', 'other-tag-2');
|
WorkflowPage.getters.workflowTags().should('contain.text', 'other-tag-2');
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import { v4 as uuid } from 'uuid';
|
|
||||||
import { NDV, WorkflowPage as WorkflowPageClass } from '../pages';
|
import { NDV, WorkflowPage as WorkflowPageClass } from '../pages';
|
||||||
import { successToast } from '../pages/notifications';
|
import { successToast } from '../pages/notifications';
|
||||||
|
|
||||||
|
@ -11,7 +10,7 @@ describe('ADO-1338-ndv-missing-input-panel', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show the input and output panels when node is missing input and output data', () => {
|
it('should show the input and output panels when node is missing input and output data', () => {
|
||||||
cy.createFixtureWorkflow('Test_ado_1338.json', uuid());
|
cy.createFixtureWorkflow('Test_ado_1338.json');
|
||||||
|
|
||||||
// Execute the workflow
|
// Execute the workflow
|
||||||
workflowPage.getters.zoomToFitButton().click();
|
workflowPage.getters.zoomToFitButton().click();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { v4 as uuid } from 'uuid';
|
import { nanoid } from 'nanoid';
|
||||||
import { WorkflowPage, NDV, CredentialsModal } from '../pages';
|
import { WorkflowPage, NDV, CredentialsModal } from '../pages';
|
||||||
import { cowBase64 } from '../support/binaryTestFiles';
|
import { cowBase64 } from '../support/binaryTestFiles';
|
||||||
import { BACKEND_BASE_URL, EDIT_FIELDS_SET_NODE_NAME } from '../constants';
|
import { BACKEND_BASE_URL, EDIT_FIELDS_SET_NODE_NAME } from '../constants';
|
||||||
|
@ -81,28 +81,28 @@ describe('Webhook Trigger node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request', () => {
|
it('should listen for a GET request', () => {
|
||||||
simpleWebhookCall({ method: 'GET', webhookPath: uuid(), executeNow: true });
|
simpleWebhookCall({ method: 'GET', webhookPath: nanoid(), executeNow: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a POST request', () => {
|
it('should listen for a POST request', () => {
|
||||||
simpleWebhookCall({ method: 'POST', webhookPath: uuid(), executeNow: true });
|
simpleWebhookCall({ method: 'POST', webhookPath: nanoid(), executeNow: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a DELETE request', () => {
|
it('should listen for a DELETE request', () => {
|
||||||
simpleWebhookCall({ method: 'DELETE', webhookPath: uuid(), executeNow: true });
|
simpleWebhookCall({ method: 'DELETE', webhookPath: nanoid(), executeNow: true });
|
||||||
});
|
});
|
||||||
it('should listen for a HEAD request', () => {
|
it('should listen for a HEAD request', () => {
|
||||||
simpleWebhookCall({ method: 'HEAD', webhookPath: uuid(), executeNow: true });
|
simpleWebhookCall({ method: 'HEAD', webhookPath: nanoid(), executeNow: true });
|
||||||
});
|
});
|
||||||
it('should listen for a PATCH request', () => {
|
it('should listen for a PATCH request', () => {
|
||||||
simpleWebhookCall({ method: 'PATCH', webhookPath: uuid(), executeNow: true });
|
simpleWebhookCall({ method: 'PATCH', webhookPath: nanoid(), executeNow: true });
|
||||||
});
|
});
|
||||||
it('should listen for a PUT request', () => {
|
it('should listen for a PUT request', () => {
|
||||||
simpleWebhookCall({ method: 'PUT', webhookPath: uuid(), executeNow: true });
|
simpleWebhookCall({ method: 'PUT', webhookPath: nanoid(), executeNow: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request and respond with Respond to Webhook node', () => {
|
it('should listen for a GET request and respond with Respond to Webhook node', () => {
|
||||||
const webhookPath = uuid();
|
const webhookPath = nanoid();
|
||||||
simpleWebhookCall({
|
simpleWebhookCall({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
webhookPath,
|
webhookPath,
|
||||||
|
@ -130,7 +130,7 @@ describe('Webhook Trigger node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request and respond custom status code 201', () => {
|
it('should listen for a GET request and respond custom status code 201', () => {
|
||||||
const webhookPath = uuid();
|
const webhookPath = nanoid();
|
||||||
simpleWebhookCall({
|
simpleWebhookCall({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
webhookPath,
|
webhookPath,
|
||||||
|
@ -147,7 +147,7 @@ describe('Webhook Trigger node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request and respond with last node', () => {
|
it('should listen for a GET request and respond with last node', () => {
|
||||||
const webhookPath = uuid();
|
const webhookPath = nanoid();
|
||||||
simpleWebhookCall({
|
simpleWebhookCall({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
webhookPath,
|
webhookPath,
|
||||||
|
@ -172,7 +172,7 @@ describe('Webhook Trigger node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request and respond with last node binary data', () => {
|
it('should listen for a GET request and respond with last node binary data', () => {
|
||||||
const webhookPath = uuid();
|
const webhookPath = nanoid();
|
||||||
simpleWebhookCall({
|
simpleWebhookCall({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
webhookPath,
|
webhookPath,
|
||||||
|
@ -213,7 +213,7 @@ describe('Webhook Trigger node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request and respond with an empty body', () => {
|
it('should listen for a GET request and respond with an empty body', () => {
|
||||||
const webhookPath = uuid();
|
const webhookPath = nanoid();
|
||||||
simpleWebhookCall({
|
simpleWebhookCall({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
webhookPath,
|
webhookPath,
|
||||||
|
@ -232,7 +232,7 @@ describe('Webhook Trigger node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request with Basic Authentication', () => {
|
it('should listen for a GET request with Basic Authentication', () => {
|
||||||
const webhookPath = uuid();
|
const webhookPath = nanoid();
|
||||||
simpleWebhookCall({
|
simpleWebhookCall({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
webhookPath,
|
webhookPath,
|
||||||
|
@ -275,7 +275,7 @@ describe('Webhook Trigger node', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should listen for a GET request with Header Authentication', () => {
|
it('should listen for a GET request with Header Authentication', () => {
|
||||||
const webhookPath = uuid();
|
const webhookPath = nanoid();
|
||||||
simpleWebhookCall({
|
simpleWebhookCall({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
webhookPath,
|
webhookPath,
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import { v4 as uuid } from 'uuid';
|
|
||||||
import { NDV, WorkflowExecutionsTab, WorkflowPage as WorkflowPageClass } from '../pages';
|
import { NDV, WorkflowExecutionsTab, WorkflowPage as WorkflowPageClass } from '../pages';
|
||||||
import { SCHEDULE_TRIGGER_NODE_NAME, EDIT_FIELDS_SET_NODE_NAME } from '../constants';
|
import { SCHEDULE_TRIGGER_NODE_NAME, EDIT_FIELDS_SET_NODE_NAME } from '../constants';
|
||||||
import { errorToast, successToast } from '../pages/notifications';
|
import { errorToast, successToast } from '../pages/notifications';
|
||||||
|
@ -13,7 +12,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should test manual workflow', () => {
|
it('should test manual workflow', () => {
|
||||||
cy.createFixtureWorkflow('Manual_wait_set.json', `Manual wait set ${uuid()}`);
|
cy.createFixtureWorkflow('Manual_wait_set.json');
|
||||||
|
|
||||||
// Check workflow buttons
|
// Check workflow buttons
|
||||||
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
||||||
|
@ -73,7 +72,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should test manual workflow stop', () => {
|
it('should test manual workflow stop', () => {
|
||||||
cy.createFixtureWorkflow('Manual_wait_set.json', `Manual wait set ${uuid()}`);
|
cy.createFixtureWorkflow('Manual_wait_set.json');
|
||||||
|
|
||||||
// Check workflow buttons
|
// Check workflow buttons
|
||||||
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
||||||
|
@ -132,7 +131,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should test webhook workflow', () => {
|
it('should test webhook workflow', () => {
|
||||||
cy.createFixtureWorkflow('Webhook_wait_set.json', `Webhook wait set ${uuid()}`);
|
cy.createFixtureWorkflow('Webhook_wait_set.json');
|
||||||
|
|
||||||
// Check workflow buttons
|
// Check workflow buttons
|
||||||
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
||||||
|
@ -205,7 +204,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should test webhook workflow stop', () => {
|
it('should test webhook workflow stop', () => {
|
||||||
cy.createFixtureWorkflow('Webhook_wait_set.json', `Webhook wait set ${uuid()}`);
|
cy.createFixtureWorkflow('Webhook_wait_set.json');
|
||||||
|
|
||||||
// Check workflow buttons
|
// Check workflow buttons
|
||||||
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
workflowPage.getters.executeWorkflowButton().should('be.visible');
|
||||||
|
@ -293,7 +292,7 @@ describe('Execution', () => {
|
||||||
|
|
||||||
describe('connections should be colored differently for pinned data', () => {
|
describe('connections should be colored differently for pinned data', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.createFixtureWorkflow('Schedule_pinned.json', `Schedule pinned ${uuid()}`);
|
cy.createFixtureWorkflow('Schedule_pinned.json');
|
||||||
workflowPage.actions.deselectAll();
|
workflowPage.actions.deselectAll();
|
||||||
workflowPage.getters.zoomToFitButton().click();
|
workflowPage.getters.zoomToFitButton().click();
|
||||||
|
|
||||||
|
@ -492,10 +491,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send proper payload for node rerun', () => {
|
it('should send proper payload for node rerun', () => {
|
||||||
cy.createFixtureWorkflow(
|
cy.createFixtureWorkflow('Multiple_trigger_node_rerun.json', 'Multiple trigger node rerun');
|
||||||
'Multiple_trigger_node_rerun.json',
|
|
||||||
`Multiple trigger node rerun ${uuid()}`,
|
|
||||||
);
|
|
||||||
|
|
||||||
workflowPage.getters.zoomToFitButton().click();
|
workflowPage.getters.zoomToFitButton().click();
|
||||||
workflowPage.getters.executeWorkflowButton().click();
|
workflowPage.getters.executeWorkflowButton().click();
|
||||||
|
@ -520,10 +516,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send proper payload for manual node run', () => {
|
it('should send proper payload for manual node run', () => {
|
||||||
cy.createFixtureWorkflow(
|
cy.createFixtureWorkflow('Check_manual_node_run_for_pinned_and_rundata.json');
|
||||||
'Check_manual_node_run_for_pinned_and_rundata.json',
|
|
||||||
`Check manual node run for pinned and rundata ${uuid()}`,
|
|
||||||
);
|
|
||||||
|
|
||||||
workflowPage.getters.zoomToFitButton().click();
|
workflowPage.getters.zoomToFitButton().click();
|
||||||
|
|
||||||
|
@ -576,10 +569,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should successfully execute partial executions with nodes attached to the second output', () => {
|
it('should successfully execute partial executions with nodes attached to the second output', () => {
|
||||||
cy.createFixtureWorkflow(
|
cy.createFixtureWorkflow('Test_Workflow_pairedItem_incomplete_manual_bug.json');
|
||||||
'Test_Workflow_pairedItem_incomplete_manual_bug.json',
|
|
||||||
'My test workflow',
|
|
||||||
);
|
|
||||||
|
|
||||||
cy.intercept('POST', '/rest/workflows/**/run').as('workflowRun');
|
cy.intercept('POST', '/rest/workflows/**/run').as('workflowRun');
|
||||||
|
|
||||||
|
@ -599,10 +589,7 @@ describe('Execution', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should execute workflow partially up to the node that has issues', () => {
|
it('should execute workflow partially up to the node that has issues', () => {
|
||||||
cy.createFixtureWorkflow(
|
cy.createFixtureWorkflow('Test_workflow_partial_execution_with_missing_credentials.json');
|
||||||
'Test_workflow_partial_execution_with_missing_credentials.json',
|
|
||||||
'My test workflow',
|
|
||||||
);
|
|
||||||
|
|
||||||
cy.intercept('POST', '/rest/workflows/**/run').as('workflowRun');
|
cy.intercept('POST', '/rest/workflows/**/run').as('workflowRun');
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import { v4 as uuid } from 'uuid';
|
|
||||||
import { WorkflowExecutionsTab, WorkflowPage as WorkflowPageClass } from '../pages';
|
import { WorkflowExecutionsTab, WorkflowPage as WorkflowPageClass } from '../pages';
|
||||||
import { BACKEND_BASE_URL } from '../constants';
|
import { BACKEND_BASE_URL } from '../constants';
|
||||||
|
|
||||||
|
@ -11,7 +10,7 @@ describe('ADO-2106 connections should be colored correctly for pinned data in ex
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.createFixtureWorkflow('Webhook_set_pinned.json', `Webhook set pinned ${uuid()}`);
|
cy.createFixtureWorkflow('Webhook_set_pinned.json');
|
||||||
workflowPage.actions.deselectAll();
|
workflowPage.actions.deselectAll();
|
||||||
workflowPage.getters.zoomToFitButton().click();
|
workflowPage.getters.zoomToFitButton().click();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import { v4 as uuid } from 'uuid';
|
|
||||||
import { WorkflowPage, NDV } from '../pages';
|
import { WorkflowPage, NDV } from '../pages';
|
||||||
|
|
||||||
const workflowPage = new WorkflowPage();
|
const workflowPage = new WorkflowPage();
|
||||||
|
@ -7,7 +6,7 @@ const ndv = new NDV();
|
||||||
describe('NDV', () => {
|
describe('NDV', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
workflowPage.actions.visit();
|
workflowPage.actions.visit();
|
||||||
workflowPage.actions.renameWorkflow(uuid());
|
workflowPage.actions.renameWithUniqueName();
|
||||||
workflowPage.actions.saveWorkflowOnButtonClick();
|
workflowPage.actions.saveWorkflowOnButtonClick();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import { v4 as uuid } from 'uuid';
|
|
||||||
import { getVisibleSelect } from '../utils';
|
import { getVisibleSelect } from '../utils';
|
||||||
import { MANUAL_TRIGGER_NODE_DISPLAY_NAME } from '../constants';
|
import { MANUAL_TRIGGER_NODE_DISPLAY_NAME } from '../constants';
|
||||||
import { NDV, WorkflowPage } from '../pages';
|
import { NDV, WorkflowPage } from '../pages';
|
||||||
|
@ -13,7 +12,7 @@ const ndv = new NDV();
|
||||||
describe('NDV', () => {
|
describe('NDV', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
workflowPage.actions.visit();
|
workflowPage.actions.visit();
|
||||||
workflowPage.actions.renameWorkflow(uuid());
|
workflowPage.actions.renameWithUniqueName();
|
||||||
workflowPage.actions.saveWorkflowOnButtonClick();
|
workflowPage.actions.saveWorkflowOnButtonClick();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -55,7 +54,7 @@ describe('NDV', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should change input and go back to canvas', () => {
|
it('should change input and go back to canvas', () => {
|
||||||
cy.createFixtureWorkflow('NDV-test-select-input.json', `NDV test select input ${uuid()}`);
|
cy.createFixtureWorkflow('NDV-test-select-input.json', 'NDV test select input');
|
||||||
workflowPage.actions.zoomToFit();
|
workflowPage.actions.zoomToFit();
|
||||||
workflowPage.getters.canvasNodes().last().dblclick();
|
workflowPage.getters.canvasNodes().last().dblclick();
|
||||||
ndv.getters.inputSelect().click();
|
ndv.getters.inputSelect().click();
|
||||||
|
@ -157,7 +156,7 @@ describe('NDV', () => {
|
||||||
'prop2',
|
'prop2',
|
||||||
];
|
];
|
||||||
function setupSchemaWorkflow() {
|
function setupSchemaWorkflow() {
|
||||||
cy.createFixtureWorkflow('Test_workflow_schema_test.json', `NDV test schema view ${uuid()}`);
|
cy.createFixtureWorkflow('Test_workflow_schema_test.json');
|
||||||
workflowPage.actions.zoomToFit();
|
workflowPage.actions.zoomToFit();
|
||||||
workflowPage.actions.openNode('Set');
|
workflowPage.actions.openNode('Set');
|
||||||
ndv.actions.execute();
|
ndv.actions.execute();
|
||||||
|
@ -231,7 +230,7 @@ describe('NDV', () => {
|
||||||
it('should display large schema', () => {
|
it('should display large schema', () => {
|
||||||
cy.createFixtureWorkflow(
|
cy.createFixtureWorkflow(
|
||||||
'Test_workflow_schema_test_pinned_data.json',
|
'Test_workflow_schema_test_pinned_data.json',
|
||||||
`NDV test schema view ${uuid()}`,
|
'NDV test schema view 2',
|
||||||
);
|
);
|
||||||
workflowPage.actions.zoomToFit();
|
workflowPage.actions.zoomToFit();
|
||||||
workflowPage.actions.openNode('Set');
|
workflowPage.actions.openNode('Set');
|
||||||
|
@ -306,7 +305,7 @@ describe('NDV', () => {
|
||||||
it('should display parameter hints correctly', () => {
|
it('should display parameter hints correctly', () => {
|
||||||
workflowPage.actions.visit();
|
workflowPage.actions.visit();
|
||||||
|
|
||||||
cy.createFixtureWorkflow('Test_workflow_3.json', 'My test workflow');
|
cy.createFixtureWorkflow('Test_workflow_3.json', 'My test workflow 1');
|
||||||
workflowPage.actions.openNode('Set1');
|
workflowPage.actions.openNode('Set1');
|
||||||
|
|
||||||
ndv.actions.typeIntoParameterInput('value', '='); // switch to expressions
|
ndv.actions.typeIntoParameterInput('value', '='); // switch to expressions
|
||||||
|
@ -574,7 +573,7 @@ describe('NDV', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show node name and version in settings', () => {
|
it('should show node name and version in settings', () => {
|
||||||
cy.createFixtureWorkflow('Test_workflow_ndv_version.json', `NDV test version ${uuid()}`);
|
cy.createFixtureWorkflow('Test_workflow_ndv_version.json', 'NDV test version');
|
||||||
|
|
||||||
workflowPage.actions.openNode('Edit Fields (old)');
|
workflowPage.actions.openNode('Edit Fields (old)');
|
||||||
ndv.actions.openSettings();
|
ndv.actions.openSettings();
|
||||||
|
@ -711,7 +710,7 @@ describe('NDV', () => {
|
||||||
};
|
};
|
||||||
cy.createFixtureWorkflow(
|
cy.createFixtureWorkflow(
|
||||||
'open_node_creator_for_connection.json',
|
'open_node_creator_for_connection.json',
|
||||||
`open_node_creator_for_connection ${uuid()}`,
|
'open_node_creator_for_connection',
|
||||||
);
|
);
|
||||||
|
|
||||||
Object.entries(hintMapper).forEach(([node, group]) => {
|
Object.entries(hintMapper).forEach(([node, group]) => {
|
||||||
|
@ -742,7 +741,7 @@ describe('NDV', () => {
|
||||||
it('should allow selecting item for expressions', () => {
|
it('should allow selecting item for expressions', () => {
|
||||||
workflowPage.actions.visit();
|
workflowPage.actions.visit();
|
||||||
|
|
||||||
cy.createFixtureWorkflow('Test_workflow_3.json', 'My test workflow');
|
cy.createFixtureWorkflow('Test_workflow_3.json', 'My test workflow 2');
|
||||||
workflowPage.actions.openNode('Set');
|
workflowPage.actions.openNode('Set');
|
||||||
|
|
||||||
ndv.actions.typeIntoParameterInput('value', '='); // switch to expressions
|
ndv.actions.typeIntoParameterInput('value', '='); // switch to expressions
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/lodash": "^4.14.195",
|
"@types/lodash": "^4.14.195",
|
||||||
"@types/uuid": "^8.3.2",
|
|
||||||
"eslint-plugin-cypress": "^3.3.0",
|
"eslint-plugin-cypress": "^3.3.0",
|
||||||
"n8n-workflow": "workspace:*"
|
"n8n-workflow": "workspace:*"
|
||||||
},
|
},
|
||||||
|
@ -26,7 +25,7 @@
|
||||||
"cypress-otp": "^1.0.3",
|
"cypress-otp": "^1.0.3",
|
||||||
"cypress-real-events": "^1.12.0",
|
"cypress-real-events": "^1.12.0",
|
||||||
"lodash": "4.17.21",
|
"lodash": "4.17.21",
|
||||||
"start-server-and-test": "^2.0.3",
|
"nanoid": "3.3.6",
|
||||||
"uuid": "8.3.2"
|
"start-server-and-test": "^2.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { META_KEY } from '../constants';
|
import { META_KEY } from '../constants';
|
||||||
import { getVisibleSelect } from '../utils';
|
import { getVisibleSelect } from '../utils';
|
||||||
|
import { getUniqueWorkflowName } from '../utils/workflowUtils';
|
||||||
import { BasePage } from './base';
|
import { BasePage } from './base';
|
||||||
import { NodeCreator } from './features/node-creator';
|
import { NodeCreator } from './features/node-creator';
|
||||||
|
|
||||||
|
@ -311,6 +312,9 @@ export class WorkflowPage extends BasePage {
|
||||||
cy.get('body').type(newName);
|
cy.get('body').type(newName);
|
||||||
cy.get('body').type('{enter}');
|
cy.get('body').type('{enter}');
|
||||||
},
|
},
|
||||||
|
renameWithUniqueName: () => {
|
||||||
|
this.actions.renameWorkflow(getUniqueWorkflowName());
|
||||||
|
},
|
||||||
addTags: (tags: string | string[]) => {
|
addTags: (tags: string | string[]) => {
|
||||||
if (!Array.isArray(tags)) tags = [tags];
|
if (!Array.isArray(tags)) tags = [tags];
|
||||||
|
|
||||||
|
|
|
@ -59,10 +59,13 @@ switch (scenario) {
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'all':
|
case 'all':
|
||||||
|
const specSuiteFilter = process.argv[3];
|
||||||
|
const specParam = specSuiteFilter ? ` --spec **/*${specSuiteFilter}*` : '';
|
||||||
|
|
||||||
runTests({
|
runTests({
|
||||||
startCommand: 'start',
|
startCommand: 'start',
|
||||||
url: 'http://localhost:5678/favicon.ico',
|
url: 'http://localhost:5678/favicon.ico',
|
||||||
testCommand: 'cypress run --headless',
|
testCommand: `cypress run --headless ${specParam}`,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -9,6 +9,7 @@ import {
|
||||||
INSTANCE_OWNER,
|
INSTANCE_OWNER,
|
||||||
N8N_AUTH_COOKIE,
|
N8N_AUTH_COOKIE,
|
||||||
} from '../constants';
|
} from '../constants';
|
||||||
|
import { getUniqueWorkflowName } from '../utils/workflowUtils';
|
||||||
|
|
||||||
Cypress.Commands.add('setAppDate', (targetDate: number | Date) => {
|
Cypress.Commands.add('setAppDate', (targetDate: number | Date) => {
|
||||||
cy.window().then((win) => {
|
cy.window().then((win) => {
|
||||||
|
@ -24,17 +25,22 @@ Cypress.Commands.add('getByTestId', (selector, ...args) => {
|
||||||
return cy.get(`[data-test-id="${selector}"]`, ...args);
|
return cy.get(`[data-test-id="${selector}"]`, ...args);
|
||||||
});
|
});
|
||||||
|
|
||||||
Cypress.Commands.add('createFixtureWorkflow', (fixtureKey, workflowName) => {
|
Cypress.Commands.add(
|
||||||
|
'createFixtureWorkflow',
|
||||||
|
(fixtureKey: string, workflowName = getUniqueWorkflowName()) => {
|
||||||
const workflowPage = new WorkflowPage();
|
const workflowPage = new WorkflowPage();
|
||||||
|
|
||||||
// We need to force the click because the input is hidden
|
// We need to force the click because the input is hidden
|
||||||
workflowPage.getters.workflowImportInput().selectFile(`fixtures/${fixtureKey}`, { force: true });
|
workflowPage.getters
|
||||||
|
.workflowImportInput()
|
||||||
|
.selectFile(`fixtures/${fixtureKey}`, { force: true });
|
||||||
|
|
||||||
cy.waitForLoad(false);
|
cy.waitForLoad(false);
|
||||||
workflowPage.actions.setWorkflowName(workflowName);
|
workflowPage.actions.setWorkflowName(workflowName);
|
||||||
workflowPage.getters.saveButton().should('contain', 'Saved');
|
workflowPage.getters.saveButton().should('contain', 'Saved');
|
||||||
workflowPage.actions.zoomToFit();
|
workflowPage.actions.zoomToFit();
|
||||||
});
|
},
|
||||||
|
);
|
||||||
|
|
||||||
Cypress.Commands.add(
|
Cypress.Commands.add(
|
||||||
'findChildByTestId',
|
'findChildByTestId',
|
||||||
|
|
|
@ -25,7 +25,13 @@ declare global {
|
||||||
...args: Array<Partial<Loggable & Timeoutable & Withinable & Shadow> | undefined>
|
...args: Array<Partial<Loggable & Timeoutable & Withinable & Shadow> | undefined>
|
||||||
): Chainable<JQuery<HTMLElement>>;
|
): Chainable<JQuery<HTMLElement>>;
|
||||||
findChildByTestId(childTestId: string): Chainable<JQuery<HTMLElement>>;
|
findChildByTestId(childTestId: string): Chainable<JQuery<HTMLElement>>;
|
||||||
createFixtureWorkflow(fixtureKey: string, workflowName: string): void;
|
/**
|
||||||
|
* Creates a workflow from the given fixture and optionally renames it.
|
||||||
|
*
|
||||||
|
* @param fixtureKey
|
||||||
|
* @param [workflowName] Optional name for the workflow. A random nanoid is used if not given
|
||||||
|
*/
|
||||||
|
createFixtureWorkflow(fixtureKey: string, workflowName?: string): void;
|
||||||
/** @deprecated */
|
/** @deprecated */
|
||||||
signin(payload: SigninPayload): void;
|
signin(payload: SigninPayload): void;
|
||||||
signinAsOwner(): void;
|
signinAsOwner(): void;
|
||||||
|
|
5
cypress/utils/workflowUtils.ts
Normal file
5
cypress/utils/workflowUtils.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import { nanoid } from 'nanoid';
|
||||||
|
|
||||||
|
export function getUniqueWorkflowName(workflowNamePrefix?: string) {
|
||||||
|
return workflowNamePrefix ? `${workflowNamePrefix} ${nanoid(12)}` : nanoid(12);
|
||||||
|
}
|
|
@ -140,19 +140,16 @@ importers:
|
||||||
lodash:
|
lodash:
|
||||||
specifier: 4.17.21
|
specifier: 4.17.21
|
||||||
version: 4.17.21
|
version: 4.17.21
|
||||||
|
nanoid:
|
||||||
|
specifier: 3.3.6
|
||||||
|
version: 3.3.6
|
||||||
start-server-and-test:
|
start-server-and-test:
|
||||||
specifier: ^2.0.3
|
specifier: ^2.0.3
|
||||||
version: 2.0.3
|
version: 2.0.3
|
||||||
uuid:
|
|
||||||
specifier: 8.3.2
|
|
||||||
version: 8.3.2
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@types/lodash':
|
'@types/lodash':
|
||||||
specifier: ^4.14.195
|
specifier: ^4.14.195
|
||||||
version: 4.14.195
|
version: 4.14.195
|
||||||
'@types/uuid':
|
|
||||||
specifier: ^8.3.2
|
|
||||||
version: 8.3.4
|
|
||||||
eslint-plugin-cypress:
|
eslint-plugin-cypress:
|
||||||
specifier: ^3.3.0
|
specifier: ^3.3.0
|
||||||
version: 3.3.0(eslint@8.57.0)
|
version: 3.3.0(eslint@8.57.0)
|
||||||
|
|
Loading…
Reference in a new issue