| 
									
										
										
										
											2016-06-23 09:47:54 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-21 17:12:00 -07:00
										 |  |  | import {ReflectiveInjector} from '@angular/core'; | 
					
						
							| 
									
										
										
										
											2016-09-27 17:12:25 -07:00
										 |  |  | import {AsyncTestCompleter, beforeEach, describe, inject, it, xit} from '@angular/core/testing/testing_internal'; | 
					
						
							| 
									
										
										
										
											2016-08-02 15:53:34 -07:00
										 |  |  | import {expect} from '@angular/platform-browser/testing/matchers'; | 
					
						
							|  |  |  | import {ReplaySubject} from 'rxjs/ReplaySubject'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {BaseRequestOptions, RequestOptions} from '../../src/base_request_options'; | 
					
						
							|  |  |  | import {BaseResponseOptions, ResponseOptions} from '../../src/base_response_options'; | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | import {Request} from '../../src/static_request'; | 
					
						
							|  |  |  | import {Response} from '../../src/static_response'; | 
					
						
							| 
									
										
										
										
											2016-08-02 15:53:34 -07:00
										 |  |  | import {MockBackend, MockConnection} from '../../testing/mock_backend'; | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							|  |  |  |   describe('MockBackend', () => { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |     var backend: MockBackend; | 
					
						
							|  |  |  |     var sampleRequest1: Request; | 
					
						
							|  |  |  |     var sampleResponse1: Response; | 
					
						
							|  |  |  |     var sampleRequest2: Request; | 
					
						
							|  |  |  |     var sampleResponse2: Response; | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2016-04-14 12:35:24 -07:00
										 |  |  |       var injector = ReflectiveInjector.resolveAndCreate( | 
					
						
							| 
									
										
										
										
											2016-06-02 17:30:40 -07:00
										 |  |  |           [{provide: ResponseOptions, useClass: BaseResponseOptions}, MockBackend]); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |       backend = injector.get(MockBackend); | 
					
						
							|  |  |  |       var base = new BaseRequestOptions(); | 
					
						
							|  |  |  |       sampleRequest1 = new Request(base.merge(new RequestOptions({url: 'https://google.com'}))); | 
					
						
							|  |  |  |       sampleResponse1 = new Response(new ResponseOptions({body: 'response1'})); | 
					
						
							|  |  |  |       sampleRequest2 = new Request(base.merge(new RequestOptions({url: 'https://google.com'}))); | 
					
						
							|  |  |  |       sampleResponse2 = new Response(new ResponseOptions({body: 'response2'})); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-21 17:12:00 -07:00
										 |  |  |     it('should create a new MockBackend', () => { expect(backend).toBeAnInstanceOf(MockBackend); }); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-21 17:12:00 -07:00
										 |  |  |     it('should create a new MockConnection', () => { | 
					
						
							|  |  |  |       expect(backend.createConnection(sampleRequest1)).toBeAnInstanceOf(MockConnection); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it('should create a new connection and allow subscription', () => { | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |       let connection: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |       connection.response.subscribe(() => {}); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |     it('should allow responding after subscription', | 
					
						
							|  |  |  |        inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |          let connection: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							|  |  |  |          connection.response.subscribe(() => { async.done(); }); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |          connection.mockRespond(sampleResponse1); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |     it('should allow subscribing after responding', | 
					
						
							|  |  |  |        inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |          let connection: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |          connection.mockRespond(sampleResponse1); | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |          connection.response.subscribe(() => { async.done(); }); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should allow responding after subscription with an error', | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |        inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |          let connection: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |          connection.response.subscribe(null, () => { async.done(); }); | 
					
						
							|  |  |  |          connection.mockError(new Error('nope')); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should not throw when there are no unresolved requests', | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |        inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |          let connection: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |          connection.response.subscribe(() => { async.done(); }); | 
					
						
							|  |  |  |          connection.mockRespond(sampleResponse1); | 
					
						
							|  |  |  |          backend.verifyNoPendingRequests(); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |     xit('should throw when there are unresolved requests', | 
					
						
							|  |  |  |         inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |           let connection: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |           connection.response.subscribe(() => { async.done(); }); | 
					
						
							|  |  |  |           backend.verifyNoPendingRequests(); | 
					
						
							|  |  |  |         })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should work when requests are resolved out of order', | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |        inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |          let connection1: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							|  |  |  |          let connection2: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |          connection1.response.subscribe(() => { async.done(); }); | 
					
						
							|  |  |  |          connection2.response.subscribe(() => {}); | 
					
						
							|  |  |  |          connection2.mockRespond(sampleResponse1); | 
					
						
							|  |  |  |          connection1.mockRespond(sampleResponse1); | 
					
						
							|  |  |  |          backend.verifyNoPendingRequests(); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-01 17:05:50 -08:00
										 |  |  |     xit('should allow double subscribing', | 
					
						
							|  |  |  |         inject([AsyncTestCompleter], (async: AsyncTestCompleter) => { | 
					
						
							|  |  |  |           let responses: Response[] = [sampleResponse1, sampleResponse2]; | 
					
						
							|  |  |  |           backend.connections.subscribe((c: MockConnection) => c.mockRespond(responses.shift())); | 
					
						
							|  |  |  |           let responseObservable: ReplaySubject<Response> = | 
					
						
							|  |  |  |               backend.createConnection(sampleRequest1).response; | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |           responseObservable.subscribe(res => expect(res.text()).toBe('response1')); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           responseObservable.subscribe( | 
					
						
							|  |  |  |               res => expect(res.text()).toBe('response2'), null, async.done); | 
					
						
							| 
									
										
										
										
											2015-10-01 16:04:20 -07:00
										 |  |  |         })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // TODO(robwormald): readyStates are leaving?
 | 
					
						
							|  |  |  |     it('should allow resolution of requests manually', () => { | 
					
						
							|  |  |  |       let connection1: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							|  |  |  |       let connection2: MockConnection = backend.createConnection(sampleRequest1); | 
					
						
							|  |  |  |       connection1.response.subscribe(() => {}); | 
					
						
							|  |  |  |       connection2.response.subscribe(() => {}); | 
					
						
							|  |  |  |       backend.resolveAllConnections(); | 
					
						
							|  |  |  |       backend.verifyNoPendingRequests(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2015-12-03 22:44:14 +01:00
										 |  |  | } |