budibase/packages/server/tests/testApp.js

160 lines
3.9 KiB
JavaScript

const app = require("../app")
const { remove, mkdir } = require("fs-extra")
const createMasterDb = require("../initialise/createMasterDb")
const request = require("supertest")
const fs = require("fs")
const {
masterAppPackage,
applictionVersionPackage,
} = require("../utilities/createAppPackage")
const buildAppContext = require("../initialise/buildAppContext")
var enableDestroy = require("server-destroy")
const masterOwnerName = "test_master"
const masterOwnerPassword = "test_master_pass"
const extraMasterPlugins = {
test_plugins: {
outputToFile: ({ filename, content }) => {
fs.writeFile(`./tests/.data/${filename}`, content, { encoding: "utf8" })
},
},
}
const customizeMaster = appDefinition => {
appDefinition.actions.outputToFile = {
name: "outputToFile",
behaviourSource: "test_plugins",
behaviourName: "outputToFile",
initialOptions: {},
}
appDefinition.triggers.push({
actionName: "outputToFile",
eventName: "authApi:createTemporaryAccess:onComplete",
optionsCreator:
'return ({filename:"tempaccess" + context.userName, content:context.result})',
condition: "",
})
return appDefinition
}
const config = {
datastore: "local",
datastoreConfig: {
rootPath: "./tests/.data",
},
keys: ["secret1", "secret2"],
port: 4002,
latestPackagesFolder: "./appPackages",
extraMasterPlugins,
customizeMaster,
dev: true,
}
module.exports = () => {
let server
return {
start: async () => {
try {
await reInitialize()
const budibaseContext = await buildAppContext(config, true)
server = await app(budibaseContext)
} catch (e) {
console.log(e.stack)
}
enableDestroy(server)
},
config,
server: () => server,
post: (url, body) => postRequest(server, url, body),
patch: (url, body) => patchRequest(server, url, body),
get: url => getRequest(server, url),
delete: url => deleteRequest(server, url),
credentials: {
masterOwner: {
username: masterOwnerName,
password: masterOwnerPassword,
cookie: "",
},
testAppUser1: {
username: "testAppUser1",
password: "user1_instance1_password",
cookie: "",
},
testAppUser2: {
username: "testAppUser2",
password: "user1_instance2_password",
cookie: "",
},
user1_versionlessInstance: {
username: "user1_versionlessInstance",
password: "user1_versionlessInstance_password",
cookie: "",
},
},
apps: {
testApp1: {
key: null,
instance1: null,
instance2: null,
version1: null,
},
},
testAppInfo: {
name: "testApp",
},
destroy: () => server && server.destroy(),
masterAppPackage: masterAppPackage({ config }),
testAppInstance1AppPackage: async app =>
applictionVersionPackage(
await buildAppContext(config, true),
"testApp",
app.apps.testApp1.instance1.version.id,
app.apps.testApp1.instance1.key
),
}
}
const patchRequest = (server, url, body) =>
request(server)
.patch(url)
.send(body)
.set("Accept", "application/json")
const postRequest = (server, url, body) =>
request(server)
.post(url)
.send(body)
.set("Accept", "application/json")
const deleteRequest = (server, url) =>
request(server)
.delete(url)
.set("Accept", "application/json")
const getRequest = (server, url) =>
request(server)
.get(url)
.set("Accept", "application/json")
const reInitialize = async () => {
try {
await remove(config.datastoreConfig.rootPath)
} catch (_) {}
await mkdir(config.datastoreConfig.rootPath)
const datastoreModule = require("../../datastores/datastores/" +
config.datastore)
const budibaseContext = await buildAppContext(config, false)
await createMasterDb(
budibaseContext,
datastoreModule,
masterOwnerName,
masterOwnerPassword
)
}