| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved.JsonpCallbackContext | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {ddescribe, describe, it} from '@angular/core/testing/src/testing_internal'; | 
					
						
							| 
									
										
										
										
											2018-02-27 17:06:06 -05:00
										 |  |  | import {toArray} from 'rxjs/operators'; | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | import {JSONP_ERR_NO_CALLBACK, JSONP_ERR_WRONG_METHOD, JSONP_ERR_WRONG_RESPONSE_TYPE, JsonpClientBackend} from '../src/jsonp'; | 
					
						
							|  |  |  | import {HttpRequest} from '../src/request'; | 
					
						
							|  |  |  | import {HttpErrorResponse, HttpEventType} from '../src/response'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {MockDocument} from './jsonp_mock'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function runOnlyCallback(home: any, data: Object) { | 
					
						
							|  |  |  |   const keys = Object.keys(home); | 
					
						
							|  |  |  |   expect(keys.length).toBe(1); | 
					
						
							|  |  |  |   const callback = home[keys[0]]; | 
					
						
							|  |  |  |   delete home[keys[0]]; | 
					
						
							|  |  |  |   callback(data); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const SAMPLE_REQ = new HttpRequest<never>('JSONP', '/test'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-16 14:42:55 -08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |   describe('JsonpClientBackend', () => { | 
					
						
							|  |  |  |     let home = {}; | 
					
						
							|  |  |  |     let document: MockDocument; | 
					
						
							|  |  |  |     let backend: JsonpClientBackend; | 
					
						
							|  |  |  |     beforeEach(() => { | 
					
						
							|  |  |  |       home = {}; | 
					
						
							|  |  |  |       document = new MockDocument(); | 
					
						
							|  |  |  |       backend = new JsonpClientBackend(home, document); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2018-07-05 18:10:09 +03:00
										 |  |  |     it('handles a basic request', done => { | 
					
						
							| 
									
										
										
										
											2018-02-27 17:06:06 -05:00
										 |  |  |       backend.handle(SAMPLE_REQ).pipe(toArray()).subscribe(events => { | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |         expect(events.map(event => event.type)).toEqual([ | 
					
						
							|  |  |  |           HttpEventType.Sent, | 
					
						
							|  |  |  |           HttpEventType.Response, | 
					
						
							|  |  |  |         ]); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       runOnlyCallback(home, {data: 'This is a test'}); | 
					
						
							|  |  |  |       document.mockLoad(); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2018-07-05 18:10:09 +03:00
										 |  |  |     it('handles an error response properly', done => { | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |       const error = new Error('This is a test error'); | 
					
						
							| 
									
										
										
										
											2018-02-27 17:06:06 -05:00
										 |  |  |       backend.handle(SAMPLE_REQ).pipe(toArray()).subscribe(undefined, (err: HttpErrorResponse) => { | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |         expect(err.status).toBe(0); | 
					
						
							|  |  |  |         expect(err.error).toBe(error); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       document.mockError(error); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     describe('throws an error', () => { | 
					
						
							|  |  |  |       it('when request method is not JSONP', | 
					
						
							| 
									
										
										
										
											2017-07-27 16:13:16 -07:00
										 |  |  |          () => expect(() => backend.handle(SAMPLE_REQ.clone<never>({method: 'GET'}))) | 
					
						
							|  |  |  |                    .toThrowError(JSONP_ERR_WRONG_METHOD)); | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |       it('when response type is not json', | 
					
						
							| 
									
										
										
										
											2017-07-27 16:13:16 -07:00
										 |  |  |          () => expect(() => backend.handle(SAMPLE_REQ.clone<never>({responseType: 'text'}))) | 
					
						
							|  |  |  |                    .toThrowError(JSONP_ERR_WRONG_RESPONSE_TYPE)); | 
					
						
							| 
									
										
										
										
											2018-07-05 18:10:09 +03:00
										 |  |  |       it('when callback is never called', done => { | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |         backend.handle(SAMPLE_REQ).subscribe(undefined, (err: HttpErrorResponse) => { | 
					
						
							|  |  |  |           expect(err.status).toBe(0); | 
					
						
							|  |  |  |           expect(err.error instanceof Error).toEqual(true); | 
					
						
							|  |  |  |           expect(err.error.message).toEqual(JSONP_ERR_NO_CALLBACK); | 
					
						
							|  |  |  |           done(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |         document.mockLoad(); | 
					
						
							| 
									
										
										
										
											2017-07-27 16:13:16 -07:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2017-03-22 17:13:24 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |