Update tests
This commit is contained in:
@@ -126,7 +126,9 @@ rules:
|
|||||||
func-call-spacing: error
|
func-call-spacing: error
|
||||||
arrow-spacing: error
|
arrow-spacing: error
|
||||||
generator-star-spacing: error
|
generator-star-spacing: error
|
||||||
|
object-curly-spacing: [error, never]
|
||||||
rest-spread-spacing: error
|
rest-spread-spacing: error
|
||||||
|
key-spacing: [error, {afterColon: false}]
|
||||||
computed-property-spacing: error
|
computed-property-spacing: error
|
||||||
array-bracket-spacing: [error, never]
|
array-bracket-spacing: [error, never]
|
||||||
no-whitespace-before-property: error
|
no-whitespace-before-property: error
|
||||||
|
|||||||
@@ -7,14 +7,16 @@
|
|||||||
|
|
||||||
//Files editions
|
//Files editions
|
||||||
describe("Check files editions (checkout your files if needed)", () => {
|
describe("Check files editions (checkout your files if needed)", () => {
|
||||||
describe("Auto-generated files were not modified", () => void test.each([
|
describe("Auto-generated files were not modified", () =>
|
||||||
|
void test.each([
|
||||||
"README.md",
|
"README.md",
|
||||||
"source/plugins/README.md",
|
"source/plugins/README.md",
|
||||||
"source/templates/README.md",
|
"source/templates/README.md",
|
||||||
"action.yml",
|
"action.yml",
|
||||||
"settings.example.json"
|
"settings.example.json",
|
||||||
])("%s", async file => expect((await diff()).includes(file)).toBe(false)))
|
])("%s", async file => expect((await diff()).includes(file)).toBe(false)))
|
||||||
describe("Repository level files were not modified", () => void test.each([
|
describe("Repository level files were not modified", () =>
|
||||||
|
void test.each([
|
||||||
".github/config/*",
|
".github/config/*",
|
||||||
".github/ISSUE_TEMPLATE/*",
|
".github/ISSUE_TEMPLATE/*",
|
||||||
".github/PULL_REQUEST_TEMPLATE/*",
|
".github/PULL_REQUEST_TEMPLATE/*",
|
||||||
@@ -35,11 +37,12 @@
|
|||||||
"tests/ci.test.js",
|
"tests/ci.test.js",
|
||||||
"source/.eslintrc.yml",
|
"source/.eslintrc.yml",
|
||||||
"source/app/mocks/.eslintrc.yml",
|
"source/app/mocks/.eslintrc.yml",
|
||||||
"vercel.json"
|
"vercel.json",
|
||||||
])("%s", async file => expect((await diff()).filter(edited => new RegExp(`^${file.replace(/[.]/g, "[.]").replace(/[*]/g, "[\\s\\S]*")}$`).test(edited)).length).toBe(0)))
|
])("%s", async file => expect((await diff()).filter(edited => new RegExp(`^${file.replace(/[.]/g, "[.]").replace(/[*]/g, "[\\s\\S]*")}$`).test(edited)).length).toBe(0)))
|
||||||
})
|
})
|
||||||
|
|
||||||
//Templates editions
|
//Templates editions
|
||||||
describe("Check templates editions", () => {
|
describe("Check templates editions", () => {
|
||||||
test("Use community templates instead (see https://github.com/lowlighter/metrics/tree/master/source/templates/community)", async () => void expect((await diff()).filter(edited => /^sources[/]templates[/]/.test(edited) && /^source[/]templates[/](?:classic|terminal|markdown|repository|community)[/][\s\S]*$/.test(edited)).length).toBe(0))
|
test("Use community templates instead (see https://github.com/lowlighter/metrics/tree/master/source/templates/community)", async () =>
|
||||||
|
void expect((await diff()).filter(edited => /^sources[/]templates[/]/.test(edited) && /^source[/]templates[/](?:classic|terminal|markdown|repository|community)[/][\s\S]*$/.test(edited)).length).toBe(0))
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
const action = yaml.load(fs.readFileSync(path.join(__dirname, "../action.yml"), "utf8"))
|
const action = yaml.load(fs.readFileSync(path.join(__dirname, "../action.yml"), "utf8"))
|
||||||
action.defaults = Object.fromEntries(Object.entries(action.inputs).map(([key, { default: value }]) => [key, value]))
|
action.defaults = Object.fromEntries(Object.entries(action.inputs).map(([key, { default: value }]) => [key, value]))
|
||||||
action.input = vars => Object.fromEntries([...Object.entries(action.defaults), ...Object.entries(vars)].map(([key, value]) => [`INPUT_${key.toLocaleUpperCase()}`, value]))
|
action.input = vars => Object.fromEntries([...Object.entries(action.defaults), ...Object.entries(vars)].map(([key, value]) => [`INPUT_${key.toLocaleUpperCase()}`, value]))
|
||||||
action.run = async (vars) => await new Promise((solve, reject) => {
|
action.run = async vars =>
|
||||||
|
await new Promise((solve, reject) => {
|
||||||
let [stdout, stderr] = ["", ""]
|
let [stdout, stderr] = ["", ""]
|
||||||
const env = { ...process.env, ...action.input(vars), GITHUB_REPOSITORY: "lowlighter/metrics" }
|
const env = { ...process.env, ...action.input(vars), GITHUB_REPOSITORY: "lowlighter/metrics" }
|
||||||
const child = processes.spawn("node", ["source/app/action/index.mjs"], { env })
|
const child = processes.spawn("node", ["source/app/action/index.mjs"], { env })
|
||||||
@@ -28,8 +29,9 @@
|
|||||||
|
|
||||||
//Web instance
|
//Web instance
|
||||||
const web = {}
|
const web = {}
|
||||||
web.run = async (vars) => (await axios(`http://localhost:3000/lowlighter?${new url.URLSearchParams(Object.fromEntries(Object.entries(vars).map(([key, value]) => [key.replace(/^plugin_/, "").replace(/_/g, "."), value])))}`)).status === 200
|
web.run = async vars => (await axios(`http://localhost:3000/lowlighter?${new url.URLSearchParams(Object.fromEntries(Object.entries(vars).map(([key, value]) => [key.replace(/^plugin_/, "").replace(/_/g, "."), value])))}`)).status === 200
|
||||||
web.start = async () => new Promise(solve => {
|
web.start = async () =>
|
||||||
|
new Promise(solve => {
|
||||||
let stdout = ""
|
let stdout = ""
|
||||||
web.instance = processes.spawn("node", ["source/app/web/index.mjs"], { env: { ...process.env, USE_MOCKED_DATA: true, NO_SETTINGS: true } })
|
web.instance = processes.spawn("node", ["source/app/web/index.mjs"], { env: { ...process.env, USE_MOCKED_DATA: true, NO_SETTINGS: true } })
|
||||||
web.instance.stdout.on("data", data => (stdout += data, /Server ready !/.test(stdout) ? solve() : null))
|
web.instance.stdout.on("data", data => (stdout += data, /Server ready !/.test(stdout) ? solve() : null))
|
||||||
@@ -41,8 +43,16 @@
|
|||||||
require("./../source/app/web/statics/app.placeholder.js")
|
require("./../source/app/web/statics/app.placeholder.js")
|
||||||
const placeholder = globalThis.placeholder
|
const placeholder = globalThis.placeholder
|
||||||
delete globalThis.placeholder
|
delete globalThis.placeholder
|
||||||
placeholder.init({faker, ejs, axios:{async get(url) { return axios(`http://localhost:3000${url}`) }}})
|
placeholder.init({
|
||||||
placeholder.run = async (vars) => {
|
faker,
|
||||||
|
ejs,
|
||||||
|
axios: {
|
||||||
|
async get(url) {
|
||||||
|
return axios(`http://localhost:3000${url}`)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
placeholder.run = async vars => {
|
||||||
const options = Object.fromEntries(Object.entries(vars).map(([key, value]) => [key.replace(/^plugin_/, "").replace(/_/g, "."), value]))
|
const options = Object.fromEntries(Object.entries(vars).map(([key, value]) => [key.replace(/^plugin_/, "").replace(/_/g, "."), value]))
|
||||||
const enabled = Object.fromEntries(Object.entries(vars).filter(([key]) => /^plugin_[a-z]+$/.test(key)))
|
const enabled = Object.fromEntries(Object.entries(vars).filter(([key]) => /^plugin_[a-z]+$/.test(key)))
|
||||||
const config = Object.fromEntries(Object.entries(options).filter(([key]) => /^config[.]/.test(key)))
|
const config = Object.fromEntries(Object.entries(options).filter(([key]) => /^config[.]/.test(key)))
|
||||||
@@ -75,10 +85,14 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
//Load metadata (as jest doesn't support ESM modules, we use this dirty hack)
|
//Load metadata (as jest doesn't support ESM modules, we use this dirty hack)
|
||||||
const metadata = JSON.parse(`${processes.spawnSync("node", [
|
const metadata = JSON.parse(`${
|
||||||
"--input-type", "module",
|
processes.spawnSync("node", [
|
||||||
"--eval", 'import metadata from "./source/app/metrics/metadata.mjs";console.log(JSON.stringify(await metadata({log:false})))'
|
"--input-type",
|
||||||
]).stdout}`)
|
"module",
|
||||||
|
"--eval",
|
||||||
|
'import metadata from "./source/app/metrics/metadata.mjs";console.log(JSON.stringify(await metadata({log:false})))',
|
||||||
|
]).stdout
|
||||||
|
}`)
|
||||||
|
|
||||||
//Build tests index
|
//Build tests index
|
||||||
const tests = []
|
const tests = []
|
||||||
@@ -101,13 +115,13 @@
|
|||||||
["terminal", {}],
|
["terminal", {}],
|
||||||
["repository", { repo: "metrics" }],
|
["repository", { repo: "metrics" }],
|
||||||
])("Template : %s", (template, query) => {
|
])("Template : %s", (template, query) => {
|
||||||
for (const [name, input, {skip = [], modes = [], timeout} = {}] of tests)
|
for (const [name, input, { skip = [], modes = [], timeout } = {}] of tests) {
|
||||||
if ((skip.includes(template)) || ((modes.length) && (!modes.includes("action"))))
|
if ((skip.includes(template)) || ((modes.length) && (!modes.includes("action"))))
|
||||||
test.skip(name, () => null)
|
test.skip(name, () => null)
|
||||||
else
|
else
|
||||||
test(name, async () => expect(await action.run({ template, base: "", query: JSON.stringify(query), plugins_errors_fatal: true, dryrun: true, use_mocked_data: true, verify: true, ...input })).toBe(true), timeout)
|
test(name, async () => expect(await action.run({ template, base: "", query: JSON.stringify(query), plugins_errors_fatal: true, dryrun: true, use_mocked_data: true, verify: true, ...input })).toBe(true), timeout)
|
||||||
})
|
}
|
||||||
)
|
}))
|
||||||
|
|
||||||
describe("Web instance", () =>
|
describe("Web instance", () =>
|
||||||
describe.each([
|
describe.each([
|
||||||
@@ -115,23 +129,23 @@
|
|||||||
["terminal", {}],
|
["terminal", {}],
|
||||||
["repository", { repo: "metrics" }],
|
["repository", { repo: "metrics" }],
|
||||||
])("Template : %s", (template, query) => {
|
])("Template : %s", (template, query) => {
|
||||||
for (const [name, input, {skip = [], modes = [], timeout} = {}] of tests)
|
for (const [name, input, { skip = [], modes = [], timeout } = {}] of tests) {
|
||||||
if ((skip.includes(template)) || ((modes.length) && (!modes.includes("web"))))
|
if ((skip.includes(template)) || ((modes.length) && (!modes.includes("web"))))
|
||||||
test.skip(name, () => null)
|
test.skip(name, () => null)
|
||||||
else
|
else
|
||||||
test(name, async () => expect(await web.run({ template, base: 0, ...query, plugins_errors_fatal: true, verify: true, ...input })).toBe(true), timeout)
|
test(name, async () => expect(await web.run({ template, base: 0, ...query, plugins_errors_fatal: true, verify: true, ...input })).toBe(true), timeout)
|
||||||
})
|
}
|
||||||
)
|
}))
|
||||||
|
|
||||||
describe("Web instance (placeholder)", () =>
|
describe("Web instance (placeholder)", () =>
|
||||||
describe.each([
|
describe.each([
|
||||||
["classic", {}],
|
["classic", {}],
|
||||||
["terminal", {}],
|
["terminal", {}],
|
||||||
])("Template : %s", (template, query) => {
|
])("Template : %s", (template, query) => {
|
||||||
for (const [name, input, {skip = [], modes = [], timeout} = {}] of tests)
|
for (const [name, input, { skip = [], modes = [], timeout } = {}] of tests) {
|
||||||
if ((skip.includes(template)) || ((modes.length) && (!modes.includes("placeholder"))))
|
if ((skip.includes(template)) || ((modes.length) && (!modes.includes("placeholder"))))
|
||||||
test.skip(name, () => null)
|
test.skip(name, () => null)
|
||||||
else
|
else
|
||||||
test(name, async () => expect(await placeholder.run({ template, base: 0, ...query, ...input })).toBe(true), timeout)
|
test(name, async () => expect(await placeholder.run({ template, base: 0, ...query, ...input })).toBe(true), timeout)
|
||||||
})
|
}
|
||||||
)
|
}))
|
||||||
|
|||||||
Reference in New Issue
Block a user