Move code to test helpers
This commit is contained in:
parent
786acaa121
commit
de4d7d95c3
|
@ -15,7 +15,6 @@ jest.mock("@budibase/handlebars-helpers/lib/uuid", () => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const fs = require("fs")
|
|
||||||
const {
|
const {
|
||||||
processString,
|
processString,
|
||||||
convertToJS,
|
convertToJS,
|
||||||
|
@ -25,6 +24,7 @@ const {
|
||||||
|
|
||||||
const tk = require("timekeeper")
|
const tk = require("timekeeper")
|
||||||
const { getJsHelperList } = require("../src/helpers")
|
const { getJsHelperList } = require("../src/helpers")
|
||||||
|
const { getParsedManifest } = require("./utils")
|
||||||
|
|
||||||
tk.freeze("2021-01-21T12:00:00")
|
tk.freeze("2021-01-21T12:00:00")
|
||||||
|
|
||||||
|
@ -32,64 +32,16 @@ const processJS = (js, context) => {
|
||||||
return processStringSync(encodeJSBinding(js), context)
|
return processStringSync(encodeJSBinding(js), context)
|
||||||
}
|
}
|
||||||
|
|
||||||
const manifest = JSON.parse(
|
|
||||||
fs.readFileSync(require.resolve("../manifest.json"), "utf8")
|
|
||||||
)
|
|
||||||
|
|
||||||
const collections = Object.keys(manifest)
|
|
||||||
const examples = collections.reduce((acc, collection) => {
|
|
||||||
const functions = Object.entries(manifest[collection])
|
|
||||||
.filter(([_, details]) => details.example)
|
|
||||||
.map(([name, details]) => {
|
|
||||||
const example = details.example
|
|
||||||
let [hbs, js] = example.split("->").map(x => x.trim())
|
|
||||||
if (!js) {
|
|
||||||
// The function has no return value
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Trim 's
|
|
||||||
js = js.replace(/^\'|\'$/g, "")
|
|
||||||
if ((parsedExpected = tryParseJson(js))) {
|
|
||||||
if (Array.isArray(parsedExpected)) {
|
|
||||||
if (typeof parsedExpected[0] === "object") {
|
|
||||||
js = JSON.stringify(parsedExpected)
|
|
||||||
} else {
|
|
||||||
js = parsedExpected.join(",")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const requiresHbsBody = details.requiresBlock
|
|
||||||
return [name, { hbs, js, requiresHbsBody }]
|
|
||||||
})
|
|
||||||
.filter(x => !!x)
|
|
||||||
|
|
||||||
if (Object.keys(functions).length) {
|
|
||||||
acc[collection] = functions
|
|
||||||
}
|
|
||||||
return acc
|
|
||||||
}, {})
|
|
||||||
|
|
||||||
function escapeRegExp(string) {
|
function escapeRegExp(string) {
|
||||||
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") // $& means the whole matched string
|
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") // $& means the whole matched string
|
||||||
}
|
}
|
||||||
|
|
||||||
function tryParseJson(str) {
|
|
||||||
if (typeof str !== "string") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
return JSON.parse(str.replace(/\'/g, '"'))
|
|
||||||
} catch (e) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
describe("manifest", () => {
|
describe("manifest", () => {
|
||||||
|
const manifest = getParsedManifest()
|
||||||
|
|
||||||
describe("examples are valid", () => {
|
describe("examples are valid", () => {
|
||||||
describe.each(Object.keys(examples))("%s", collection => {
|
describe.each(Object.keys(manifest))("%s", collection => {
|
||||||
it.each(examples[collection])("%s", async (_, { hbs, js }) => {
|
it.each(manifest[collection])("%s", async (_, { hbs, js }) => {
|
||||||
const context = {
|
const context = {
|
||||||
double: i => i * 2,
|
double: i => i * 2,
|
||||||
isString: x => typeof x === "string",
|
isString: x => typeof x === "string",
|
||||||
|
@ -110,8 +62,8 @@ describe("manifest", () => {
|
||||||
|
|
||||||
describe("can be parsed and run as js", () => {
|
describe("can be parsed and run as js", () => {
|
||||||
const jsHelpers = getJsHelperList()
|
const jsHelpers = getJsHelperList()
|
||||||
const jsExamples = Object.keys(examples).reduce((acc, v) => {
|
const jsExamples = Object.keys(manifest).reduce((acc, v) => {
|
||||||
acc[v] = examples[v].filter(([key]) => jsHelpers[key])
|
acc[v] = manifest[v].filter(([key]) => jsHelpers[key])
|
||||||
return acc
|
return acc
|
||||||
}, {})
|
}, {})
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
const { getManifest } = require("../src")
|
||||||
|
|
||||||
|
function tryParseJson(str) {
|
||||||
|
if (typeof str !== "string") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return JSON.parse(str.replace(/\'/g, '"'))
|
||||||
|
} catch (e) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.getParsedManifest = () => {
|
||||||
|
const manifest = getManifest()
|
||||||
|
const collections = Object.keys(manifest)
|
||||||
|
const examples = collections.reduce((acc, collection) => {
|
||||||
|
const functions = Object.entries(manifest[collection])
|
||||||
|
.filter(([_, details]) => details.example)
|
||||||
|
.map(([name, details]) => {
|
||||||
|
const example = details.example
|
||||||
|
let [hbs, js] = example.split("->").map(x => x.trim())
|
||||||
|
if (!js) {
|
||||||
|
// The function has no return value
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trim 's
|
||||||
|
js = js.replace(/^\'|\'$/g, "")
|
||||||
|
let parsedExpected
|
||||||
|
if ((parsedExpected = tryParseJson(js))) {
|
||||||
|
if (Array.isArray(parsedExpected)) {
|
||||||
|
if (typeof parsedExpected[0] === "object") {
|
||||||
|
js = JSON.stringify(parsedExpected)
|
||||||
|
} else {
|
||||||
|
js = parsedExpected.join(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const requiresHbsBody = details.requiresBlock
|
||||||
|
return [name, { hbs, js, requiresHbsBody }]
|
||||||
|
})
|
||||||
|
.filter(x => !!x)
|
||||||
|
|
||||||
|
if (Object.keys(functions).length) {
|
||||||
|
acc[collection] = functions
|
||||||
|
}
|
||||||
|
return acc
|
||||||
|
}, {})
|
||||||
|
|
||||||
|
return examples
|
||||||
|
}
|
Loading…
Reference in New Issue