Wallset/src/test_manifest_job/wppChecker.js
2023-04-26 17:09:19 +02:00

76 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require("fs");
const path = require("path");
const { env, exit } = require("process");
const expect = require("chai").expect;
const Ajv = require("ajv").default;
const ajv = new Ajv({allErrors: true});
require("ajv-errors")(ajv);
//let root, slug;
//let workingDirectory = path.join(root, slug);
//console.log(`👷‍♂️ Working with ${slug} slug.`);
const themeSchemaFile = ".gitlab/node_job/json_theme_schema.jsonc";
let wppManifest;
let validator;
let files;
function leftOuterJoin(leftArray, rightArray) {
return leftArray.filter(function(el) {
return this.indexOf(el) < 0;
}, rightArray);
}
function flatReferences(wppManifest) {
allImageIds = [
wppManifest.dayHighlight,
wppManifest.nightHighlight,
...wppManifest.dayImageList,
...wppManifest.nightImageList,
...(wppManifest.sunsetImageList || []),
...(wppManifest.sunriseImageList || [])
];
return allImageIds.filter(el => el !== undefined).map(el => {
return wppManifest.imageFilename.replace("*", el);
});
}
describe('Mandatory Checks', function() {
before(function() {
slug = env.WPP_SLUG;
expect(slug).to.be.a("string").that.is.not.empty;
root = env.WPP_ROOT;
expect(root).to.be.a("string").that.is.not.empty;
workingDirectory = path.join(root, slug);
files = fs.readdirSync(workingDirectory);
expect(files).to.be.an('array').that.is.not.empty;
validator = ajv.compile(JSON.parse(fs.readFileSync(themeSchemaFile, 'utf8')));
});
step('Manifest is an existing json file', function() {
wppManifest = JSON.parse(fs.readFileSync(path.join(workingDirectory, "theme.json"), "utf8"));
});
step('Manifest passes the schema', function() {
const isValid = validator(wppManifest);
if(!isValid) expect.fail(`\n\t${validator.errors.map(el => {return el.message;}).join('\n\t• ')}`);
});
step('There are no missing files', function() {
let references = flatReferences(wppManifest);
references.push("theme.json");
missings = leftOuterJoin(references, files);
expect(missings,
`The following reference${(missings.length > 1)? "s": ""} from theme.json ${(missings.length > 1)? "are": "is"} missing in the pack. Consider adding ${(missings.length > 1)? "them": " it"} to the pack or removing the reference${(missings.length > 1)? "s": ""} from the theme.json:\n\t${missings.join('\n\t• ')}\n`
).to.be.lengthOf(0, );
});
step('There are no orphan files', function() {
let references = flatReferences(wppManifest);
orphans = leftOuterJoin(files.filter(x => x !== "theme.json"), references);
expect(orphans,
`The following orphan file${(orphans.length > 1)? "s are": " is"} not referenced in this theme.json. Consider removing the file${(orphans.length > 1)? "s": ""} or referencing ${(orphans.length > 1)? "them": "it"} in the theme.json:\n\t${orphans.join('\n\t• ')}\n`
).to.be.lengthOf(0);
});
});