mirror of
https://gitlab.com/Thoscellen/Wallset.git
synced 2025-05-31 19:04:51 +02:00
76 lines
3.0 KiB
JavaScript
76 lines
3.0 KiB
JavaScript
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);
|
||
});
|
||
|
||
}); |