|  |  |  | @ -0,0 +1,92 @@ | 
			
		
	
		
			
				
					|  |  |  |  | import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; | 
			
		
	
		
			
				
					|  |  |  |  | import clone from 'just-clone'; | 
			
		
	
		
			
				
					|  |  |  |  | import { LazyLoadService } from '../services/lazy-load.service'; | 
			
		
	
		
			
				
					|  |  |  |  | import { catchError } from 'rxjs/operators'; | 
			
		
	
		
			
				
					|  |  |  |  | import { of } from 'rxjs'; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | describe('LazyLoadService', () => { | 
			
		
	
		
			
				
					|  |  |  |  |   let spectator: SpectatorService<LazyLoadService>; | 
			
		
	
		
			
				
					|  |  |  |  |   let service: LazyLoadService; | 
			
		
	
		
			
				
					|  |  |  |  |   const scriptElement = document.createElement('script'); | 
			
		
	
		
			
				
					|  |  |  |  |   const linkElement = document.createElement('link'); | 
			
		
	
		
			
				
					|  |  |  |  |   const styleElement = document.createElement('style'); | 
			
		
	
		
			
				
					|  |  |  |  |   const cloneDocument = clone(document); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   const createService = createServiceFactory({ service: LazyLoadService }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   beforeEach(() => { | 
			
		
	
		
			
				
					|  |  |  |  |     spectator = createService(); | 
			
		
	
		
			
				
					|  |  |  |  |     service = spectator.service; | 
			
		
	
		
			
				
					|  |  |  |  |   }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   afterEach(() => (document = clone(cloneDocument))); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   test('should load script with content just one time', done => { | 
			
		
	
		
			
				
					|  |  |  |  |     const spy = jest.spyOn(document, 'createElement'); | 
			
		
	
		
			
				
					|  |  |  |  |     spy.mockReturnValue(scriptElement); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     service.load('https://abp.io', 'script', 'test').subscribe(res => { | 
			
		
	
		
			
				
					|  |  |  |  |       expect(document.querySelector('script[src="https://abp.io"][type="text/javascript"]').textContent).toMatch( | 
			
		
	
		
			
				
					|  |  |  |  |         'test', | 
			
		
	
		
			
				
					|  |  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     scriptElement.onload(null); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     service.load('https://abp.io', 'script', 'test').subscribe(res => { | 
			
		
	
		
			
				
					|  |  |  |  |       expect(document.querySelectorAll('script[src="https://abp.io"][type="text/javascript"]')).toHaveLength(1); | 
			
		
	
		
			
				
					|  |  |  |  |       done(); | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  |   }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   test('should load style element', done => { | 
			
		
	
		
			
				
					|  |  |  |  |     const spy = jest.spyOn(document, 'createElement'); | 
			
		
	
		
			
				
					|  |  |  |  |     spy.mockReturnValue(styleElement); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     const content = '* { color: black; }'; | 
			
		
	
		
			
				
					|  |  |  |  |     service.load(null, 'style', content).subscribe(res => { | 
			
		
	
		
			
				
					|  |  |  |  |       expect(document.querySelector('style').textContent).toMatch(content); | 
			
		
	
		
			
				
					|  |  |  |  |       done(); | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     styleElement.onload(null); | 
			
		
	
		
			
				
					|  |  |  |  |   }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   describe('style with url', () => { | 
			
		
	
		
			
				
					|  |  |  |  |     beforeEach(() => { | 
			
		
	
		
			
				
					|  |  |  |  |       const spy = jest.spyOn(document, 'createElement'); | 
			
		
	
		
			
				
					|  |  |  |  |       spy.mockReturnValue(linkElement); | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     test('should load an link element', done => { | 
			
		
	
		
			
				
					|  |  |  |  |       service.load('https://abp.io', 'style').subscribe(res => { | 
			
		
	
		
			
				
					|  |  |  |  |         expect(document.querySelector('link[type="text/css"][rel="stylesheet"][href="https://abp.io"]')).toBeTruthy(); | 
			
		
	
		
			
				
					|  |  |  |  |         done(); | 
			
		
	
		
			
				
					|  |  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       linkElement.onload(null); | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     test('should load link elements', done => { | 
			
		
	
		
			
				
					|  |  |  |  |       service.load(['https://abp.io', 'https://volosoft.com'], 'style').subscribe(res => { | 
			
		
	
		
			
				
					|  |  |  |  |         expect(document.querySelector('link[href="https://volosoft.com"]')).toBeTruthy(); | 
			
		
	
		
			
				
					|  |  |  |  |         done(); | 
			
		
	
		
			
				
					|  |  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       linkElement.onload(null); | 
			
		
	
		
			
				
					|  |  |  |  |     }); | 
			
		
	
		
			
				
					|  |  |  |  |   }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   test('should throw error when required parameters are null', done => { | 
			
		
	
		
			
				
					|  |  |  |  |     service | 
			
		
	
		
			
				
					|  |  |  |  |       .load(null, 'style') | 
			
		
	
		
			
				
					|  |  |  |  |       .pipe( | 
			
		
	
		
			
				
					|  |  |  |  |         catchError(err => { | 
			
		
	
		
			
				
					|  |  |  |  |           expect(err).toBeTruthy(); | 
			
		
	
		
			
				
					|  |  |  |  |           done(); | 
			
		
	
		
			
				
					|  |  |  |  |           return of(null); | 
			
		
	
		
			
				
					|  |  |  |  |         }), | 
			
		
	
		
			
				
					|  |  |  |  |       ) | 
			
		
	
		
			
				
					|  |  |  |  |       .subscribe(); | 
			
		
	
		
			
				
					|  |  |  |  |   }); | 
			
		
	
		
			
				
					|  |  |  |  | }); |