Dallas-Makerspace / vcc-grid-os-ui

https://dmsvintagecomputers.com
BSD 2-Clause "Simplified" License
1 stars 0 forks source link

(bugfix) Resolves Issue #10 - Frontmatter rendering #11

Closed denzuko closed 6 years ago

denzuko commented 6 years ago

Root cause:

Delta:

Future Proof Resolve:

denzuko commented 6 years ago

Details on how to setup unit tests:

Needed changes:

before_install:

script:

var posts = dirs.reduce(function(prev, dir, index, list) { var path = paths[dir]; describe(path, function() { prev[dir] = readDir(path); }); return prev; }, {});

dirs.forEach(function(dir) { var path = paths[dir]; describe(path, function() { posts[dir].forEach(function(post) { it(post.name, testsdir); }); }); });

function readPost(dir, filename) { var buffer = fs.readFileSync(dir + filename), file = buffer.toString('utf8');

try { var parts = file.split('---'), frontmatter = parts[1];

it(filename, function() { assert.doesNotThrow(function() { jsyaml.load(frontmatter); }); });

return { name: filename, file: file, metadata: jsyaml.load(frontmatter), content: parts[2] }; } catch(err) {} }

function readDir(dir) { return fs.readdirSync(dir).map(function(filename) { return readPost(dir, filename); }); }

var tests = { 'blog': function(dir, file) { return function() { var file = post.file, metadata = post.metadata, content = post.content, keys = [ 'published', 'date', 'layout', 'category', 'title', 'image', 'permalink', 'tags'];

// HTTPS images & iframes in blog var urls = file.match(/https?:\/\/[\w,%-\/.]+\/?/g); if (urls) urls.forEach(function(url) { assert.ok(!(/http:[^'\"]+.(jpg|png|gif)/).test(url), url + ' should be https'); });

var iframes = file.match(/<iframe [^>]src=[\"'][^\"']+/g); if (iframes) iframes.forEach(function(iframe) { assert.ok(!(/<iframe [^>]src=[\"']http:/).test(iframe), iframe + ' should be https'); assert.ok(!(/<iframe [^>]src=[\"']https:\/\/[abcd].tiles.mapbox.com..html[^\?]/).test(iframe), iframe + ' is insecure embedded map (add ?secure=1)'); });

assert.equal(typeof metadata, 'object'); assert.ok('layout' in metadata, missing('layout')); assert.ok('category' in metadata, missing('category')); assert.ok('title' in metadata, missing('title')); assert.ok('image' in metadata, missing('image')); assert.ok('permalink' in metadata, missing('permalink')); assert.ok('tags' in metadata, missing('tags'));

if (metadata.date) { assert.ok(metadata.date instanceof Date, invalid('date', metadata.date)); }

assert.equal(metadata.category, 'blog', invalid('category', metadata.category)); assert.ok(isImage(metadata.image), invalid('image', metadata.image)); assert.ok(/^\/blog\//.test(metadata.permalink), invalid('permalink', metadata.permalink));

assert.ok(content.indexOf('') !== -1, missing(''));

var extraKeys = Object.keys(metadata).diff(keys); assert.deepEqual(extraKeys, [], extraneous(extraKeys)); }; } };

// Build a list of team member names var team = posts.team.map(function(post) { return post.metadata.title; });

// Later, in a test assertion, make sure that that // the author of a blog post is a team member. assert.ok(team.indexOf(author) !== -1, 'no team post found for author ' + author);

 ```