85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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: '<a></a>' },
 | 
						|
      { docType: 'b', renderedContent: '<b></b>' },
 | 
						|
      { docType: 'c', renderedContent: '<c></c>' },
 | 
						|
      { docType: 'd', renderedContent: '<d></d>' },
 | 
						|
    ];
 | 
						|
    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: '<a></a>' },
 | 
						|
      { docType: 'b', renderedContent: '<b></b>' },
 | 
						|
      { docType: 'c', renderedContent: '<c></c>' },
 | 
						|
      { docType: 'd', renderedContent: '<d></d>' },
 | 
						|
    ];
 | 
						|
 | 
						|
    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).toHaveBeenCalledWith('There was a problem - doc (a) ');
 | 
						|
  });
 | 
						|
 | 
						|
  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();
 | 
						|
  });
 | 
						|
});
 |