diff --git a/cypress/e2e/11-inline-expression-editor.cy.ts b/cypress/e2e/11-inline-expression-editor.cy.ts new file mode 100644 index 0000000000..ebb270ab66 --- /dev/null +++ b/cypress/e2e/11-inline-expression-editor.cy.ts @@ -0,0 +1,66 @@ +import { WorkflowPage as WorkflowPageClass } from '../pages/workflow'; + +const WorkflowPage = new WorkflowPageClass(); + +describe('Inline expression editor', () => { + before(() => { + cy.task('reset'); + cy.skipSetup(); + }); + + beforeEach(() => { + WorkflowPage.actions.visit(); + WorkflowPage.actions.addInitialNodeToCanvas('Manual Trigger'); + WorkflowPage.actions.addNodeToCanvas('Hacker News'); + WorkflowPage.actions.openNodeNdv('Hacker News'); + WorkflowPage.actions.openInlineExpressionEditor(); + }); + + it('should resolve primitive resolvables', () => { + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('1 + 2'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^3$/); + WorkflowPage.getters.inlineExpressionEditorInput().clear(); + + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('"ab'); + WorkflowPage.getters.inlineExpressionEditorInput().type('{rightArrow}+'); + WorkflowPage.getters.inlineExpressionEditorInput().type('"cd'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^abcd$/); + WorkflowPage.getters.inlineExpressionEditorInput().clear(); + + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('true && false'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^false$/); + }); + + it('should resolve object resolvables', () => { + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('{{} a: 1'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^\[Object: \{"a":1\}\]$/); + WorkflowPage.getters.inlineExpressionEditorInput().clear(); + + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('{{} a: 1 }.a{del}{del}'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^1$/); + }); + + it('should resolve array resolvables', () => { + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('[1, 2, 3'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^\[Array: \[1,2,3\]\]$/); + + WorkflowPage.getters.inlineExpressionEditorInput().clear(); + + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('[1, 2, 3'); + WorkflowPage.getters.inlineExpressionEditorInput().type('{rightArrow}[0'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^1$/); + }); + + it('should resolve $parameter[]', () => { + WorkflowPage.getters.inlineExpressionEditorInput().type('{{'); + WorkflowPage.getters.inlineExpressionEditorInput().type('$parameter["operation'); + WorkflowPage.getters.inlineExpressionEditorOutput().contains(/^get$/); + }); +}); diff --git a/cypress/e2e/9-expression-editor-modal.cy.ts b/cypress/e2e/9-expression-editor-modal.cy.ts index 9e0db82665..597c70969a 100644 --- a/cypress/e2e/9-expression-editor-modal.cy.ts +++ b/cypress/e2e/9-expression-editor-modal.cy.ts @@ -13,7 +13,7 @@ describe('Expression editor modal', () => { WorkflowPage.actions.addInitialNodeToCanvas('Manual Trigger'); WorkflowPage.actions.addNodeToCanvas('Hacker News'); WorkflowPage.actions.openNodeNdv('Hacker News'); - WorkflowPage.actions.openExpressionEditor(); + WorkflowPage.actions.openExpressionEditorModal(); }); it('should resolve primitive resolvables', () => { diff --git a/cypress/pages/workflow.ts b/cypress/pages/workflow.ts index e4653ebf7b..f7ba4ce0cf 100644 --- a/cypress/pages/workflow.ts +++ b/cypress/pages/workflow.ts @@ -58,6 +58,9 @@ export class WorkflowPage extends BasePage { workflowSettingsTimeoutWorkflowSwitch: () => cy.getByTestId('workflow-settings-timeout-workflow'), workflowSettingsTimeoutForm: () => cy.getByTestId('workflow-settings-timeout-form'), workflowSettingsSaveButton: () => cy.getByTestId('workflow-settings-save-button').find('button'), + + inlineExpressionEditorInput: () => cy.getByTestId('inline-expression-editor-input'), + inlineExpressionEditorOutput: () => cy.getByTestId('inline-expression-editor-output'), }; actions = { visit: () => { @@ -79,10 +82,14 @@ export class WorkflowPage extends BasePage { openNodeNdv: (nodeTypeName: string) => { this.getters.canvasNodeByName(nodeTypeName).dblclick(); }, - openExpressionEditor: () => { + openExpressionEditorModal: () => { cy.contains('Expression').invoke('show').click(); cy.getByTestId('expander').invoke('show').click(); }, + openInlineExpressionEditor: () => { + cy.contains('Expression').invoke('show').click(); + this.getters.inlineExpressionEditorInput().click(); + }, typeIntoParameterInput: (parameterName: string, content: string) => { this.getters.ndvParameterInput(parameterName).type(content); }, diff --git a/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorInput.vue b/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorInput.vue index 53468eb5d2..39d7f277c9 100644 --- a/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorInput.vue +++ b/packages/editor-ui/src/components/InlineExpressionEditor/InlineExpressionEditorInput.vue @@ -1,5 +1,5 @@