bagpipes
Version:
Less code, more flow. Let's dance!
110 lines (99 loc) • 4.11 kB
JavaScript
;
var should = require('should');
var path = require('path');
var fs = require('fs');
var _ = require('lodash');
var Bagpipes = require('../lib');
describe('bagpipes', function() {
it('should load all system fittings', function(done) {
var dir = path.resolve(__dirname, '../lib/fittings');
fs.readdir(dir, function(err, files) {
if (err) { return done(err); }
var fittingNames = files.map(function(name) { return name.split('.')[0] });
var skipFittings = [ 'onError', 'render', 'read' ]; // these need extra parameters to create
fittingNames = fittingNames.filter(function(name) { return skipFittings.indexOf(name) < 0 });
var fittings = fittingNames.map(function (name) {
var fittingDef = {};
fittingDef[name] = 'nothing';
return fittingDef;
});
var bagpipes = Bagpipes.create({ fittings: fittings });
bagpipes.pipes.fittings.pipes.length.should.eql(fittingNames.length);
done();
});
});
it('should load all user fittings', function(done) {
var dir = path.resolve(__dirname, './fixtures/fittings');
var userFittingsDirs = [ dir ];
fs.readdir(dir, function(err, files) {
if (err) { return done(err); }
var fittingNames = files.map(function(name) { return name.split('.')[0] });
var fittings = fittingNames.map(function (name) {
var fittingDef = {};
fittingDef[name] = 'nothing';
return fittingDef;
});
var bagpipes = Bagpipes.create({ fittings: fittings }, { userFittingsDirs: userFittingsDirs });
bagpipes.pipes.fittings.pipes.length.should.eql(fittingNames.length);
done();
});
});
it('should run a pipe with a system fitting', function(done) {
var pipe = [ { 'emit': 'something' } ];
var bagpipes = Bagpipes.create({ pipe: pipe });
var context = {};
bagpipes.play(bagpipes.getPipe('pipe'), context);
context.output.should.eql('something');
done();
});
it('should load a fitting from a custom directory', function(done) {
var userFittingsDirs = [ path.resolve(__dirname, './fixtures/fittings') ];
var pipe = [ 'emit' ];
var bagpipes = Bagpipes.create({ pipe: pipe }, { userFittingsDirs: userFittingsDirs });
var context = {};
bagpipes.play(bagpipes.getPipe('pipe'), context);
context.output.should.eql('test');
done();
});
it('should load pre-initialized fittings', function(done) {
var emitFitting = function create() {
return function (context, cb) {
cb(null, 'pre-initialized');
}};
var pipe = [ 'emit' ];
var bagpipes = Bagpipes.create({ pipe: pipe }, {fittings: { emit: emitFitting}});
var context = {};
bagpipes.play(bagpipes.getPipe('pipe'), context);
context.output.should.eql('pre-initialized');
done();
});
it('should allow user fittings to override system fittings', function(done) {
var userFittingsDirs = [ path.resolve(__dirname, './fixtures/fittings') ];
var pipe = [ 'test' ];
var bagpipes = Bagpipes.create({ pipe: pipe }, { userFittingsDirs: userFittingsDirs });
var context = {};
bagpipes.play(bagpipes.getPipe('pipe'), context);
context.output.should.eql('test');
done();
});
it('should throw errors if no onError handler', function(done) {
var userFittingsDirs = [ path.resolve(__dirname, './fixtures/fittings') ];
var pipe = [ 'error' ];
var bagpipes = Bagpipes.create({ pipe: pipe }, { userFittingsDirs: userFittingsDirs });
var context = {};
(function() {
bagpipes.play(bagpipes.getPipe('pipe'), context)
}).should.throw.error;
done();
});
it('should handle errors if onError registered', function(done) {
var userFittingsDirs = [ path.resolve(__dirname, './fixtures/fittings') ];
var pipe = [ { onError: 'emit'}, 'error' ];
var bagpipes = Bagpipes.create({ pipe: pipe }, { userFittingsDirs: userFittingsDirs });
var context = {};
bagpipes.play(bagpipes.getPipe('pipe'), context);
context.error.should.be.an.Error;
context.output.should.eql('test');
done();
})
});