| 
									
										
										
										
											2017-04-27 10:17:15 +01:00
										 |  |  | const testPackage = require('../../helpers/test-package'); | 
					
						
							|  |  |  | const Dgeni = require('dgeni'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('postProcessHtml', function() { | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  |   let dgeni, injector, processor, createDocMessage; | 
					
						
							| 
									
										
										
										
											2017-04-27 10:17:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   beforeEach(function() { | 
					
						
							|  |  |  |     dgeni = new Dgeni([testPackage('post-process-package', true)]); | 
					
						
							|  |  |  |     injector = dgeni.configureInjector(); | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  |     createDocMessage = injector.get('createDocMessage'); | 
					
						
							| 
									
										
										
										
											2017-04-27 10:17:15 +01:00
										 |  |  |     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']); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2017-04-28 11:34:01 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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'); | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  |     const doc = { docType: 'a', renderedContent: '' }; | 
					
						
							| 
									
										
										
										
											2017-04-28 11:34:01 +01:00
										 |  |  |     processor.plugins = [() => addError]; | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  |     expect(() => processor.$process([doc])).toThrowError(createDocMessage('There was an error', doc)); | 
					
						
							| 
									
										
										
										
											2017-04-28 11:34:01 +01:00
										 |  |  |     expect(log.error).not.toHaveBeenCalled(); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2017-04-27 10:17:15 +01:00
										 |  |  | }); |