2016-06-23 12:47:54 -04: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
|
|
|
|
*/
|
|
|
|
|
perf: switch angular to use StaticInjector instead of ReflectiveInjector
This change allows ReflectiveInjector to be tree shaken resulting
in not needed Reflect polyfil and smaller bundles.
Code savings for HelloWorld using Closure:
Reflective: bundle.js: 105,864(34,190 gzip)
Static: bundle.js: 154,889(33,555 gzip)
645( 2%)
BREAKING CHANGE:
`platformXXXX()` no longer accepts providers which depend on reflection.
Specifically the method signature when from `Provider[]` to
`StaticProvider[]`.
Example:
Before:
```
[
MyClass,
{provide: ClassA, useClass: SubClassA}
]
```
After:
```
[
{provide: MyClass, deps: [Dep1,...]},
{provide: ClassA, useClass: SubClassA, deps: [Dep1,...]}
]
```
NOTE: This only applies to platform creation and providers for the JIT
compiler. It does not apply to `@Compotent` or `@NgModule` provides
declarations.
Benchpress note: Previously Benchpress also supported reflective
provides, which now require static providers.
DEPRECATION:
- `ReflectiveInjector` is now deprecated as it will be remove. Use
`Injector.create` as a replacement.
closes #18496
2017-08-03 15:33:29 -04:00
|
|
|
import {Injector} from '@angular/core';
|
2016-08-17 10:43:31 -04:00
|
|
|
import {TestBed, getTestBed} from '@angular/core/testing';
|
2017-03-02 15:12:46 -05:00
|
|
|
import {AsyncTestCompleter, afterEach, beforeEach, describe, inject, it} from '@angular/core/testing/src/testing_internal';
|
2017-12-17 18:10:54 -05:00
|
|
|
import {stringToArrayBuffer} from '@angular/http/src/http_utils';
|
2018-11-15 14:35:08 -05:00
|
|
|
import {MockBackend, MockConnection} from '@angular/http/testing/src/mock_backend';
|
2017-03-02 15:12:46 -05:00
|
|
|
import {expect} from '@angular/platform-browser/testing/src/matchers';
|
2018-02-27 17:06:06 -05:00
|
|
|
import {Observable, zip} from 'rxjs';
|
2015-10-01 19:04:20 -04:00
|
|
|
|
2016-08-23 19:34:57 -04:00
|
|
|
import {BaseRequestOptions, ConnectionBackend, Http, HttpModule, JSONPBackend, Jsonp, JsonpModule, Request, RequestMethod, RequestOptions, Response, ResponseContentType, ResponseOptions, URLSearchParams, XHRBackend} from '../index';
|
2016-06-08 19:38:52 -04:00
|
|
|
|
2017-12-16 17:42:55 -05:00
|
|
|
{
|
2015-07-30 10:29:16 -04:00
|
|
|
describe('injectables', () => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const url = 'http://foo.bar';
|
|
|
|
let http: Http;
|
|
|
|
let injector: Injector;
|
|
|
|
let jsonpBackend: MockBackend;
|
|
|
|
let xhrBackend: MockBackend;
|
|
|
|
let jsonp: Jsonp;
|
2015-07-30 10:29:16 -04:00
|
|
|
|
2016-08-17 10:43:31 -04:00
|
|
|
beforeEach(() => {
|
|
|
|
TestBed.configureTestingModule({
|
|
|
|
imports: [HttpModule, JsonpModule],
|
|
|
|
providers: [
|
|
|
|
{provide: XHRBackend, useClass: MockBackend},
|
|
|
|
{provide: JSONPBackend, useClass: MockBackend}
|
|
|
|
]
|
|
|
|
});
|
|
|
|
injector = getTestBed();
|
|
|
|
});
|
|
|
|
|
2015-07-30 10:29:16 -04:00
|
|
|
it('should allow using jsonpInjectables and httpInjectables in same injector',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2015-07-30 10:29:16 -04:00
|
|
|
|
2016-08-17 10:43:31 -04:00
|
|
|
http = injector.get(Http);
|
|
|
|
jsonp = injector.get(Jsonp);
|
2017-09-12 14:45:02 -04:00
|
|
|
jsonpBackend = injector.get(JSONPBackend) as any as MockBackend;
|
2017-01-03 19:54:46 -05:00
|
|
|
xhrBackend = injector.get(XHRBackend) as any as MockBackend;
|
2015-07-30 10:29:16 -04:00
|
|
|
|
2016-11-12 08:08:58 -05:00
|
|
|
let xhrCreatedConnections = 0;
|
|
|
|
let jsonpCreatedConnections = 0;
|
2015-07-30 10:29:16 -04:00
|
|
|
|
2015-10-01 19:04:20 -04:00
|
|
|
xhrBackend.connections.subscribe(() => {
|
2015-07-30 10:29:16 -04:00
|
|
|
xhrCreatedConnections++;
|
|
|
|
expect(xhrCreatedConnections).toEqual(1);
|
|
|
|
if (jsonpCreatedConnections) {
|
|
|
|
async.done();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2015-10-01 19:04:20 -04:00
|
|
|
http.get(url).subscribe(() => {});
|
2015-07-30 10:29:16 -04:00
|
|
|
|
2015-10-01 19:04:20 -04:00
|
|
|
jsonpBackend.connections.subscribe(() => {
|
2015-07-30 10:29:16 -04:00
|
|
|
jsonpCreatedConnections++;
|
|
|
|
expect(jsonpCreatedConnections).toEqual(1);
|
|
|
|
if (xhrCreatedConnections) {
|
|
|
|
async.done();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2015-10-01 19:04:20 -04:00
|
|
|
jsonp.request(url).subscribe(() => {});
|
2015-07-30 10:29:16 -04:00
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
2015-04-29 02:07:55 -04:00
|
|
|
describe('http', () => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const url = 'http://foo.bar';
|
2016-10-18 02:04:25 -04:00
|
|
|
let http: Http;
|
|
|
|
let injector: Injector;
|
|
|
|
let backend: MockBackend;
|
|
|
|
let baseResponse: Response;
|
|
|
|
let jsonp: Jsonp;
|
|
|
|
|
2015-04-29 02:07:55 -04:00
|
|
|
beforeEach(() => {
|
perf: switch angular to use StaticInjector instead of ReflectiveInjector
This change allows ReflectiveInjector to be tree shaken resulting
in not needed Reflect polyfil and smaller bundles.
Code savings for HelloWorld using Closure:
Reflective: bundle.js: 105,864(34,190 gzip)
Static: bundle.js: 154,889(33,555 gzip)
645( 2%)
BREAKING CHANGE:
`platformXXXX()` no longer accepts providers which depend on reflection.
Specifically the method signature when from `Provider[]` to
`StaticProvider[]`.
Example:
Before:
```
[
MyClass,
{provide: ClassA, useClass: SubClassA}
]
```
After:
```
[
{provide: MyClass, deps: [Dep1,...]},
{provide: ClassA, useClass: SubClassA, deps: [Dep1,...]}
]
```
NOTE: This only applies to platform creation and providers for the JIT
compiler. It does not apply to `@Compotent` or `@NgModule` provides
declarations.
Benchpress note: Previously Benchpress also supported reflective
provides, which now require static providers.
DEPRECATION:
- `ReflectiveInjector` is now deprecated as it will be remove. Use
`Injector.create` as a replacement.
closes #18496
2017-08-03 15:33:29 -04:00
|
|
|
injector = Injector.create([
|
|
|
|
{provide: BaseRequestOptions, deps: []}, {provide: MockBackend, deps: []}, {
|
2016-06-02 20:30:40 -04:00
|
|
|
provide: Http,
|
|
|
|
useFactory: function(backend: ConnectionBackend, defaultOptions: BaseRequestOptions) {
|
|
|
|
return new Http(backend, defaultOptions);
|
|
|
|
},
|
|
|
|
deps: [MockBackend, BaseRequestOptions]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
provide: Jsonp,
|
|
|
|
useFactory: function(backend: ConnectionBackend, defaultOptions: BaseRequestOptions) {
|
|
|
|
return new Jsonp(backend, defaultOptions);
|
|
|
|
},
|
|
|
|
deps: [MockBackend, BaseRequestOptions]
|
|
|
|
}
|
2015-06-13 18:49:05 -04:00
|
|
|
]);
|
2015-04-29 02:07:55 -04:00
|
|
|
http = injector.get(Http);
|
2015-09-18 16:30:05 -04:00
|
|
|
jsonp = injector.get(Jsonp);
|
2015-04-29 02:07:55 -04:00
|
|
|
backend = injector.get(MockBackend);
|
2015-06-24 03:27:07 -04:00
|
|
|
baseResponse = new Response(new ResponseOptions({body: 'base response'}));
|
2016-10-18 02:04:25 -04:00
|
|
|
spyOn(Http.prototype, 'request').and.callThrough();
|
2015-04-29 02:07:55 -04:00
|
|
|
});
|
|
|
|
|
2015-06-13 18:49:05 -04:00
|
|
|
afterEach(() => backend.verifyNoPendingRequests());
|
2015-04-29 02:07:55 -04:00
|
|
|
|
2015-06-13 18:49:05 -04:00
|
|
|
describe('Http', () => {
|
2015-06-13 19:44:32 -04:00
|
|
|
describe('.request()', () => {
|
2015-06-09 18:18:57 -04:00
|
|
|
it('should return an Observable',
|
2015-10-01 19:04:20 -04:00
|
|
|
() => { expect(http.request(url)).toBeAnInstanceOf(Observable); });
|
2015-06-13 19:44:32 -04:00
|
|
|
|
|
|
|
|
2015-06-19 15:14:12 -04:00
|
|
|
it('should accept a fully-qualified request as its only parameter',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-06-19 15:14:12 -04:00
|
|
|
expect(c.request.url).toBe('https://google.com');
|
2015-06-24 03:27:07 -04:00
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: 'Thank you'})));
|
2015-06-19 15:14:12 -04:00
|
|
|
async.done();
|
|
|
|
});
|
2015-10-01 19:04:20 -04:00
|
|
|
http.request(new Request(new RequestOptions({url: 'https://google.com'})))
|
2016-02-01 20:05:50 -05:00
|
|
|
.subscribe((res: Response) => {});
|
2015-06-19 15:14:12 -04:00
|
|
|
}));
|
2015-06-13 18:49:05 -04:00
|
|
|
|
2015-11-19 22:54:23 -05:00
|
|
|
it('should accept a fully-qualified request as its only parameter',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-11-19 22:54:23 -05:00
|
|
|
expect(c.request.url).toBe('https://google.com');
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Post);
|
2015-11-19 22:54:23 -05:00
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: 'Thank you'})));
|
|
|
|
async.done();
|
|
|
|
});
|
|
|
|
http.request(new Request(new RequestOptions(
|
2015-12-03 16:44:14 -05:00
|
|
|
{url: 'https://google.com', method: RequestMethod.Post})))
|
2016-02-01 20:05:50 -05:00
|
|
|
.subscribe((res: Response) => {});
|
2015-11-19 22:54:23 -05:00
|
|
|
}));
|
|
|
|
|
2015-06-13 18:49:05 -04:00
|
|
|
|
2015-06-19 15:14:12 -04:00
|
|
|
it('should perform a get request for given url if only passed a string',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
|
2016-06-08 19:38:52 -04:00
|
|
|
http.request('http://basic.connection').subscribe((res: Response) => {
|
|
|
|
expect(res.text()).toBe('base response');
|
|
|
|
async.done();
|
|
|
|
});
|
2015-10-01 19:04:20 -04:00
|
|
|
}));
|
|
|
|
|
2015-11-19 22:54:23 -05:00
|
|
|
it('should perform a post request for given url if options include a method',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toEqual(RequestMethod.Post);
|
2015-11-19 22:54:23 -05:00
|
|
|
c.mockRespond(baseResponse);
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
const requestOptions = new RequestOptions({method: RequestMethod.Post});
|
2016-06-08 19:38:52 -04:00
|
|
|
http.request('http://basic.connection', requestOptions).subscribe((res: Response) => {
|
|
|
|
expect(res.text()).toBe('base response');
|
|
|
|
async.done();
|
|
|
|
});
|
2015-11-19 22:54:23 -05:00
|
|
|
}));
|
|
|
|
|
|
|
|
it('should perform a post request for given url if options include a method',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toEqual(RequestMethod.Post);
|
2015-11-19 22:54:23 -05:00
|
|
|
c.mockRespond(baseResponse);
|
|
|
|
});
|
2016-11-12 08:08:58 -05:00
|
|
|
const requestOptions = {method: RequestMethod.Post};
|
2016-06-08 19:38:52 -04:00
|
|
|
http.request('http://basic.connection', requestOptions).subscribe((res: Response) => {
|
|
|
|
expect(res.text()).toBe('base response');
|
|
|
|
async.done();
|
|
|
|
});
|
2015-11-19 22:54:23 -05:00
|
|
|
}));
|
|
|
|
|
2015-10-01 19:04:20 -04:00
|
|
|
it('should perform a get request and complete the response',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
|
2015-10-01 19:04:20 -04:00
|
|
|
http.request('http://basic.connection')
|
2016-06-08 19:38:52 -04:00
|
|
|
.subscribe(
|
2017-04-17 14:12:53 -04:00
|
|
|
(res: Response) => { expect(res.text()).toBe('base response'); }, null !,
|
2016-06-08 19:38:52 -04:00
|
|
|
() => { async.done(); });
|
2015-06-19 15:14:12 -04:00
|
|
|
}));
|
2015-06-13 18:49:05 -04:00
|
|
|
|
2015-10-01 19:04:20 -04:00
|
|
|
it('should perform multiple get requests and complete the responses',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
|
2015-10-01 19:04:20 -04:00
|
|
|
|
2016-06-08 19:38:52 -04:00
|
|
|
http.request('http://basic.connection').subscribe((res: Response) => {
|
|
|
|
expect(res.text()).toBe('base response');
|
|
|
|
});
|
2015-10-01 19:04:20 -04:00
|
|
|
http.request('http://basic.connection')
|
2016-06-08 19:38:52 -04:00
|
|
|
.subscribe(
|
2017-04-17 14:12:53 -04:00
|
|
|
(res: Response) => { expect(res.text()).toBe('base response'); }, null !,
|
2016-06-08 19:38:52 -04:00
|
|
|
() => { async.done(); });
|
2015-10-01 19:04:20 -04:00
|
|
|
}));
|
2015-09-18 16:30:05 -04:00
|
|
|
|
|
|
|
it('should throw if url is not a string or Request', () => {
|
2016-10-18 02:04:25 -04:00
|
|
|
const req = <Request>{};
|
2015-09-18 16:30:05 -04:00
|
|
|
expect(() => http.request(req))
|
|
|
|
.toThrowError('First argument must be a url string or Request instance.');
|
|
|
|
});
|
2015-06-19 15:14:12 -04:00
|
|
|
});
|
2015-06-13 18:49:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
describe('.get()', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should perform a get request for given url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Get);
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).toHaveBeenCalled();
|
2015-06-13 18:49:05 -04:00
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).not.toHaveBeenCalled();
|
2016-02-01 20:05:50 -05:00
|
|
|
http.get(url).subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
describe('.post()', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should perform a post request for given url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Post);
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).toHaveBeenCalled();
|
2015-06-13 18:49:05 -04:00
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).not.toHaveBeenCalled();
|
2016-02-01 20:05:50 -05:00
|
|
|
http.post(url, 'post me').subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
|
|
|
|
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should attach the provided body to the request',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-10-18 02:04:25 -04:00
|
|
|
const body = 'this is my post body';
|
2016-02-01 20:05:50 -05:00
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-06-13 18:49:05 -04:00
|
|
|
expect(c.request.text()).toBe(body);
|
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-01 20:05:50 -05:00
|
|
|
http.post(url, body).subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
describe('.put()', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should perform a put request for given url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Put);
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).toHaveBeenCalled();
|
2015-06-13 18:49:05 -04:00
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).not.toHaveBeenCalled();
|
2016-02-01 20:05:50 -05:00
|
|
|
http.put(url, 'put me').subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should attach the provided body to the request',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-10-18 02:04:25 -04:00
|
|
|
const body = 'this is my put body';
|
2016-02-01 20:05:50 -05:00
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-06-13 18:49:05 -04:00
|
|
|
expect(c.request.text()).toBe(body);
|
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-01 20:05:50 -05:00
|
|
|
http.put(url, body).subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
describe('.delete()', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should perform a delete request for given url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Delete);
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).toHaveBeenCalled();
|
2015-06-13 18:49:05 -04:00
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).not.toHaveBeenCalled();
|
2016-02-01 20:05:50 -05:00
|
|
|
http.delete(url).subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
describe('.patch()', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should perform a patch request for given url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Patch);
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).toHaveBeenCalled();
|
2015-06-13 18:49:05 -04:00
|
|
|
backend.resolveAllConnections();
|
2015-04-29 02:07:55 -04:00
|
|
|
async.done();
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).not.toHaveBeenCalled();
|
2016-02-01 20:05:50 -05:00
|
|
|
http.patch(url, 'this is my patch body').subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
2015-04-29 02:07:55 -04:00
|
|
|
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should attach the provided body to the request',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-10-18 02:04:25 -04:00
|
|
|
const body = 'this is my patch body';
|
2016-02-01 20:05:50 -05:00
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-06-13 18:49:05 -04:00
|
|
|
expect(c.request.text()).toBe(body);
|
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-01 20:05:50 -05:00
|
|
|
http.patch(url, body).subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
});
|
2015-04-29 02:07:55 -04:00
|
|
|
|
2015-06-13 18:49:05 -04:00
|
|
|
|
|
|
|
describe('.head()', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should perform a head request for given url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-12-03 16:44:14 -05:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Head);
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).toHaveBeenCalled();
|
2015-06-13 18:49:05 -04:00
|
|
|
backend.resolveAllConnections();
|
2015-04-29 02:07:55 -04:00
|
|
|
async.done();
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).not.toHaveBeenCalled();
|
2016-02-01 20:05:50 -05:00
|
|
|
http.head(url).subscribe((res: Response) => {});
|
2015-06-13 18:49:05 -04:00
|
|
|
}));
|
|
|
|
});
|
2015-07-13 14:47:10 -04:00
|
|
|
|
|
|
|
|
2016-08-08 12:15:13 -04:00
|
|
|
describe('.options()', () => {
|
|
|
|
it('should perform an options request for given url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
|
|
|
expect(c.request.method).toBe(RequestMethod.Options);
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).toHaveBeenCalled();
|
2016-08-08 12:15:13 -04:00
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2016-10-18 02:04:25 -04:00
|
|
|
expect(http.request).not.toHaveBeenCalled();
|
2016-08-08 12:15:13 -04:00
|
|
|
http.options(url).subscribe((res: Response) => {});
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2015-07-13 14:47:10 -04:00
|
|
|
describe('searchParams', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should append search params to url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const params = new URLSearchParams();
|
2015-07-13 14:47:10 -04:00
|
|
|
params.append('q', 'puppies');
|
2016-02-01 20:05:50 -05:00
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-07-13 14:47:10 -04:00
|
|
|
expect(c.request.url).toEqual('https://www.google.com?q=puppies');
|
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2015-10-01 19:04:20 -04:00
|
|
|
http.get('https://www.google.com', new RequestOptions({search: params}))
|
2016-02-01 20:05:50 -05:00
|
|
|
.subscribe((res: Response) => {});
|
2015-07-13 14:47:10 -04:00
|
|
|
}));
|
|
|
|
|
2016-02-01 20:05:50 -05:00
|
|
|
it('should append string search params to url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-07-13 14:47:10 -04:00
|
|
|
expect(c.request.url).toEqual('https://www.google.com?q=piggies');
|
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2015-10-01 19:04:20 -04:00
|
|
|
http.get('https://www.google.com', new RequestOptions({search: 'q=piggies'}))
|
2016-02-01 20:05:50 -05:00
|
|
|
.subscribe((res: Response) => {});
|
2015-07-13 14:47:10 -04:00
|
|
|
}));
|
|
|
|
|
|
|
|
it('should produce valid url when url already contains a query',
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2015-07-13 14:47:10 -04:00
|
|
|
expect(c.request.url).toEqual('https://www.google.com?q=angular&as_eq=1.x');
|
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
2015-10-01 19:04:20 -04:00
|
|
|
http.get('https://www.google.com?q=angular', new RequestOptions({search: 'as_eq=1.x'}))
|
2016-02-01 20:05:50 -05:00
|
|
|
.subscribe((res: Response) => {});
|
2015-07-13 14:47:10 -04:00
|
|
|
}));
|
|
|
|
});
|
2015-09-21 03:46:16 -04:00
|
|
|
|
2017-01-25 10:42:30 -05:00
|
|
|
describe('params', () => {
|
|
|
|
it('should append params to url',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
|
|
|
expect(c.request.url).toEqual('https://www.google.com?q=puppies');
|
|
|
|
backend.resolveAllConnections();
|
|
|
|
async.done();
|
|
|
|
});
|
|
|
|
http.get('https://www.google.com', {params: {q: 'puppies'}})
|
|
|
|
.subscribe((res: Response) => {});
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
|
2015-09-21 03:46:16 -04:00
|
|
|
describe('string method names', () => {
|
|
|
|
it('should allow case insensitive strings for method names', () => {
|
2016-02-01 20:05:50 -05:00
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2016-07-21 20:12:00 -04:00
|
|
|
expect(c.request.method).toBe(RequestMethod.Post);
|
2016-06-08 19:38:52 -04:00
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: 'Thank you'})));
|
2015-09-21 03:46:16 -04:00
|
|
|
async.done();
|
|
|
|
});
|
2015-10-01 19:04:20 -04:00
|
|
|
http.request(
|
|
|
|
new Request(new RequestOptions({url: 'https://google.com', method: 'PosT'})))
|
2016-02-01 20:05:50 -05:00
|
|
|
.subscribe((res: Response) => {});
|
2015-09-21 03:46:16 -04:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should throw when invalid string parameter is passed for method name', () => {
|
|
|
|
expect(() => {
|
|
|
|
http.request(
|
|
|
|
new Request(new RequestOptions({url: 'https://google.com', method: 'Invalid'})));
|
|
|
|
}).toThrowError('Invalid request method. The method "Invalid" is not supported.');
|
|
|
|
});
|
|
|
|
});
|
2015-06-13 18:49:05 -04:00
|
|
|
});
|
2015-09-18 16:30:05 -04:00
|
|
|
|
|
|
|
describe('Jsonp', () => {
|
|
|
|
describe('.request()', () => {
|
|
|
|
it('should throw if url is not a string or Request', () => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const req = <Request>{};
|
2015-09-18 16:30:05 -04:00
|
|
|
expect(() => jsonp.request(req))
|
|
|
|
.toThrowError('First argument must be a url string or Request instance.');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2016-02-24 10:37:18 -05:00
|
|
|
|
|
|
|
describe('response buffer', () => {
|
|
|
|
|
|
|
|
it('should attach the provided buffer to the response',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2016-05-26 18:47:20 -04:00
|
|
|
expect(c.request.responseType).toBe(ResponseContentType.ArrayBuffer);
|
2016-02-24 10:37:18 -05:00
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: new ArrayBuffer(32)})));
|
|
|
|
async.done();
|
|
|
|
});
|
2016-05-26 18:47:20 -04:00
|
|
|
http.get(
|
|
|
|
'https://www.google.com',
|
|
|
|
new RequestOptions({responseType: ResponseContentType.ArrayBuffer}))
|
2016-02-24 10:37:18 -05:00
|
|
|
.subscribe((res: Response) => {});
|
|
|
|
}));
|
|
|
|
|
|
|
|
it('should be able to consume a buffer containing a String as any response type',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
|
|
|
backend.connections.subscribe((c: MockConnection) => c.mockRespond(baseResponse));
|
2016-05-26 18:47:20 -04:00
|
|
|
http.get('https://www.google.com').subscribe((res: Response) => {
|
|
|
|
expect(res.arrayBuffer()).toBeAnInstanceOf(ArrayBuffer);
|
|
|
|
expect(res.text()).toBe('base response');
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-24 10:37:18 -05:00
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
|
|
it('should be able to consume a buffer containing an ArrayBuffer as any response type',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const arrayBuffer = stringToArrayBuffer('{"response": "ok"}');
|
2016-05-26 18:47:20 -04:00
|
|
|
backend.connections.subscribe(
|
|
|
|
(c: MockConnection) =>
|
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: arrayBuffer}))));
|
|
|
|
http.get('https://www.google.com').subscribe((res: Response) => {
|
|
|
|
expect(res.arrayBuffer()).toBe(arrayBuffer);
|
|
|
|
expect(res.text()).toEqual('{"response": "ok"}');
|
|
|
|
expect(res.json()).toEqual({response: 'ok'});
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-24 10:37:18 -05:00
|
|
|
}));
|
|
|
|
|
|
|
|
it('should be able to consume a buffer containing an Object as any response type',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const simpleObject = {'content': 'ok'};
|
2016-05-26 18:47:20 -04:00
|
|
|
backend.connections.subscribe(
|
|
|
|
(c: MockConnection) =>
|
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: simpleObject}))));
|
|
|
|
http.get('https://www.google.com').subscribe((res: Response) => {
|
|
|
|
expect(res.arrayBuffer()).toBeAnInstanceOf(ArrayBuffer);
|
2016-10-19 16:42:39 -04:00
|
|
|
expect(res.text()).toEqual(JSON.stringify(simpleObject, null, 2));
|
2016-05-26 18:47:20 -04:00
|
|
|
expect(res.json()).toBe(simpleObject);
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-24 10:37:18 -05:00
|
|
|
}));
|
|
|
|
|
|
|
|
it('should preserve encoding of ArrayBuffer response',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const message = 'é@θЂ';
|
|
|
|
const arrayBuffer = stringToArrayBuffer(message);
|
2016-05-26 18:47:20 -04:00
|
|
|
backend.connections.subscribe(
|
|
|
|
(c: MockConnection) =>
|
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: arrayBuffer}))));
|
|
|
|
http.get('https://www.google.com').subscribe((res: Response) => {
|
|
|
|
expect(res.arrayBuffer()).toBeAnInstanceOf(ArrayBuffer);
|
|
|
|
expect(res.text()).toEqual(message);
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-24 10:37:18 -05:00
|
|
|
}));
|
|
|
|
|
|
|
|
it('should preserve encoding of String response',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const message = 'é@θЂ';
|
2016-05-26 18:47:20 -04:00
|
|
|
backend.connections.subscribe(
|
|
|
|
(c: MockConnection) =>
|
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: message}))));
|
|
|
|
http.get('https://www.google.com').subscribe((res: Response) => {
|
|
|
|
expect(res.arrayBuffer()).toEqual(stringToArrayBuffer(message));
|
|
|
|
async.done();
|
|
|
|
});
|
2016-02-24 10:37:18 -05:00
|
|
|
}));
|
|
|
|
|
|
|
|
it('should have an equivalent response independently of the buffer used',
|
|
|
|
inject([AsyncTestCompleter], (async: AsyncTestCompleter) => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const message = {'param': 'content'};
|
2016-02-24 10:37:18 -05:00
|
|
|
|
|
|
|
backend.connections.subscribe((c: MockConnection) => {
|
2016-11-12 08:08:58 -05:00
|
|
|
const body = (): any => {
|
2016-05-26 18:47:20 -04:00
|
|
|
switch (c.request.responseType) {
|
|
|
|
case ResponseContentType.Text:
|
2016-10-19 16:42:39 -04:00
|
|
|
return JSON.stringify(message, null, 2);
|
2016-05-26 18:47:20 -04:00
|
|
|
case ResponseContentType.Json:
|
2016-02-24 10:37:18 -05:00
|
|
|
return message;
|
2016-05-26 18:47:20 -04:00
|
|
|
case ResponseContentType.ArrayBuffer:
|
2016-10-19 16:42:39 -04:00
|
|
|
return stringToArrayBuffer(JSON.stringify(message, null, 2));
|
2016-02-24 10:37:18 -05:00
|
|
|
}
|
|
|
|
};
|
2016-07-21 20:12:00 -04:00
|
|
|
c.mockRespond(new Response(new ResponseOptions({body: body()})));
|
2016-02-24 10:37:18 -05:00
|
|
|
});
|
|
|
|
|
2016-05-26 18:47:20 -04:00
|
|
|
zip(http.get(
|
|
|
|
'https://www.google.com',
|
|
|
|
new RequestOptions({responseType: ResponseContentType.Text})),
|
|
|
|
http.get(
|
|
|
|
'https://www.google.com',
|
|
|
|
new RequestOptions({responseType: ResponseContentType.Json})),
|
|
|
|
http.get(
|
|
|
|
'https://www.google.com',
|
|
|
|
new RequestOptions({responseType: ResponseContentType.ArrayBuffer})))
|
|
|
|
.subscribe((res: Array<any>) => {
|
2016-02-24 10:37:18 -05:00
|
|
|
expect(res[0].text()).toEqual(res[1].text());
|
|
|
|
expect(res[1].text()).toEqual(res[2].text());
|
|
|
|
async.done();
|
|
|
|
});
|
|
|
|
}));
|
|
|
|
});
|
2015-04-29 02:07:55 -04:00
|
|
|
});
|
|
|
|
}
|