2020-02-03 10:24:25 +01:00
|
|
|
const statusCodes = require("../utilities/statusCodes")
|
|
|
|
const constructHierarchy = require("../utilities/constructHierarchy")
|
|
|
|
const { readFile } = require("fs-extra")
|
|
|
|
const { getRecordApi, getAuthApi } = require("@budibase/core")
|
2019-07-11 10:43:47 +02:00
|
|
|
const masterAppDefinition = constructHierarchy(
|
2020-02-03 10:24:25 +01:00
|
|
|
require("../appPackages/_master/appDefinition.json")
|
|
|
|
)
|
|
|
|
const { getApisWithFullAccess } = require("../utilities/budibaseApi")
|
|
|
|
const { createTarGzPackage } = require("../utilities/targzAppPackage")
|
|
|
|
const { timeout } = require("./helpers")
|
|
|
|
|
|
|
|
module.exports = app => {
|
|
|
|
let _master
|
|
|
|
const getmaster = async () => {
|
|
|
|
if (!_master)
|
|
|
|
_master = await getApisWithFullAccess({}, app.masterAppPackage)
|
|
|
|
return _master
|
|
|
|
}
|
|
|
|
|
|
|
|
let testInstance
|
|
|
|
const getTestInstance = async () => {
|
|
|
|
if (!testInstance) {
|
|
|
|
const testAppInstance1AppPackage = app.testAppInstance1AppPackage
|
|
|
|
testInstance = await getApisWithFullAccess(
|
|
|
|
{},
|
|
|
|
await testAppInstance1AppPackage(app)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
return testInstance
|
|
|
|
}
|
|
|
|
|
|
|
|
let instance2
|
|
|
|
it("should be able to create second instance of app", async () => {
|
|
|
|
const version1 = app.apps.testApp1.version1
|
|
|
|
const master = await getmaster()
|
|
|
|
instance2 = master.recordApi.getNew(
|
|
|
|
`${app.apps.testApp1.key}/instances`,
|
|
|
|
"instance"
|
|
|
|
)
|
|
|
|
instance2.name = "instance 2"
|
|
|
|
instance2.active = true
|
|
|
|
instance2.version = {
|
|
|
|
key: version1.key,
|
|
|
|
name: "v1",
|
|
|
|
defaultAccessLevel: "owner",
|
2019-07-11 10:43:47 +02:00
|
|
|
}
|
|
|
|
|
2020-02-03 10:24:25 +01:00
|
|
|
await app
|
|
|
|
.post(`/_master/api/record/${instance2.key}`, instance2)
|
|
|
|
.set("cookie", app.credentials.masterOwner.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
const loadInstanceResponse = await app
|
|
|
|
.get(`/_master/api/record/${instance2.key}`)
|
|
|
|
.set("cookie", app.credentials.masterOwner.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
instance2 = loadInstanceResponse.body
|
|
|
|
app.apps.testApp1.instance2 = instance2
|
|
|
|
})
|
|
|
|
|
|
|
|
let user1_instance2
|
|
|
|
it("should be able to create new user on second instance, via master", async () => {
|
|
|
|
const master = await getmaster()
|
|
|
|
user1_instance2 = master.recordApi.getNew(
|
|
|
|
`${app.apps.testApp1.key}/users`,
|
|
|
|
"user"
|
|
|
|
)
|
|
|
|
user1_instance2.name = app.credentials.testAppUser2.username
|
|
|
|
user1_instance2.createdByMaster = true
|
|
|
|
master.recordApi.setCustomId(user1_instance2, user1_instance2.name)
|
|
|
|
|
|
|
|
user1_instance2.instance = instance2
|
|
|
|
user1_instance2.active = true
|
|
|
|
//await timeout(100);
|
|
|
|
await app
|
|
|
|
.post(`/_master/api/record/${user1_instance2.key}`, user1_instance2)
|
|
|
|
.set("cookie", app.credentials.masterOwner.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should be able to set password for new user using temporary code", async () => {
|
|
|
|
const testUserTempCode = await readFile(
|
|
|
|
`./tests/.data/tempaccess${user1_instance2.name}`,
|
|
|
|
"utf8"
|
|
|
|
)
|
|
|
|
user1_instance2.password = app.credentials.testAppUser2.password
|
|
|
|
|
|
|
|
await app
|
|
|
|
.post("/testApp/api/setPasswordFromTemporaryCode", {
|
|
|
|
username: app.credentials.testAppUser2.username,
|
|
|
|
tempCode: testUserTempCode,
|
|
|
|
newPassword: app.credentials.testAppUser2.password,
|
|
|
|
})
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
const response = await app
|
|
|
|
.post("/testApp/api/authenticate", {
|
|
|
|
username: app.credentials.testAppUser2.username,
|
|
|
|
password: app.credentials.testAppUser2.password,
|
|
|
|
})
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
app.credentials.testAppUser2.cookie = response.header["set-cookie"]
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should create records in the correct instance", async () => {
|
|
|
|
const bb = await getTestInstance()
|
|
|
|
|
|
|
|
const newCustomer = name => {
|
|
|
|
const c = bb.recordApi.getNew("/customers", "customer")
|
|
|
|
c.name = name
|
|
|
|
return c
|
2019-07-11 10:43:47 +02:00
|
|
|
}
|
2020-02-03 10:24:25 +01:00
|
|
|
|
|
|
|
const customer1 = newCustomer("customer1")
|
|
|
|
await app
|
|
|
|
.post(`/testApp/api/record/${customer1.key}`, customer1)
|
|
|
|
.set("cookie", app.credentials.testAppUser1.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
const customer2 = newCustomer("customer2")
|
|
|
|
await app
|
|
|
|
.post(`/testApp/api/record/${customer2.key}`, customer2)
|
|
|
|
.set("cookie", app.credentials.testAppUser2.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
await app
|
|
|
|
.get(`/testApp/api/record/${customer1.key}`)
|
|
|
|
.set("cookie", app.credentials.testAppUser1.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
await app
|
|
|
|
.get(`/testApp/api/record/${customer1.key}`)
|
|
|
|
.set("cookie", app.credentials.testAppUser2.cookie)
|
|
|
|
.expect(statusCodes.INTERAL_ERROR)
|
|
|
|
|
|
|
|
await app
|
|
|
|
.get(`/testApp/api/record/${customer2.key}`)
|
|
|
|
.set("cookie", app.credentials.testAppUser2.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
await app
|
|
|
|
.get(`/testApp/api/record/${customer2.key}`)
|
|
|
|
.set("cookie", app.credentials.testAppUser1.cookie)
|
|
|
|
.expect(statusCodes.INTERAL_ERROR)
|
|
|
|
})
|
|
|
|
|
|
|
|
let versionlessInstance
|
|
|
|
it("should be able to create a versionless instance", async () => {
|
|
|
|
const master = await getmaster()
|
|
|
|
versionlessInstance = master.recordApi.getNew(
|
|
|
|
`${app.apps.testApp1.key}/instances`,
|
|
|
|
"instance"
|
|
|
|
)
|
|
|
|
versionlessInstance.name = "versionless instance"
|
|
|
|
versionlessInstance.active = true
|
|
|
|
versionlessInstance.version = { key: "", defaultAccessLevel: "owner" }
|
|
|
|
|
|
|
|
await app
|
|
|
|
.post(
|
|
|
|
`/_master/api/record/${versionlessInstance.key}`,
|
|
|
|
versionlessInstance
|
|
|
|
)
|
|
|
|
.set("cookie", app.credentials.masterOwner.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
const loadInstanceResponse = await app
|
|
|
|
.get(`/_master/api/record/${versionlessInstance.key}`)
|
|
|
|
.set("cookie", app.credentials.masterOwner.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
versionlessInstance = loadInstanceResponse.body
|
|
|
|
app.apps.testApp1.versionlessInstance = versionlessInstance
|
|
|
|
})
|
|
|
|
|
|
|
|
let user1_versionlessInstance
|
|
|
|
it("should be able to create new user on versionless, via master", async () => {
|
|
|
|
const master = await getmaster()
|
|
|
|
user1_versionlessInstance = master.recordApi.getNew(
|
|
|
|
`${app.apps.testApp1.key}/users`,
|
|
|
|
"user"
|
|
|
|
)
|
|
|
|
user1_versionlessInstance.name =
|
|
|
|
app.credentials.user1_versionlessInstance.username
|
|
|
|
user1_versionlessInstance.createdByMaster = true
|
|
|
|
master.recordApi.setCustomId(
|
|
|
|
user1_versionlessInstance,
|
|
|
|
user1_versionlessInstance.name
|
|
|
|
)
|
|
|
|
|
|
|
|
user1_versionlessInstance.instance = versionlessInstance
|
|
|
|
user1_versionlessInstance.active = true
|
|
|
|
//await timeout(100);
|
|
|
|
await app
|
|
|
|
.post(
|
|
|
|
`/_master/api/record/${user1_versionlessInstance.key}`,
|
|
|
|
user1_versionlessInstance
|
|
|
|
)
|
|
|
|
.set("cookie", app.credentials.masterOwner.cookie)
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
const testUserTempCode = await readFile(
|
|
|
|
`./tests/.data/tempaccess${user1_versionlessInstance.name}`,
|
|
|
|
"utf8"
|
|
|
|
)
|
|
|
|
user1_versionlessInstance.password =
|
|
|
|
app.credentials.user1_versionlessInstance.password
|
|
|
|
|
|
|
|
await app
|
|
|
|
.post("/testApp/api/setPasswordFromTemporaryCode", {
|
|
|
|
username: app.credentials.user1_versionlessInstance.username,
|
|
|
|
tempCode: testUserTempCode,
|
|
|
|
newPassword: app.credentials.user1_versionlessInstance.password,
|
|
|
|
})
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
const response = await app
|
|
|
|
.post("/testApp/api/authenticate", {
|
|
|
|
username: app.credentials.user1_versionlessInstance.username,
|
|
|
|
password: app.credentials.user1_versionlessInstance.password,
|
|
|
|
})
|
|
|
|
.expect(statusCodes.OK)
|
|
|
|
|
|
|
|
app.credentials.user1_versionlessInstance.cookie =
|
|
|
|
response.header["set-cookie"]
|
|
|
|
})
|
|
|
|
}
|