test: Add tests for pinning data (#5157)
* test: add tests for pinning * test: add test for value * test: add pinned data tests * test: refactor into ndv * refactor: move to ndv * refactor: rename node * test: fix test * test: fix refactor * test: remove unused id * test: update test * test: chain rename input * test: refactor invoking text * test: fix ndv tests * test: move test id * test: update selectors
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
import { CODE_NODE_NAME, SET_NODE_NAME } from './../constants';
|
||||
import { SCHEDULE_TRIGGER_NODE_NAME } from '../constants';
|
||||
import { WorkflowPage as WorkflowPageClass } from '../pages/workflow';
|
||||
import { NDV } from '../pages/ndv';
|
||||
|
||||
// Suite-specific constants
|
||||
const CODE_NODE_NEW_NAME = 'Something else';
|
||||
|
||||
const WorkflowPage = new WorkflowPageClass();
|
||||
const ndv = new NDV();
|
||||
|
||||
describe('Undo/Redo', () => {
|
||||
beforeEach(() => {
|
||||
@@ -205,11 +207,7 @@ describe('Undo/Redo', () => {
|
||||
WorkflowPage.actions.addNodeToCanvas(CODE_NODE_NAME);
|
||||
WorkflowPage.getters.canvasNodes().last().click();
|
||||
cy.get('body').type('{enter}');
|
||||
WorkflowPage.getters.nodeNameContainerNDV().click();
|
||||
WorkflowPage.getters.nodeRenameInput().should('be.visible');
|
||||
WorkflowPage.getters.nodeRenameInput().type('{selectall}');
|
||||
WorkflowPage.getters.nodeRenameInput().type(CODE_NODE_NEW_NAME);
|
||||
cy.get('body').type('{enter}');
|
||||
ndv.actions.rename(CODE_NODE_NEW_NAME);
|
||||
cy.get('body').type('{esc}');
|
||||
WorkflowPage.actions.hitUndo();
|
||||
cy.get('body').type('{esc}');
|
||||
|
||||
@@ -12,7 +12,7 @@ describe('Inline expression editor', () => {
|
||||
WorkflowPage.actions.visit();
|
||||
WorkflowPage.actions.addInitialNodeToCanvas('Manual Trigger');
|
||||
WorkflowPage.actions.addNodeToCanvas('Hacker News');
|
||||
WorkflowPage.actions.openNodeNdv('Hacker News');
|
||||
WorkflowPage.actions.openNode('Hacker News');
|
||||
WorkflowPage.actions.openInlineExpressionEditor();
|
||||
});
|
||||
|
||||
|
||||
65
cypress/e2e/13-pinning.cy.ts
Normal file
65
cypress/e2e/13-pinning.cy.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import { WorkflowPage, NDV } from '../pages';
|
||||
|
||||
const workflowPage = new WorkflowPage();
|
||||
const ndv = new NDV();
|
||||
|
||||
describe('Data pinning', () => {
|
||||
beforeEach(() => {
|
||||
cy.resetAll();
|
||||
cy.skipSetup();
|
||||
workflowPage.actions.visit();
|
||||
cy.waitForLoad();
|
||||
});
|
||||
|
||||
it('Should be able to pin node output', () => {
|
||||
workflowPage.actions.addInitialNodeToCanvas('Schedule Trigger');
|
||||
workflowPage.getters.canvasNodes().first().dblclick();
|
||||
ndv.getters.container().should('be.visible');
|
||||
ndv.getters.pinDataButton().should('not.exist');
|
||||
ndv.getters.editPinnedDataButton().should('be.visible');
|
||||
|
||||
ndv.actions.execute();
|
||||
|
||||
ndv.getters.outputDataContainer().should('be.visible');
|
||||
ndv.getters.outputDataContainer().get('table').should('be.visible');
|
||||
ndv.getters.outputTableRows().should('have.length', 2);
|
||||
ndv.getters.outputTableHeaders().should('have.length.at.least', 10);
|
||||
ndv.getters.outputTableHeaders().first().should('include.text', 'timestamp');
|
||||
ndv.getters.outputTableHeaders().eq(1).should('include.text', 'Readable date');
|
||||
|
||||
ndv.getters.outputTbodyCell(1, 0).invoke('text').then((prevValue) => {
|
||||
ndv.actions.pinData();
|
||||
ndv.actions.close();
|
||||
|
||||
workflowPage.actions.executeWorkflow();
|
||||
workflowPage.actions.openNode('Schedule Trigger');
|
||||
|
||||
ndv.getters.outputTbodyCell(1, 0).invoke('text').should('eq', prevValue);
|
||||
});
|
||||
});
|
||||
|
||||
it('Should be be able to set pinned data', () => {
|
||||
workflowPage.actions.addInitialNodeToCanvas('Schedule Trigger');
|
||||
workflowPage.getters.canvasNodes().first().dblclick();
|
||||
ndv.getters.container().should('be.visible');
|
||||
ndv.getters.pinDataButton().should('not.exist');
|
||||
ndv.getters.editPinnedDataButton().should('be.visible');
|
||||
|
||||
ndv.actions.setPinnedData([{ test: 1 }]);
|
||||
|
||||
ndv.getters.outputTableRows().should('have.length', 2);
|
||||
ndv.getters.outputTableHeaders().should('have.length', 2);
|
||||
ndv.getters.outputTableHeaders().first().should('include.text', 'test');
|
||||
ndv.getters.outputTbodyCell(1, 0).should('include.text', 1);
|
||||
|
||||
ndv.actions.close();
|
||||
|
||||
workflowPage.actions.saveWorkflowOnButtonClick();
|
||||
|
||||
cy.reload();
|
||||
workflowPage.actions.openNode('Schedule Trigger');
|
||||
|
||||
ndv.getters.outputTableHeaders().first().should('include.text', 'test');
|
||||
ndv.getters.outputTbodyCell(1, 0).should('include.text', 1);
|
||||
});
|
||||
});
|
||||
@@ -26,7 +26,7 @@ describe('NDV', () => {
|
||||
workflowPage.actions.addInitialNodeToCanvas('Webhook');
|
||||
workflowPage.getters.canvasNodes().first().dblclick();
|
||||
|
||||
ndv.getters.nodeExecuteButton().first().click();
|
||||
ndv.actions.execute();
|
||||
ndv.getters.copyInput().click();
|
||||
|
||||
cy.grantBrowserPermissions('clipboardReadWrite', 'clipboardSanitizedWrite');
|
||||
@@ -49,9 +49,7 @@ describe('NDV', () => {
|
||||
workflowPage.getters.canvasNodes().last().dblclick();
|
||||
ndv.getters.inputSelect().click();
|
||||
ndv.getters.inputOption().last().click();
|
||||
ndv.getters.inputPanel().within(() => {
|
||||
ndv.getters.dataContainer().should('contain', 'start');
|
||||
});
|
||||
ndv.getters.inputDataContainer().should('contain', 'start');
|
||||
});
|
||||
|
||||
it('should show correct validation state for resource locator params', () => {
|
||||
@@ -61,7 +59,7 @@ describe('NDV', () => {
|
||||
cy.get('[class*=hasIssues]').should('have.length', 0);
|
||||
ndv.getters.backToCanvas().click();
|
||||
// Both credentials and resource locator errors should be visible
|
||||
workflowPage.actions.openNodeNdv('Typeform');
|
||||
workflowPage.actions.openNode('Typeform');
|
||||
cy.get('.has-issues').should('have.length', 1);
|
||||
cy.get('[class*=hasIssues]').should('have.length', 1);
|
||||
});
|
||||
@@ -71,11 +69,11 @@ describe('NDV', () => {
|
||||
workflowPage.actions.addNodeToCanvas('Airtable', true);
|
||||
ndv.getters.container().should('be.visible');
|
||||
cy.get('.has-issues').should('have.length', 0);
|
||||
workflowPage.getters.ndvParameterInput('table').find('input').eq(1).focus().blur()
|
||||
workflowPage.getters.ndvParameterInput('application').find('input').eq(1).focus().blur()
|
||||
ndv.getters.parameterInput('table').find('input').eq(1).focus().blur()
|
||||
ndv.getters.parameterInput('application').find('input').eq(1).focus().blur()
|
||||
cy.get('.has-issues').should('have.length', 2);
|
||||
ndv.getters.backToCanvas().click();
|
||||
workflowPage.actions.openNodeNdv('Airtable');
|
||||
workflowPage.actions.openNode('Airtable');
|
||||
cy.get('.has-issues').should('have.length', 3);
|
||||
cy.get('[class*=hasIssues]').should('have.length', 1);
|
||||
});
|
||||
@@ -84,7 +82,7 @@ describe('NDV', () => {
|
||||
cy.fixture('Test_workflow_ndv_errors.json').then((data) => {
|
||||
cy.get('body').paste(JSON.stringify(data));
|
||||
workflowPage.getters.canvasNodes().should('have.have.length', 1);
|
||||
workflowPage.actions.openNodeNdv('Airtable');
|
||||
workflowPage.actions.openNode('Airtable');
|
||||
cy.get('.has-issues').should('have.length', 3);
|
||||
cy.get('[class*=hasIssues]').should('have.length', 1);
|
||||
});
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { WorkflowPage as WorkflowPageClass } from '../pages/workflow';
|
||||
import { NDV } from '../pages/ndv';
|
||||
|
||||
const WorkflowPage = new WorkflowPageClass();
|
||||
const ndv = new NDV();
|
||||
|
||||
describe('Code node', () => {
|
||||
beforeEach(() => {
|
||||
@@ -12,9 +14,9 @@ describe('Code node', () => {
|
||||
WorkflowPage.actions.visit();
|
||||
WorkflowPage.actions.addInitialNodeToCanvas('Manual Trigger');
|
||||
WorkflowPage.actions.addNodeToCanvas('Code');
|
||||
WorkflowPage.actions.openNodeNdv('Code');
|
||||
WorkflowPage.actions.openNode('Code');
|
||||
|
||||
WorkflowPage.actions.executeNodeFromNdv();
|
||||
ndv.actions.execute();
|
||||
|
||||
WorkflowPage.getters.successToast().contains('Node executed successfully');
|
||||
});
|
||||
@@ -23,11 +25,11 @@ describe('Code node', () => {
|
||||
WorkflowPage.actions.visit();
|
||||
WorkflowPage.actions.addInitialNodeToCanvas('Manual Trigger');
|
||||
WorkflowPage.actions.addNodeToCanvas('Code');
|
||||
WorkflowPage.actions.openNodeNdv('Code');
|
||||
WorkflowPage.getters.ndvParameterInput('mode').click();
|
||||
WorkflowPage.actions.selectOptionInParameterDropdown('mode', 'Run Once for Each Item');
|
||||
WorkflowPage.actions.openNode('Code');
|
||||
ndv.getters.parameterInput('mode').click();
|
||||
ndv.actions.selectOptionInParameterDropdown('mode', 'Run Once for Each Item');
|
||||
|
||||
WorkflowPage.actions.executeNodeFromNdv();
|
||||
ndv.actions.execute();
|
||||
|
||||
WorkflowPage.getters.successToast().contains('Node executed successfully');
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { WorkflowsPage as WorkflowsPageClass } from '../pages/workflows';
|
||||
import { WorkflowPage as WorkflowPageClass } from '../pages/workflow';
|
||||
import { WorkflowPage, WorkflowsPage, NDV } from '../pages';
|
||||
|
||||
const WorkflowsPage = new WorkflowsPageClass();
|
||||
const WorkflowPage = new WorkflowPageClass();
|
||||
const workflowsPage = new WorkflowsPage();
|
||||
const workflowPage = new WorkflowPage();
|
||||
const ndv = new NDV()
|
||||
|
||||
describe('HTTP Request node', () => {
|
||||
before(() => {
|
||||
@@ -11,14 +11,14 @@ describe('HTTP Request node', () => {
|
||||
});
|
||||
|
||||
it('should make a request with a URL and receive a response', () => {
|
||||
WorkflowsPage.actions.createWorkflowFromCard();
|
||||
WorkflowPage.actions.addInitialNodeToCanvas('Manual Trigger');
|
||||
WorkflowPage.actions.addNodeToCanvas('HTTP Request');
|
||||
WorkflowPage.actions.openNodeNdv('HTTP Request');
|
||||
WorkflowPage.actions.typeIntoParameterInput('url', 'https://catfact.ninja/fact');
|
||||
workflowsPage.actions.createWorkflowFromCard();
|
||||
workflowPage.actions.addInitialNodeToCanvas('Manual Trigger');
|
||||
workflowPage.actions.addNodeToCanvas('HTTP Request');
|
||||
workflowPage.actions.openNode('HTTP Request');
|
||||
ndv.actions.typeIntoParameterInput('url', 'https://catfact.ninja/fact');
|
||||
|
||||
WorkflowPage.actions.executeNodeFromNdv();
|
||||
ndv.actions.execute();
|
||||
|
||||
WorkflowPage.getters.ndvOutputPanel().contains('fact');
|
||||
ndv.getters.outputPanel().contains('fact');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -12,7 +12,7 @@ describe('Expression editor modal', () => {
|
||||
WorkflowPage.actions.visit();
|
||||
WorkflowPage.actions.addInitialNodeToCanvas('Manual Trigger');
|
||||
WorkflowPage.actions.addNodeToCanvas('Hacker News');
|
||||
WorkflowPage.actions.openNodeNdv('Hacker News');
|
||||
WorkflowPage.actions.openNode('Hacker News');
|
||||
WorkflowPage.actions.openExpressionEditorModal();
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user