tests/functional-test.js
/* jshint expr: true */
/* Included above statement for chai*/
import chai from 'chai';
import sinonChai from 'sinon-chai';
import {
Builder as BroccoliBuilder
}
from 'broccoli';
import fixtureTree from 'broccoli-fixturify';
import stripAnsi from 'strip-ansi';
import fixtures from './fixtures';
import BroccoliLeasotFilter from '../src/index';
let expect = chai.expect;
chai.use(sinonChai);
describe('Functional test suite for Broccoli Leasot', () => {
let broccoliLeasot;
let fileTree;
let message = '';
let konsole = {
log: function(msg) {
message += stripAnsi(msg);
}
};
let checkWithMarkerForGroupByFile = (marker) => {
expect(message).to.include(marker.trim());
};
let checkWithMarkerForGroupByKind = (marker) => {
expect(message).to.include(marker.trim().replace('FIXME','').replace('TODO','').replace('CUSTOM_TAG',''));
};
let setupFixtureTree = function(includeImaginaryExtension = false) {
let tree = {
app: {
css: {
'application.css': fixtures.getCssContent()
},
js: {
'app.js': fixtures.getJsContent()
},
templates: {
'index.handlebars': fixtures.getHbsContent()
}
}
};
if (includeImaginaryExtension) {
tree.app['warriors'] = {
'rocky.balboa': ''
};
}
fileTree = fixtureTree(tree);
};
afterEach(() => {
message = '';
fileTree = null;
});
it('Basic setup', (done) => {
setupFixtureTree();
broccoliLeasot = new BroccoliLeasotFilter(fileTree, {
enabled: true,
kinds: ['TODO', 'FIXME', 'CUSTOM_TAG'],
console: konsole
});
let outputTree = new BroccoliBuilder(broccoliLeasot);
return outputTree.build().then(function() {
fixtures.jsMarkers.forEach(checkWithMarkerForGroupByFile);
fixtures.cssMarkers.forEach(checkWithMarkerForGroupByFile);
fixtures.hbsMarkers.forEach(checkWithMarkerForGroupByFile);
expect(message).to.include('9 markers found');
done();
});
});
it('Group by type', (done) => {
setupFixtureTree();
broccoliLeasot = new BroccoliLeasotFilter(fileTree, {
enabled: true,
kinds: ['TODO', 'FIXME', 'CUSTOM_TAG'],
groupBy: 'kind',
console: konsole
});
let outputTree = new BroccoliBuilder(broccoliLeasot);
return outputTree.build().then(function() {
fixtures.jsMarkers.forEach(checkWithMarkerForGroupByKind);
fixtures.cssMarkers.forEach(checkWithMarkerForGroupByKind);
fixtures.hbsMarkers.forEach(checkWithMarkerForGroupByKind);
done();
});
});
it('Imaginary extension lookup', (done) => {
setupFixtureTree(true);
broccoliLeasot = new BroccoliLeasotFilter(fileTree, {
enabled: true,
extensions: ['balboa'],
console: konsole
});
let outputTree = new BroccoliBuilder(broccoliLeasot);
return outputTree.build().then(function() {
let linkToLeasotDocs = 'https://github.com/pgilad/leasot#supported-languages';
expect(message).to.include(linkToLeasotDocs);
done();
});
});
});