Merge pull request #3542 from Budibase/ak-fixes
Query schema fixes + card fixes
This commit is contained in:
commit
456760f479
|
@ -182,7 +182,7 @@
|
||||||
}}
|
}}
|
||||||
styles={{
|
styles={{
|
||||||
display: "grid",
|
display: "grid",
|
||||||
"grid-template-columns": `repeat(auto-fill, minmax(${cardWidth}px, 1fr))`,
|
"grid-template-columns": `repeat(auto-fill, minmax(min(${cardWidth}px, 100%), 1fr))`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<BlockComponent
|
<BlockComponent
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
const { processString } = require("@budibase/string-templates")
|
const { processString } = require("@budibase/string-templates")
|
||||||
const CouchDB = require("../../db")
|
const CouchDB = require("../../db")
|
||||||
const { generateQueryID, getQueryParams } = require("../../db/utils")
|
const {
|
||||||
|
generateQueryID,
|
||||||
|
getQueryParams,
|
||||||
|
isProdAppID,
|
||||||
|
} = require("../../db/utils")
|
||||||
const { BaseQueryVerbs } = require("../../constants")
|
const { BaseQueryVerbs } = require("../../constants")
|
||||||
const env = require("../../environment")
|
|
||||||
const { Thread, ThreadType } = require("../../threads")
|
const { Thread, ThreadType } = require("../../threads")
|
||||||
|
|
||||||
const Runner = new Thread(ThreadType.QUERY, { timeoutMs: 10000 })
|
const Runner = new Thread(ThreadType.QUERY, { timeoutMs: 10000 })
|
||||||
|
@ -90,10 +93,9 @@ exports.find = async function (ctx) {
|
||||||
const db = new CouchDB(ctx.appId)
|
const db = new CouchDB(ctx.appId)
|
||||||
const query = enrichQueries(await db.get(ctx.params.queryId))
|
const query = enrichQueries(await db.get(ctx.params.queryId))
|
||||||
// remove properties that could be dangerous in real app
|
// remove properties that could be dangerous in real app
|
||||||
if (env.isProd()) {
|
if (isProdAppID(ctx.appId)) {
|
||||||
delete query.fields
|
delete query.fields
|
||||||
delete query.parameters
|
delete query.parameters
|
||||||
delete query.schema
|
|
||||||
}
|
}
|
||||||
ctx.body = query
|
ctx.body = query
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
// mock out postgres for this
|
// Mock out postgres for this
|
||||||
jest.mock("pg")
|
jest.mock("pg")
|
||||||
|
|
||||||
|
// Mock isProdAppID to we can later mock the implementation and pretend we are
|
||||||
|
// using prod app IDs
|
||||||
|
const authDb = require("@budibase/auth/db")
|
||||||
|
const { isProdAppID } = authDb
|
||||||
|
const mockIsProdAppID = jest.fn(isProdAppID)
|
||||||
|
authDb.isProdAppID = mockIsProdAppID
|
||||||
|
|
||||||
const setup = require("./utilities")
|
const setup = require("./utilities")
|
||||||
const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
|
const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
|
||||||
const { basicQuery, basicDatasource } = setup.structures
|
const { basicQuery, basicDatasource } = setup.structures
|
||||||
|
@ -19,10 +26,12 @@ describe("/queries", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
async function createInvalidIntegration() {
|
async function createInvalidIntegration() {
|
||||||
const datasource = await config.createDatasource({datasource: {
|
const datasource = await config.createDatasource({
|
||||||
...basicDatasource().datasource,
|
datasource: {
|
||||||
source: "INVALID_INTEGRATION",
|
...basicDatasource().datasource,
|
||||||
}})
|
source: "INVALID_INTEGRATION",
|
||||||
|
},
|
||||||
|
})
|
||||||
const query = await config.createQuery()
|
const query = await config.createQuery()
|
||||||
return { datasource, query }
|
return { datasource, query }
|
||||||
}
|
}
|
||||||
|
@ -96,11 +105,32 @@ describe("/queries", () => {
|
||||||
.set(await config.defaultHeaders())
|
.set(await config.defaultHeaders())
|
||||||
.expect(200)
|
.expect(200)
|
||||||
.expect("Content-Type", /json/)
|
.expect("Content-Type", /json/)
|
||||||
expect(res.body.fields).toBeUndefined()
|
expect(res.body.fields).toBeDefined()
|
||||||
expect(res.body.parameters).toBeUndefined()
|
expect(res.body.parameters).toBeDefined()
|
||||||
expect(res.body.schema).toBeUndefined()
|
expect(res.body.schema).toBeDefined()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should remove sensitive info for prod apps", async () => {
|
||||||
|
// Mock isProdAppID to pretend we are using a prod app
|
||||||
|
mockIsProdAppID.mockClear()
|
||||||
|
mockIsProdAppID.mockImplementation(() => true)
|
||||||
|
|
||||||
|
const query = await config.createQuery()
|
||||||
|
const res = await request
|
||||||
|
.get(`/api/queries/${query._id}`)
|
||||||
|
.set(await config.defaultHeaders())
|
||||||
|
.expect("Content-Type", /json/)
|
||||||
|
.expect(200)
|
||||||
|
expect(res.body._id).toEqual(query._id)
|
||||||
|
expect(res.body.fields).toBeUndefined()
|
||||||
|
expect(res.body.parameters).toBeUndefined()
|
||||||
|
expect(res.body.schema).toBeDefined()
|
||||||
|
|
||||||
|
// Reset isProdAppID mock
|
||||||
|
expect(mockIsProdAppID).toHaveBeenCalledTimes(1)
|
||||||
|
mockIsProdAppID.mockImplementation(isProdAppID)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("destroy", () => {
|
describe("destroy", () => {
|
||||||
|
|
Loading…
Reference in New Issue