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 @@
-
+