Init project

This commit is contained in:
2023-04-26 17:09:19 +02:00
commit b2f76f3a0d
12 changed files with 2095 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["imageFilename","imageCredits","displayName","dayImageList","nightImageList"],
"properties": {
"imageFilename": {"type": "string"},
"imageCredits": {"type": "string"},
"displayName": {"type": "string"},
"dayHighlight": {"type": "integer", "minimum": 0},
"nightHighlight": {"type": "integer", "minimum": 0},
"sunriseImageList": {
"type": "array",
"minItems" : 0,
"uniqueItems" : true,
"items": {"type": "integer", "minimum": 0}
},
"dayImageList": {
"type": "array",
"minItems" : 0,
"uniqueItems" : true,
"items": {"type": "integer", "minimum": 0}
},
"sunsetImageList": {
"type": "array",
"minItems" : 0,
"uniqueItems" : true,
"items": {"type": "integer", "minimum": 0}
},
"nightImageList": {
"type": "array",
"minItems" : 0,
"uniqueItems" : true,
"items": {"type": "integer", "minimum": 0}
}
},
"errorMessage": {
"required": {
"imageFilename":"The imageFilename property is missing. Consider adding it.",
"imageCredits":"The imageCredits property is missing. Consider adding it.",
"displayName":"The displayName property is missing. Consider adding it.",
"dayImageList":"The dayImageList property is missing. Consider adding it.",
"nightImageList":"The nightImageList property is missing. Consider adding it."
},
"properties": {
"imageFilename": "The imageFilename property must be of type string and reflect a glob of an image, i.e.: myWallpaper_*.jpg.",
"imageCredits": "The imageCredits property must be of type string.",
"displayName": "The displayName property must be of type string.",
"dayHighlight": "The dayHighlight property must be a counting number referencing an image, i.e.: 5 in myWallpaper_5.jpg.",
"nightHighlight": "The nightHighlight property must be a counting number referencing an image, i.e.: 13 in myWallpaper_13.jpg.",
"sunriseImageList": "The sunriseImageList property must be a list of counting numbers referencing images, i.e.: [1, 2, 3, 4].",
"dayImageList": "The dayImageList property must be a list of counting numbers referencing images, i.e.: [1, 2, 3, 4].",
"sunsetImageList": "The sunsetImageList property must be a list of counting numbers referencing images, i.e.: [1, 2, 3, 4].",
"nightImageList": "The nightImageList property must be a list of counting numbers referencing images, i.e.: [1, 2, 3, 4]."
}
}
}

1853
src/test_manifest_job/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
{
"name": "wppchecker",
"version": "1.0.0",
"description": "",
"main": "wppChecker.js",
"scripts": {
"test": "mocha wppChecker.js --require mocha-step --colors"
},
"author": "PtiSimon",
"license": "ISC",
"dependencies": {
"ajv": "^8.5.0",
"ajv-errors": "^3.0.0",
"chai": "^4.3.4",
"mocha": "^8.4.0",
"mocha-steps": "^1.3.0"
}
}

View File

@@ -0,0 +1,76 @@
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);
});
});