84 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								const testPackage = require('../../helpers/test-package');
							 | 
						||
| 
								 | 
							
								const processorFactory = require('./processAliasDocs');
							 | 
						||
| 
								 | 
							
								const Dgeni = require('dgeni');
							 | 
						||
| 
								 | 
							
								const mockLogFactory = require('dgeni/lib/mocks/log');
							 | 
						||
| 
								 | 
							
								const createDocMessageFactory = require('dgeni-packages/base/services/createDocMessage');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('processAliasDocs processor', () => {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  let getDocFromAlias, log, createDocMessage, processor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  beforeEach(() => {
							 | 
						||
| 
								 | 
							
								    getDocFromAlias = jasmine.createSpy('getDocFromAlias');
							 | 
						||
| 
								 | 
							
								    log = mockLogFactory(false);
							 | 
						||
| 
								 | 
							
								    createDocMessage = createDocMessageFactory();
							 | 
						||
| 
								 | 
							
								    processor = processorFactory(getDocFromAlias, log, createDocMessage);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should be available on the injector', () => {
							 | 
						||
| 
								 | 
							
								    const dgeni = new Dgeni([testPackage('angular-api-package')]);
							 | 
						||
| 
								 | 
							
								    const injector = dgeni.configureInjector();
							 | 
						||
| 
								 | 
							
								    const processor = injector.get('processAliasDocs');
							 | 
						||
| 
								 | 
							
								    expect(processor.$process).toBeDefined();
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should run before the correct processor', () => {
							 | 
						||
| 
								 | 
							
								    expect(processor.$runBefore).toEqual(['filterPrivateDocs']);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should run after the correct processor', () => {
							 | 
						||
| 
								 | 
							
								    expect(processor.$runAfter).toEqual(['tags-extracted', 'ids-computed']);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should ignore docs that do not have an `@alias` tag', () => {
							 | 
						||
| 
								 | 
							
								    const docs = [{}];
							 | 
						||
| 
								 | 
							
								    getDocFromAlias.and.returnValue([{ prop1: 'prop-1', prop2: 'prop-2', prop3: 'prop-3' }]);
							 | 
						||
| 
								 | 
							
								    processor.$process(docs);
							 | 
						||
| 
								 | 
							
								    expect(docs).toEqual([{}]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should copy over properties from a valid alias doc', () => {
							 | 
						||
| 
								 | 
							
								    const docs = [{ aliasDocId: 'alias-doc' }];
							 | 
						||
| 
								 | 
							
								    getDocFromAlias.and.returnValue([{ prop1: 'prop-1', prop2: 'prop-2', prop3: 'prop-3' }]);
							 | 
						||
| 
								 | 
							
								    processor.$process(docs);
							 | 
						||
| 
								 | 
							
								    expect(docs).toEqual([
							 | 
						||
| 
								 | 
							
								      { prop1: 'prop-1', prop2: 'prop-2', prop3: 'prop-3' }
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should error if `@alias` does not match a doc', () => {
							 | 
						||
| 
								 | 
							
								    const docs = [{ aliasDocId: 'alias-doc' }];
							 | 
						||
| 
								 | 
							
								    getDocFromAlias.and.returnValue([]);
							 | 
						||
| 
								 | 
							
								    expect(() => processor.$process(docs)).toThrowError('There is no doc that matches "@alias alias-doc" - doc');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should error if `@alias` matches more than one doc', () => {
							 | 
						||
| 
								 | 
							
								    const docs = [{ aliasDocId: 'alias-doc' }];
							 | 
						||
| 
								 | 
							
								    getDocFromAlias.and.returnValue([{id: 'alias-1'}, {id: 'alias-2'}]);
							 | 
						||
| 
								 | 
							
								    expect(() => processor.$process(docs)).toThrowError('There is more than one doc that matches "@alias alias-doc": alias-1, alias-2. - doc');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should remove all but the specified properties from the original doc', () => {
							 | 
						||
| 
								 | 
							
								    processor.propertiesToKeep = ['x', 'y'];
							 | 
						||
| 
								 | 
							
								    const docs = [{ aliasDocId: 'alias-doc', x: 'original-x', z: 'original-z' }];
							 | 
						||
| 
								 | 
							
								    getDocFromAlias.and.returnValue([{}]);
							 | 
						||
| 
								 | 
							
								    processor.$process(docs);
							 | 
						||
| 
								 | 
							
								    expect(docs).toEqual([{ x: 'original-x' }]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should copy over all but the specified properties from the aliased doc', () => {
							 | 
						||
| 
								 | 
							
								    processor.propertiesToKeep = ['x', 'y'];
							 | 
						||
| 
								 | 
							
								    const docs = [{ aliasDocId: 'alias-doc', x: 'original-x', z: 'original-z' }];
							 | 
						||
| 
								 | 
							
								    getDocFromAlias.and.returnValue([{ x: 'alias-x', y: 'alias-y', z: 'alias-z' }]);
							 | 
						||
| 
								 | 
							
								    processor.$process(docs);
							 | 
						||
| 
								 | 
							
								    expect(docs).toEqual([{ x: 'original-x', z: 'alias-z' }]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should have default properties to keep', () => {
							 | 
						||
| 
								 | 
							
								    expect(processor.propertiesToKeep).toEqual([
							 | 
						||
| 
								 | 
							
								      'name', 'id', 'aliases', 'fileInfo', 'startingLine', 'endingLine',
							 | 
						||
| 
								 | 
							
								      'path', 'originalModule', 'outputPath', 'privateExport', 'moduleDoc'
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |