Refactor automation tests to run independently
This commit is contained in:
parent
9ebdf837fc
commit
1a131f3e19
|
@ -5,18 +5,15 @@ const {
|
||||||
testAutomation,
|
testAutomation,
|
||||||
} = require("./utilities/TestFunctions")
|
} = require("./utilities/TestFunctions")
|
||||||
const setup = require("./utilities")
|
const setup = require("./utilities")
|
||||||
const { basicAutomation } = setup.structures
|
const { basicAutomation, newAutomation, automationTrigger, automationStep } = setup.structures
|
||||||
const { mocks } = require("@budibase/backend-core/testUtils")
|
const { mocks } = require("@budibase/backend-core/testUtils")
|
||||||
mocks.date.mock()
|
mocks.date.mock()
|
||||||
const MAX_RETRIES = 4
|
const MAX_RETRIES = 4
|
||||||
|
const { TRIGGER_DEFINITIONS, ACTION_DEFINITIONS } = require("../../../automations")
|
||||||
let ACTION_DEFINITIONS = {}
|
|
||||||
let TRIGGER_DEFINITIONS = {}
|
|
||||||
|
|
||||||
describe("/automations", () => {
|
describe("/automations", () => {
|
||||||
let request = setup.getRequest()
|
let request = setup.getRequest()
|
||||||
let config = setup.getConfig()
|
let config = setup.getConfig()
|
||||||
let automation
|
|
||||||
|
|
||||||
afterAll(setup.afterAll)
|
afterAll(setup.afterAll)
|
||||||
|
|
||||||
|
@ -33,7 +30,6 @@ describe("/automations", () => {
|
||||||
.expect(200)
|
.expect(200)
|
||||||
|
|
||||||
expect(Object.keys(res.body).length).not.toEqual(0)
|
expect(Object.keys(res.body).length).not.toEqual(0)
|
||||||
ACTION_DEFINITIONS = res.body
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it("returns a list of definitions for triggerInfo", async () => {
|
it("returns a list of definitions for triggerInfo", async () => {
|
||||||
|
@ -44,7 +40,6 @@ describe("/automations", () => {
|
||||||
.expect(200)
|
.expect(200)
|
||||||
|
|
||||||
expect(Object.keys(res.body).length).not.toEqual(0)
|
expect(Object.keys(res.body).length).not.toEqual(0)
|
||||||
TRIGGER_DEFINITIONS = res.body
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it("returns all of the definitions in one", async () => {
|
it("returns all of the definitions in one", async () => {
|
||||||
|
@ -54,76 +49,37 @@ describe("/automations", () => {
|
||||||
.expect('Content-Type', /json/)
|
.expect('Content-Type', /json/)
|
||||||
.expect(200)
|
.expect(200)
|
||||||
|
|
||||||
expect(Object.keys(res.body.action).length).toBeGreaterThanOrEqual(Object.keys(ACTION_DEFINITIONS).length)
|
let definitionsLength = Object.keys(ACTION_DEFINITIONS).length
|
||||||
|
definitionsLength-- // OUTGOING_WEBHOOK is deprecated
|
||||||
|
|
||||||
|
expect(Object.keys(res.body.action).length).toBeGreaterThanOrEqual(definitionsLength)
|
||||||
expect(Object.keys(res.body.trigger).length).toEqual(Object.keys(TRIGGER_DEFINITIONS).length)
|
expect(Object.keys(res.body.trigger).length).toEqual(Object.keys(TRIGGER_DEFINITIONS).length)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("create", () => {
|
describe("create", () => {
|
||||||
const autoConfig = basicAutomation()
|
|
||||||
it("should setup the automation fully", () => {
|
|
||||||
let trigger = TRIGGER_DEFINITIONS["ROW_SAVED"]
|
|
||||||
trigger.id = "wadiawdo34"
|
|
||||||
let createAction = ACTION_DEFINITIONS["CREATE_ROW"]
|
|
||||||
createAction.inputs.row = {
|
|
||||||
name: "{{trigger.row.name}}",
|
|
||||||
description: "{{trigger.row.description}}"
|
|
||||||
}
|
|
||||||
createAction.id = "awde444wk"
|
|
||||||
|
|
||||||
autoConfig.definition.steps.push(createAction)
|
|
||||||
autoConfig.definition.trigger = trigger
|
|
||||||
})
|
|
||||||
|
|
||||||
it("returns a success message when the automation is successfully created", async () => {
|
it("returns a success message when the automation is successfully created", async () => {
|
||||||
|
const automation = newAutomation()
|
||||||
|
|
||||||
const res = await request
|
const res = await request
|
||||||
.post(`/api/automations`)
|
.post(`/api/automations`)
|
||||||
.set(config.defaultHeaders())
|
.set(config.defaultHeaders())
|
||||||
.send(autoConfig)
|
.send(automation)
|
||||||
.expect('Content-Type', /json/)
|
.expect('Content-Type', /json/)
|
||||||
.expect(200)
|
.expect(200)
|
||||||
|
|
||||||
expect(res.body.message).toEqual("Automation created successfully")
|
expect(res.body.message).toEqual("Automation created successfully")
|
||||||
expect(res.body.automation.name).toEqual("My Automation")
|
expect(res.body.automation.name).toEqual("My Automation")
|
||||||
expect(res.body.automation._id).not.toEqual(null)
|
expect(res.body.automation._id).not.toEqual(null)
|
||||||
automation = res.body.automation
|
|
||||||
})
|
|
||||||
|
|
||||||
it("should be able to create an automation with a webhook trigger", async () => {
|
|
||||||
const autoConfig = basicAutomation()
|
|
||||||
autoConfig.definition.trigger = TRIGGER_DEFINITIONS["WEBHOOK"]
|
|
||||||
autoConfig.definition.trigger.id = "webhook_trigger_id"
|
|
||||||
const res = await request
|
|
||||||
.post(`/api/automations`)
|
|
||||||
.set(config.defaultHeaders())
|
|
||||||
.send(autoConfig)
|
|
||||||
.expect('Content-Type', /json/)
|
|
||||||
.expect(200)
|
|
||||||
const originalAuto = res.body.automation
|
|
||||||
expect(originalAuto._id).toBeDefined()
|
|
||||||
expect(originalAuto._rev).toBeDefined()
|
|
||||||
// try removing the webhook trigger
|
|
||||||
const newConfig = originalAuto
|
|
||||||
newConfig.definition.trigger = TRIGGER_DEFINITIONS["ROW_SAVED"]
|
|
||||||
newConfig.definition.trigger.id = "row_saved_id"
|
|
||||||
const newRes = await request
|
|
||||||
.post(`/api/automations`)
|
|
||||||
.set(config.defaultHeaders())
|
|
||||||
.send(newConfig)
|
|
||||||
.expect('Content-Type', /json/)
|
|
||||||
.expect(200)
|
|
||||||
const newAuto = newRes.body.automation
|
|
||||||
expect(newAuto._id).toEqual(originalAuto._id)
|
|
||||||
expect(newAuto._rev).toBeDefined()
|
|
||||||
expect(newAuto._rev).not.toEqual(originalAuto._rev)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should apply authorization to endpoint", async () => {
|
it("should apply authorization to endpoint", async () => {
|
||||||
|
const automation = newAutomation()
|
||||||
await checkBuilderEndpoint({
|
await checkBuilderEndpoint({
|
||||||
config,
|
config,
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: `/api/automations`,
|
url: `/api/automations`,
|
||||||
body: autoConfig
|
body: automation
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -144,8 +100,15 @@ describe("/automations", () => {
|
||||||
describe("trigger", () => {
|
describe("trigger", () => {
|
||||||
it("trigger the automation successfully", async () => {
|
it("trigger the automation successfully", async () => {
|
||||||
let table = await config.createTable()
|
let table = await config.createTable()
|
||||||
|
let automation = newAutomation()
|
||||||
automation.definition.trigger.inputs.tableId = table._id
|
automation.definition.trigger.inputs.tableId = table._id
|
||||||
automation.definition.steps[0].inputs.row.tableId = table._id
|
automation.definition.steps[0].inputs = {
|
||||||
|
row: {
|
||||||
|
name: "{{trigger.row.name}}",
|
||||||
|
description: "{{trigger.row.description}}",
|
||||||
|
tableId: table._id
|
||||||
|
}
|
||||||
|
}
|
||||||
automation.appId = config.appId
|
automation.appId = config.appId
|
||||||
automation = await config.createAutomation(automation)
|
automation = await config.createAutomation(automation)
|
||||||
await setup.delay(500)
|
await setup.delay(500)
|
||||||
|
@ -172,9 +135,9 @@ describe("/automations", () => {
|
||||||
|
|
||||||
describe("update", () => {
|
describe("update", () => {
|
||||||
it("updates a automations data", async () => {
|
it("updates a automations data", async () => {
|
||||||
automation = await config.createAutomation(automation)
|
let automation = newAutomation()
|
||||||
|
await config.createAutomation(automation)
|
||||||
automation.name = "Updated Name"
|
automation.name = "Updated Name"
|
||||||
automation.type = "automation"
|
|
||||||
|
|
||||||
const res = await request
|
const res = await request
|
||||||
.put(`/api/automations`)
|
.put(`/api/automations`)
|
||||||
|
@ -186,6 +149,39 @@ describe("/automations", () => {
|
||||||
expect(res.body.message).toEqual(`Automation ${automation._id} updated successfully.`)
|
expect(res.body.message).toEqual(`Automation ${automation._id} updated successfully.`)
|
||||||
expect(res.body.automation.name).toEqual("Updated Name")
|
expect(res.body.automation.name).toEqual("Updated Name")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should be able to update an automation trigger", async () => {
|
||||||
|
// create webhook automation
|
||||||
|
const webhookTrigger = automationTrigger(TRIGGER_DEFINITIONS.WEBHOOK)
|
||||||
|
let automation = newAutomation({ trigger: webhookTrigger })
|
||||||
|
|
||||||
|
let res = await request
|
||||||
|
.post(`/api/automations`)
|
||||||
|
.set(config.defaultHeaders())
|
||||||
|
.send(automation)
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
|
||||||
|
automation = res.body.automation
|
||||||
|
expect(automation._id).toBeDefined()
|
||||||
|
expect(automation._rev).toBeDefined()
|
||||||
|
|
||||||
|
// change the trigger
|
||||||
|
automation.trigger = automationTrigger(TRIGGER_DEFINITIONS.ROW_SAVED)
|
||||||
|
|
||||||
|
// check the post request honours updates with same id
|
||||||
|
res = await request
|
||||||
|
.post(`/api/automations`)
|
||||||
|
.set(config.defaultHeaders())
|
||||||
|
.send(automation)
|
||||||
|
.expect('Content-Type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
|
||||||
|
const automationRes = res.body.automation
|
||||||
|
expect(automationRes._id).toEqual(automation._id)
|
||||||
|
expect(automationRes._rev).toBeDefined()
|
||||||
|
expect(automationRes._rev).not.toEqual(automation._rev)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("fetch", () => {
|
describe("fetch", () => {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
const { processEvent } = require("./utils")
|
const { processEvent } = require("./utils")
|
||||||
const { queue } = require("./bullboard")
|
const { queue } = require("./bullboard")
|
||||||
|
const { TRIGGER_DEFINITIONS } = require("./triggers")
|
||||||
|
const { ACTION_DEFINITIONS } = require("./actions")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This module is built purely to kick off the worker farm and manage the inputs/outputs
|
* This module is built purely to kick off the worker farm and manage the inputs/outputs
|
||||||
|
@ -14,4 +16,7 @@ exports.init = function () {
|
||||||
exports.getQueues = () => {
|
exports.getQueues = () => {
|
||||||
return [queue]
|
return [queue]
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.queue = queue
|
exports.queue = queue
|
||||||
|
exports.TRIGGER_DEFINITIONS = TRIGGER_DEFINITIONS
|
||||||
|
exports.ACTION_DEFINITIONS = ACTION_DEFINITIONS
|
||||||
|
|
|
@ -3,6 +3,8 @@ const { BUILTIN_PERMISSION_IDS } = require("@budibase/backend-core/permissions")
|
||||||
const { createHomeScreen } = require("../../constants/screens")
|
const { createHomeScreen } = require("../../constants/screens")
|
||||||
const { EMPTY_LAYOUT } = require("../../constants/layouts")
|
const { EMPTY_LAYOUT } = require("../../constants/layouts")
|
||||||
const { cloneDeep } = require("lodash/fp")
|
const { cloneDeep } = require("lodash/fp")
|
||||||
|
const { v4: uuidv4 } = require("uuid")
|
||||||
|
const { TRIGGER_DEFINITIONS, ACTION_DEFINITIONS } = require("../../automations")
|
||||||
|
|
||||||
exports.TENANT_ID = "default"
|
exports.TENANT_ID = "default"
|
||||||
|
|
||||||
|
@ -28,6 +30,40 @@ exports.basicTable = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.automationStep = (actionDefinition = ACTION_DEFINITIONS.CREATE_ROW) => {
|
||||||
|
return {
|
||||||
|
id: uuidv4(),
|
||||||
|
...actionDefinition,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.automationTrigger = (
|
||||||
|
triggerDefinition = TRIGGER_DEFINITIONS.ROW_SAVED
|
||||||
|
) => {
|
||||||
|
return {
|
||||||
|
id: uuidv4(),
|
||||||
|
...triggerDefinition,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.newAutomation = ({ steps, trigger } = {}) => {
|
||||||
|
const automation = exports.basicAutomation()
|
||||||
|
|
||||||
|
if (trigger) {
|
||||||
|
automation.definition.trigger = trigger
|
||||||
|
} else {
|
||||||
|
automation.definition.trigger = exports.automationTrigger()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (steps) {
|
||||||
|
automation.definition.steps = steps
|
||||||
|
} else {
|
||||||
|
automation.definition.steps = [exports.automationStep()]
|
||||||
|
}
|
||||||
|
|
||||||
|
return automation
|
||||||
|
}
|
||||||
|
|
||||||
exports.basicAutomation = () => {
|
exports.basicAutomation = () => {
|
||||||
return {
|
return {
|
||||||
name: "My Automation",
|
name: "My Automation",
|
||||||
|
|
|
@ -155,7 +155,7 @@ describe("configs", () => {
|
||||||
await config.deleteConfig(Configs.OIDC)
|
await config.deleteConfig(Configs.OIDC)
|
||||||
})
|
})
|
||||||
|
|
||||||
it ("should update google config to activated", async () => {
|
it ("should update OIDC config to activated", async () => {
|
||||||
const oidcConf = await saveOIDCConfig({ activated: false })
|
const oidcConf = await saveOIDCConfig({ activated: false })
|
||||||
jest.clearAllMocks()
|
jest.clearAllMocks()
|
||||||
await saveOIDCConfig({ ...oidcConf.config.configs[0], activated: true}, oidcConf._id, oidcConf._rev)
|
await saveOIDCConfig({ ...oidcConf.config.configs[0], activated: true}, oidcConf._id, oidcConf._rev)
|
||||||
|
|
Loading…
Reference in New Issue