Adding test case to check that query dynamic variables are cached correctly and error scenario is handled.
This commit is contained in:
parent
44a8d36c91
commit
8d9db5c846
|
@ -1,5 +1,6 @@
|
||||||
module FetchMock {
|
module FetchMock {
|
||||||
const fetch = jest.requireActual("node-fetch")
|
const fetch = jest.requireActual("node-fetch")
|
||||||
|
let failCount = 0
|
||||||
|
|
||||||
module.exports = async (url: any, opts: any) => {
|
module.exports = async (url: any, opts: any) => {
|
||||||
function json(body: any, status = 200) {
|
function json(body: any, status = 200) {
|
||||||
|
@ -63,6 +64,17 @@ module FetchMock {
|
||||||
opts,
|
opts,
|
||||||
value: "<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"en-GB\"></html>",
|
value: "<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"en-GB\"></html>",
|
||||||
})
|
})
|
||||||
|
} else if (url.includes("failonce.com")) {
|
||||||
|
failCount++
|
||||||
|
if (failCount === 1) {
|
||||||
|
return json({ message: "error" }, 500)
|
||||||
|
} else {
|
||||||
|
return json({
|
||||||
|
fails: failCount - 1,
|
||||||
|
url,
|
||||||
|
opts,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fetch(url, opts)
|
return fetch(url, opts)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ authDb.isProdAppID = mockIsProdAppID
|
||||||
|
|
||||||
const setup = require("./utilities")
|
const setup = require("./utilities")
|
||||||
const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
|
const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
|
||||||
|
const { checkCacheForDynamicVariable } = require("../../../threads/utils")
|
||||||
const { basicQuery, basicDatasource } = setup.structures
|
const { basicQuery, basicDatasource } = setup.structures
|
||||||
|
|
||||||
describe("/queries", () => {
|
describe("/queries", () => {
|
||||||
|
@ -239,33 +240,7 @@ describe("/queries", () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
it("should work with static variables", async () => {
|
async function dynamicVariableDatasource() {
|
||||||
const datasource = await restDatasource({
|
|
||||||
staticVariables: {
|
|
||||||
variable: "google",
|
|
||||||
variable2: "1",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
const res = await request
|
|
||||||
.post(`/api/queries/preview`)
|
|
||||||
.send({
|
|
||||||
datasourceId: datasource._id,
|
|
||||||
parameters: {},
|
|
||||||
fields: {
|
|
||||||
path: "www.{{ variable }}.com",
|
|
||||||
queryString: "test={{ variable2 }}",
|
|
||||||
},
|
|
||||||
queryVerb: "read",
|
|
||||||
})
|
|
||||||
.set(config.defaultHeaders())
|
|
||||||
.expect("Content-Type", /json/)
|
|
||||||
.expect(200)
|
|
||||||
// these responses come from the mock
|
|
||||||
expect(res.body.schemaFields).toEqual(["url", "opts", "value"])
|
|
||||||
expect(res.body.rows[0].url).toEqual("http://www.google.com?test=1")
|
|
||||||
})
|
|
||||||
|
|
||||||
it("should work with dynamic variables", async () => {
|
|
||||||
const datasource = await restDatasource()
|
const datasource = await restDatasource()
|
||||||
const basedOnQuery = await config.createQuery({
|
const basedOnQuery = await config.createQuery({
|
||||||
...basicQuery(datasource._id),
|
...basicQuery(datasource._id),
|
||||||
|
@ -281,22 +256,62 @@ describe("/queries", () => {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const res = await request
|
return { datasource, query: basedOnQuery }
|
||||||
|
}
|
||||||
|
|
||||||
|
async function preview(datasource, fields) {
|
||||||
|
return await request
|
||||||
.post(`/api/queries/preview`)
|
.post(`/api/queries/preview`)
|
||||||
.send({
|
.send({
|
||||||
datasourceId: datasource._id,
|
datasourceId: datasource._id,
|
||||||
parameters: {},
|
parameters: {},
|
||||||
fields: {
|
fields,
|
||||||
path: "www.google.com",
|
|
||||||
queryString: "test={{ variable3 }}",
|
|
||||||
},
|
|
||||||
queryVerb: "read",
|
queryVerb: "read",
|
||||||
})
|
})
|
||||||
.set(config.defaultHeaders())
|
.set(config.defaultHeaders())
|
||||||
.expect("Content-Type", /json/)
|
.expect("Content-Type", /json/)
|
||||||
.expect(200)
|
.expect(200)
|
||||||
|
}
|
||||||
|
|
||||||
|
it("should work with static variables", async () => {
|
||||||
|
const datasource = await restDatasource({
|
||||||
|
staticVariables: {
|
||||||
|
variable: "google",
|
||||||
|
variable2: "1",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const res = await preview(datasource, {
|
||||||
|
path: "www.{{ variable }}.com",
|
||||||
|
queryString: "test={{ variable2 }}",
|
||||||
|
})
|
||||||
|
// these responses come from the mock
|
||||||
|
expect(res.body.schemaFields).toEqual(["url", "opts", "value"])
|
||||||
|
expect(res.body.rows[0].url).toEqual("http://www.google.com?test=1")
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should work with dynamic variables", async () => {
|
||||||
|
const { datasource } = await dynamicVariableDatasource()
|
||||||
|
const res = await preview(datasource, {
|
||||||
|
path: "www.google.com",
|
||||||
|
queryString: "test={{ variable3 }}",
|
||||||
|
})
|
||||||
expect(res.body.schemaFields).toEqual(["url", "opts", "value"])
|
expect(res.body.schemaFields).toEqual(["url", "opts", "value"])
|
||||||
expect(res.body.rows[0].url).toContain("doctype html")
|
expect(res.body.rows[0].url).toContain("doctype html")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("check that it automatically retries on fail with cached dynamics", async () => {
|
||||||
|
const { datasource, query: base } = await dynamicVariableDatasource()
|
||||||
|
// preview once to cache
|
||||||
|
await preview(datasource, { path: "www.google.com", queryString: "test={{ variable3 }}" })
|
||||||
|
// check its in cache
|
||||||
|
const contents = await checkCacheForDynamicVariable(base._id, "variable3")
|
||||||
|
expect(contents.rows.length).toEqual(1)
|
||||||
|
const res = await preview(datasource, {
|
||||||
|
path: "www.failonce.com",
|
||||||
|
queryString: "test={{ variable3 }}",
|
||||||
|
})
|
||||||
|
expect(res.body.schemaFields).toEqual(["fails", "url", "opts"])
|
||||||
|
expect(res.body.rows[0].fails).toEqual(1)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue