const testPackage = require('../../helpers/test-package');
const Dgeni = require('dgeni');
describe('postProcessHtml', function() {
let dgeni, injector, processor, createDocMessage;
beforeEach(function() {
dgeni = new Dgeni([testPackage('post-process-package', true)]);
injector = dgeni.configureInjector();
createDocMessage = injector.get('createDocMessage');
processor = injector.get('postProcessHtml');
processor.docTypes = ['a', 'b'];
});
it('should be available from the injector', () => {
expect(processor).toBeDefined();
});
it('should only process docs that match the specified docTypes', () => {
const elements = [];
const captureFirstElement = ast => {
elements.push(ast.children[0].tagName);
};
processor.plugins = [() => captureFirstElement];
const docs = [
{ docType: 'a', renderedContent: '' },
{ docType: 'b', renderedContent: '' },
{ docType: 'c', renderedContent: '' },
{ docType: 'd', renderedContent: '' },
];
processor.$process(docs);
expect(elements).toEqual(['a', 'b']);
});
it('should run all the plugins on each doc', () => {
const capitalizeFirstElement = ast => {
ast.children[0].tagName = ast.children[0].tagName.toUpperCase();
};
const addOneToFirstElement = ast => {
ast.children[0].tagName = ast.children[0].tagName + '1';
};
const elements = [];
const captureFirstElement = ast => {
elements.push(ast.children[0].tagName);
};
const docs = [
{ docType: 'a', renderedContent: '' },
{ docType: 'b', renderedContent: '' },
{ docType: 'c', renderedContent: '' },
{ docType: 'd', renderedContent: '' },
];
processor.plugins = [
() => capitalizeFirstElement,
() => addOneToFirstElement,
() => captureFirstElement
];
processor.$process(docs);
expect(elements).toEqual(['A1', 'B1']);
});
it('should report non-fatal errors', () => {
const log = injector.get('log');
const addWarning = (ast, file) => {
file.message('There was a problem');
};
processor.plugins = [() => addWarning];
processor.$process([{ docType: 'a', renderedContent: '' }]);
expect(log.warn).toHaveBeenCalled();
});
it('should throw on fatal errors', () => {
const log = injector.get('log');
const addError = (ast, file) => {
file.fail('There was an error');
};
const doc = { docType: 'a', renderedContent: '' };
processor.plugins = [() => addError];
expect(() => processor.$process([doc])).toThrowError(createDocMessage('There was an error', doc));
expect(log.error).not.toHaveBeenCalled();
});
});