Starting to fix up test cases.

This commit is contained in:
mike12345567 2022-02-25 15:55:19 +00:00
parent 2c4b36e4f9
commit 83d4994f55
8 changed files with 137 additions and 24 deletions

View File

@ -136,6 +136,7 @@ module.exports = (
// allow configuring for public access
if ((opts && opts.publicAllowed) || publicEndpoint) {
finalise(ctx, { authenticated: false, version, publicEndpoint })
return next()
} else {
ctx.throw(err.status || 403, err)
}

View File

@ -78,6 +78,7 @@ exports.ObjectStore = bucket => {
const config = {
s3ForcePathStyle: true,
signatureVersion: "v4",
apiVersion: "2006-03-01",
params: {
Bucket: sanitizeBucket(bucket),
},
@ -102,17 +103,21 @@ exports.makeSureBucketExists = async (client, bucketName) => {
.promise()
} catch (err) {
const promises = STATE.bucketCreationPromises
const doesntExist = err.statusCode === 404,
noAccess = err.statusCode === 403
if (promises[bucketName]) {
await promises[bucketName]
} else if (err.statusCode === 404) {
// bucket doesn't exist create it
promises[bucketName] = client
.createBucket({
Bucket: bucketName,
})
.promise()
await promises[bucketName]
delete promises[bucketName]
} else if (doesntExist || noAccess) {
if (doesntExist) {
// bucket doesn't exist create it
promises[bucketName] = client
.createBucket({
Bucket: bucketName,
})
.promise()
await promises[bucketName]
delete promises[bucketName]
}
// public buckets are quite hidden in the system, make sure
// no bucket is set accidentally
if (PUBLIC_BUCKETS.includes(bucketName)) {
@ -124,7 +129,7 @@ exports.makeSureBucketExists = async (client, bucketName) => {
.promise()
}
} else {
throw err
throw new Error("Unable to write to object store bucket.")
}
}
}

View File

@ -30,6 +30,12 @@ export async function search(ctx: any) {
}
export async function create(ctx: any) {
if (!ctx.request.body || !ctx.request.body.useTemplate) {
ctx.request.body = {
useTemplate: false,
...ctx.request.body,
}
}
await controller.create(ctx)
await setResponseApp(ctx)
}

View File

@ -33,7 +33,7 @@ const read = [],
*/
write.push(
new Endpoint("post", "/applications", controller.create).addMiddleware(
applicationValidator
applicationValidator()
)
)
@ -65,7 +65,7 @@ write.push(
*/
write.push(
new Endpoint("put", "/applications/:appId", controller.update).addMiddleware(
applicationValidator
applicationValidator()
)
)

View File

@ -20,6 +20,9 @@ const publicRouter = new Router({
})
function addMiddleware(endpoints: any, middleware: CtxFn) {
if (!endpoints) {
return
}
if (!Array.isArray(endpoints)) {
endpoints = [endpoints]
}
@ -29,8 +32,10 @@ function addMiddleware(endpoints: any, middleware: CtxFn) {
}
function addToRouter(endpoints: any) {
for (let endpoint of endpoints) {
endpoint.apply(publicRouter)
if (endpoints) {
for (let endpoint of endpoints) {
endpoint.apply(publicRouter)
}
}
}

View File

@ -18,10 +18,12 @@ beforeAll(async () => {
afterAll(setup.afterAll)
async function makeRequest(method, endpoint, body, appId) {
async function makeRequest(method, endpoint, body, appId = config.getAppId()) {
const extraHeaders = {
"x-budibase-api-key": apiKey,
"x-budibase-app-id": appId ? appId : config.getAppId(),
}
if (appId) {
extraHeaders["x-budibase-app-id"] = appId
}
const req = request
[method](checkSlashesInUrl(`/api/public/v1/${endpoint}`))
@ -39,36 +41,115 @@ describe("check the applications endpoints", () => {
const res = await makeRequest("post", "/applications/search")
expect(res).toSatisfyApiSpec()
})
})
describe("check the tables endpoints", () => {
it("should allow retrieving applications through search", async () => {
const res = await makeRequest("post", "/tables/search")
it("should allow creating an application", async () => {
const res = await makeRequest("post", "/applications", {
name: "new App"
}, null)
expect(res).toSatisfyApiSpec()
})
it("should allow updating an application", async () => {
const app = config.getApp()
const appId = config.getAppId()
const res = await makeRequest("put", `/applications/${appId}`, {
...app,
name: "updated app name",
}, appId)
expect(res).toSatisfyApiSpec()
})
it("should allow retrieving an application", async () => {
const res = await makeRequest("get", `/applications/${config.getAppId()}`)
expect(res).toSatisfyApiSpec()
})
it("should allow deleting an application", async () => {
const res = await makeRequest("delete", `/applications/${config.getAppId()}`)
expect(res).toSatisfyApiSpec()
})
})
describe("check the tables endpoints", () => {
it("should allow retrieving tables through search", async () => {
const res = await makeRequest("post", "/tables/search")
expect(res).toSatisfyApiSpec()
})
it("should allow creating a table", async () => {
})
it("should allow updating a table", async () => {
})
it("should allow retrieving a table", async () => {
})
it("should allow deleting a table", async () => {
})
})
describe("check the rows endpoints", () => {
it("should allow retrieving applications through search", async () => {
it("should allow retrieving rows through search", async () => {
const res = await makeRequest("post", `/tables/${table._id}/rows/search`, {
query: {
},
})
expect(res).toSatisfyApiSpec()
})
it("should allow creating a row", async () => {
})
it("should allow updating a row", async () => {
})
it("should allow retrieving a row", async () => {
})
it("should allow deleting a row", async () => {
})
})
describe("check the users endpoints", () => {
it("should allow retrieving applications through search", async () => {
it("should allow retrieving users through search", async () => {
const res = await makeRequest("post", "/users/search")
expect(res).toSatisfyApiSpec()
})
it("should allow creating a user", async () => {
})
it("should allow updating a user", async () => {
})
it("should allow retrieving a user", async () => {
})
it("should allow deleting a user", async () => {
})
})
describe("check the queries endpoints", () => {
it("should allow retrieving applications through search", async () => {
it("should allow retrieving queries through search", async () => {
const res = await makeRequest("post", "/queries/search")
expect(res).toSatisfyApiSpec()
})
it("should allow executing a query", async () => {
})
})

View File

@ -205,4 +205,15 @@ exports.automationValidator = (existing = false) => {
}).unknown(true))
}
exports.applicationValidator = () => {}
exports.applicationValidator = () => {
// prettier-ignore
return joiValidator.body(Joi.object({
_id: OPTIONAL_STRING,
_rev: OPTIONAL_STRING,
name: Joi.string().required(),
url: OPTIONAL_STRING,
template: Joi.object({
templateString: OPTIONAL_STRING,
}).unknown(true),
}).unknown(true))
}

View File

@ -49,6 +49,10 @@ class TestConfiguration {
return this.request
}
getApp() {
return this.app
}
getAppId() {
return this.appId
}