From 5f064ade9d151cc48f868fbf2aa051203b4d51e3 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 21 Sep 2020 13:49:34 +0100 Subject: [PATCH] Renaming workflows -> automate/automations, throughout the API and the builder itself. --- packages/builder/.gitignore | 4 +- ...kflow.spec.js => createAutomation.spec.js} | 24 ++-- .../cypress/videos/createApp.spec.js.mp4 | Bin 158964 -> 0 bytes .../cypress/videos/createBinding.spec.js.mp4 | Bin 17260 -> 0 bytes .../videos/createComponents.spec.js.mp4 | Bin 17610 -> 0 bytes .../cypress/videos/createTable.spec.js.mp4 | Bin 219703 -> 0 bytes .../cypress/videos/createUser.spec.js.mp4 | Bin 169645 -> 0 bytes .../cypress/videos/createView.spec.js.mp4 | Bin 644309 -> 0 bytes .../cypress/videos/createWorkflow.spec.js.mp4 | Bin 355127 -> 0 bytes .../cypress/videos/screens.spec.js.mp4 | Bin 216143 -> 0 bytes packages/builder/src/builderStore/index.js | 4 +- .../Workflow.js => automation/Automation.js} | 30 ++--- .../builderStore/store/automation/index.js | 126 ++++++++++++++++++ .../store/automation/tests/Automation.spec.js | 48 +++++++ .../tests/testAutomation.js} | 4 +- .../src/builderStore/store/workflow/index.js | 126 ------------------ .../store/workflow/tests/Workflow.spec.js | 48 ------- .../AutomationBuilder.svelte} | 36 ++--- .../AutomationBuilder}/flowchart/Arrow.svelte | 0 .../flowchart/AutomationBlockTagline.svelte} | 0 .../flowchart/FlowChart.svelte | 10 +- .../flowchart/FlowItem.svelte | 10 +- .../AutomationBuilder}/flowchart/api.js | 0 .../AutomationBuilder}/flowchart/index.js | 0 .../AutomationList/AutomationList.svelte} | 38 +++--- .../CreateAutomationModal.svelte} | 14 +- .../AutomationPanel/AutomationPanel.svelte} | 26 ++-- .../BlockList/AutomationBlock.svelte} | 18 +-- .../BlockList/BlockList.svelte | 10 +- .../automation/AutomationPanel/index.js | 3 + .../SetupPanel/AutomationBlockSetup.svelte} | 16 +-- .../SetupPanel/DeleteAutomationModal.svelte} | 18 +-- .../ParamInputs/ModelSelector.svelte | 0 .../ParamInputs/RecordSelector.svelte | 0 .../SetupPanel/SetupPanel.svelte | 64 ++++----- .../SetupPanel/index.js | 0 .../src/components/automation/index.js | 3 + .../components/start/CreateAppModal.svelte | 4 +- .../EventsEditor/StateBindingCascader.svelte | 10 +- .../workflow/WorkflowPanel/index.js | 3 - .../builder/src/components/workflow/index.js | 3 - .../src/pages/[application]/_reset.svelte | 8 +- .../[automation]}/_layout.svelte | 0 .../{workflow => automate}/_layout.svelte | 9 +- .../pages/[application]/automate/index.svelte | 5 + .../[application]/backend/_layout.svelte | 1 + .../[application]/frontend/_layout.svelte | 1 + .../pages/[application]/workflow/index.svelte | 5 - .../{workflow.js => automation.js} | 60 ++++----- .../server/src/api/controllers/instance.js | 4 +- packages/server/src/api/controllers/record.js | 2 +- .../server/src/api/controllers/view/index.js | 2 +- packages/server/src/api/index.js | 6 +- .../api/routes/{workflow.js => automation.js} | 24 ++-- packages/server/src/api/routes/index.js | 4 +- .../{workflow.spec.js => automation.spec.js} | 116 ++++++++-------- packages/server/src/app.js | 4 +- .../src/{workflows => automations}/actions.js | 0 .../src/{workflows => automations}/index.js | 2 +- .../src/{workflows => automations}/logic.js | 0 .../queue/inMemoryQueue.js | 0 .../steps/createUser.js | 0 .../{workflows => automations}/steps/delay.js | 2 +- .../steps/deleteRecord.js | 0 .../steps/filter.js | 2 +- .../steps/saveRecord.js | 0 .../steps/sendEmail.js | 0 .../src/{workflows => automations}/thread.js | 20 +-- .../{workflows => automations}/triggers.js | 53 ++++---- packages/server/src/events/index.js | 2 +- packages/server/src/utilities/accessLevels.js | 2 +- packages/server/src/utilities/permissions.js | 14 +- 72 files changed, 527 insertions(+), 521 deletions(-) rename packages/builder/cypress/integration/{createWorkflow.spec.js => createAutomation.spec.js} (63%) delete mode 100644 packages/builder/cypress/videos/createApp.spec.js.mp4 delete mode 100644 packages/builder/cypress/videos/createBinding.spec.js.mp4 delete mode 100644 packages/builder/cypress/videos/createComponents.spec.js.mp4 delete mode 100644 packages/builder/cypress/videos/createTable.spec.js.mp4 delete mode 100644 packages/builder/cypress/videos/createUser.spec.js.mp4 delete mode 100644 packages/builder/cypress/videos/createView.spec.js.mp4 delete mode 100644 packages/builder/cypress/videos/createWorkflow.spec.js.mp4 delete mode 100644 packages/builder/cypress/videos/screens.spec.js.mp4 rename packages/builder/src/builderStore/store/{workflow/Workflow.js => automation/Automation.js} (54%) create mode 100644 packages/builder/src/builderStore/store/automation/index.js create mode 100644 packages/builder/src/builderStore/store/automation/tests/Automation.spec.js rename packages/builder/src/builderStore/store/{workflow/tests/testWorkflow.js => automation/tests/testAutomation.js} (97%) delete mode 100644 packages/builder/src/builderStore/store/workflow/index.js delete mode 100644 packages/builder/src/builderStore/store/workflow/tests/Workflow.spec.js rename packages/builder/src/components/{workflow/WorkflowBuilder/WorkflowBuilder.svelte => automation/AutomationBuilder/AutomationBuilder.svelte} (61%) rename packages/builder/src/components/{workflow/WorkflowBuilder => automation/AutomationBuilder}/flowchart/Arrow.svelte (100%) rename packages/builder/src/components/{workflow/WorkflowBuilder/flowchart/WorkflowBlockTagline.svelte => automation/AutomationBuilder/flowchart/AutomationBlockTagline.svelte} (100%) rename packages/builder/src/components/{workflow/WorkflowBuilder => automation/AutomationBuilder}/flowchart/FlowChart.svelte (80%) rename packages/builder/src/components/{workflow/WorkflowBuilder => automation/AutomationBuilder}/flowchart/FlowItem.svelte (86%) rename packages/builder/src/components/{workflow/WorkflowBuilder => automation/AutomationBuilder}/flowchart/api.js (100%) rename packages/builder/src/components/{workflow/WorkflowBuilder => automation/AutomationBuilder}/flowchart/index.js (100%) rename packages/builder/src/components/{workflow/WorkflowPanel/WorkflowList/WorkflowList.svelte => automation/AutomationPanel/AutomationList/AutomationList.svelte} (63%) rename packages/builder/src/components/{workflow/WorkflowPanel/WorkflowList/CreateWorkflowModal.svelte => automation/AutomationPanel/AutomationList/CreateAutomationModal.svelte} (80%) rename packages/builder/src/components/{workflow/WorkflowPanel/WorkflowPanel.svelte => automation/AutomationPanel/AutomationPanel.svelte} (55%) rename packages/builder/src/components/{workflow/WorkflowPanel/BlockList/WorkflowBlock.svelte => automation/AutomationPanel/BlockList/AutomationBlock.svelte} (76%) rename packages/builder/src/components/{workflow/WorkflowPanel => automation/AutomationPanel}/BlockList/BlockList.svelte (70%) create mode 100644 packages/builder/src/components/automation/AutomationPanel/index.js rename packages/builder/src/components/{workflow/SetupPanel/WorkflowBlockSetup.svelte => automation/SetupPanel/AutomationBlockSetup.svelte} (87%) rename packages/builder/src/components/{workflow/SetupPanel/DeleteWorkflowModal.svelte => automation/SetupPanel/DeleteAutomationModal.svelte} (73%) rename packages/builder/src/components/{workflow => automation}/SetupPanel/ParamInputs/ModelSelector.svelte (100%) rename packages/builder/src/components/{workflow => automation}/SetupPanel/ParamInputs/RecordSelector.svelte (100%) rename packages/builder/src/components/{workflow => automation}/SetupPanel/SetupPanel.svelte (55%) rename packages/builder/src/components/{workflow => automation}/SetupPanel/index.js (100%) create mode 100644 packages/builder/src/components/automation/index.js delete mode 100644 packages/builder/src/components/workflow/WorkflowPanel/index.js delete mode 100644 packages/builder/src/components/workflow/index.js rename packages/builder/src/pages/[application]/{workflow/[workflow] => automate/[automation]}/_layout.svelte (100%) rename packages/builder/src/pages/[application]/{workflow => automate}/_layout.svelte (74%) create mode 100644 packages/builder/src/pages/[application]/automate/index.svelte delete mode 100644 packages/builder/src/pages/[application]/workflow/index.svelte rename packages/server/src/api/controllers/{workflow.js => automation.js} (65%) rename packages/server/src/api/routes/{workflow.js => automation.js} (74%) rename packages/server/src/api/routes/tests/{workflow.spec.js => automation.spec.js} (63%) rename packages/server/src/{workflows => automations}/actions.js (100%) rename packages/server/src/{workflows => automations}/index.js (93%) rename packages/server/src/{workflows => automations}/logic.js (100%) rename packages/server/src/{workflows => automations}/queue/inMemoryQueue.js (100%) rename packages/server/src/{workflows => automations}/steps/createUser.js (100%) rename packages/server/src/{workflows => automations}/steps/delay.js (87%) rename packages/server/src/{workflows => automations}/steps/deleteRecord.js (100%) rename packages/server/src/{workflows => automations}/steps/filter.js (96%) rename packages/server/src/{workflows => automations}/steps/saveRecord.js (100%) rename packages/server/src/{workflows => automations}/steps/sendEmail.js (100%) rename packages/server/src/{workflows => automations}/thread.js (82%) rename packages/server/src/{workflows => automations}/triggers.js (72%) diff --git a/packages/builder/.gitignore b/packages/builder/.gitignore index 50269a9125..2e8ed59c47 100644 --- a/packages/builder/.gitignore +++ b/packages/builder/.gitignore @@ -4,6 +4,6 @@ node_modules_win package-lock.json release/ dist/ -cypress/screenshots -cypress/videos routify +cypress/videos +cypress/screenshots diff --git a/packages/builder/cypress/integration/createWorkflow.spec.js b/packages/builder/cypress/integration/createAutomation.spec.js similarity index 63% rename from packages/builder/cypress/integration/createWorkflow.spec.js rename to packages/builder/cypress/integration/createAutomation.spec.js index 50fbcb4445..3acd5a7f7a 100644 --- a/packages/builder/cypress/integration/createWorkflow.spec.js +++ b/packages/builder/cypress/integration/createAutomation.spec.js @@ -1,27 +1,27 @@ -context("Create a workflow", () => { +context("Create a automation", () => { before(() => { cy.server() cy.visit("localhost:4001/_builder") cy.createApp( - "Workflow Test App", - "This app is used to test that workflows do in fact work!" + "Automation Test App", + "This app is used to test that automations do in fact work!" ) }) // https://on.cypress.io/interacting-with-elements - it("should create a workflow", () => { + it("should create a automation", () => { cy.createTestTableWithData() - cy.contains("workflow").click() - cy.contains("Create New Workflow").click() + cy.contains("automate").click() + cy.contains("Create New Automation").click() cy.get("input").type("Add Record") cy.contains("Save").click() // Add trigger - cy.get("[data-cy=add-workflow-component]").click() + cy.get("[data-cy=add-automation-component]").click() cy.get("[data-cy=RECORD_SAVED]").click() - cy.get("[data-cy=workflow-block-setup]").within(() => { + cy.get("[data-cy=automation-block-setup]").within(() => { cy.get("select") .first() .select("dog") @@ -29,7 +29,7 @@ context("Create a workflow", () => { // Create action cy.get("[data-cy=SAVE_RECORD]").click() - cy.get("[data-cy=workflow-block-setup]").within(() => { + cy.get("[data-cy=automation-block-setup]").within(() => { cy.get("select") .first() .select("dog") @@ -42,10 +42,10 @@ context("Create a workflow", () => { }) // Save - cy.contains("Save Workflow").click() + cy.contains("Save Automation").click() - // Activate Workflow - cy.get("[data-cy=activate-workflow]").click() + // Activate Automation + cy.get("[data-cy=activate-automation]").click() cy.contains("Add Record").should("be.visible") cy.get(".stop-button.highlighted").should("be.visible") }) diff --git a/packages/builder/cypress/videos/createApp.spec.js.mp4 b/packages/builder/cypress/videos/createApp.spec.js.mp4 deleted file mode 100644 index 4e13dbe91b52d6958a1748ff5d93113b4c4edb96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158964 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