|
- const CUR_VER_PREFIX = '0.5';
- const MF_DIR = 'plugins';
- const fs = require("fs");
-
- const Ajv = require('ajv');
- const ajv = new Ajv({allErrors:true});
- const validate = ajv.compile(require('./manifest.json'));
-
- describe("json", function() {
-
- let testMF = (fileName) => {
- it("manifest file should be valid", () => {
- try {
- const filePath = `${MF_DIR}/${fileName}`;
- if (!filePath.toLowerCase().endsWith('.json')) {
- fail("manifests should have .json extension");
- }
-
- const fileContent = fs.readFileSync(filePath, 'utf8');
- const mfObj = JSON.parse(fileContent);
- const valid = validate(mfObj);
- if (!valid) {
- validate.errors.map(e => e.message += ` in ${filePath}`)
- fail(validate.errors);
- }
-
- if (!(/^[a-zA-Z0-9_\-]*$/).test(mfObj.slug)) {
- fail(`slug does not match regex in ${filePath}`);
- }
-
- if (fileName.replace('.json', '') !== mfObj.slug) {
- fail(`slug '${mfObj.slug}' does not match fileName: ${fileName}`);
- }
-
- if (mfObj.version && !mfObj.version.startsWith(CUR_VER_PREFIX)) {
- fail(`version '${mfObj.version}' must start with '${CUR_VER_PREFIX}'`);
- }
-
- } catch(err){
- fail(`Error while trying to validate manifest: ${fileName}\n${err}`);
- }
- });
- };
-
- fs.readdirSync(MF_DIR).map(testMF);
-
- });
|