UNPKG

shunter

Version:

A Node.js application built to read JSON and translate it into HTML

93 lines (83 loc) 2.4 kB
'use strict'; process.env.TZ = 'UTC'; module.exports = function (configArgument) { var fs = require('fs'); var path = require('path'); var cheerio = require('cheerio'); var sinon = require('sinon'); var config = require('../../lib/config')('development', configArgument || null, {}); var renderer = null; var assetPath = null; return { getDust: function () { return renderer.dust; }, setup: function () { var args = [].slice.call(arguments, 0); config.timer = sinon.stub().returns(sinon.stub()); renderer = require('../../lib/renderer')(config); assetPath = sinon.stub(renderer, 'assetPath').returnsArg(0); renderer.initDustExtensions(); if (args.length > 0) { if (args[0] === 'all') { // We need to pretend to the renderer it is being called from a host app, not the Mocka process renderer.compileTemplates('.'); } else { renderer.compilePaths.apply(renderer, [].slice.call(arguments, 0)); } } }, teardown: function () { renderer.dust.cache = {}; renderer = null; assetPath.restore(); }, data: function (file) { if (/\.json$/.test(file)) { var json = fs.readFileSync(path.join(config.path.root, file), 'utf8'); return JSON.parse(json); } return require(path.join(config.path.root, file)); }, render: function (template, req, res, data, callback) { var _req; var _res; var _data; var _callback; if (arguments.length === 3) { _req = {url: ''}; _res = {}; _data = req; _callback = res; } else if (arguments.length === 5) { _req = req; _res = res; _data = data; _callback = callback; } else { throw new Error('Invalid arguments for render test helper'); } if (template.includes('{')) { if (!renderer) { this.setup(); } renderer.dust.loadSource(renderer.dust.compile(template, 'test-template')); template = 'test-template'; } renderer.renderPartial(template, _req, _res, _data, function (err, raw) { if (raw) { var $ = cheerio.load(raw); $.$ = $; // Compatibility change. Will deprecate _callback(null, $, raw); } else { if (!_data) { console.error('No test data to render'); } else if (!_data.layout || !_data.layout.namespace) { console.error('Namespace was not specified in test data'); } _callback(err, null, null); } }); } }; };