@alterior/http 3.13.3 → 3.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend.d.ts +38 -38
- package/dist/backend.js +38 -38
- package/dist/client.d.ts +2108 -2108
- package/dist/client.js +265 -265
- package/dist/client.js.map +1 -1
- package/dist/headers.d.ts +57 -57
- package/dist/headers.js +187 -187
- package/dist/headers.js.map +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/index.js +42 -42
- package/dist/interceptor.d.ts +63 -63
- package/dist/interceptor.js +43 -43
- package/dist/interceptor.js.map +1 -1
- package/dist/module.d.ts +101 -101
- package/dist/module.js +188 -188
- package/dist/module.js.map +1 -1
- package/dist/params.d.ts +98 -98
- package/dist/params.js +184 -184
- package/dist/params.js.map +1 -1
- package/dist/request.d.ts +130 -130
- package/dist/request.js +260 -260
- package/dist/request.js.map +1 -1
- package/dist/response.d.ts +267 -267
- package/dist/response.js +165 -165
- package/dist/response.js.map +1 -1
- package/dist/server.d.ts +28 -28
- package/dist/server.js +119 -119
- package/dist/server.js.map +1 -1
- package/dist/test/client.test.d.ts +8 -8
- package/dist/test/client.test.js +163 -163
- package/dist/test/client.test.js.map +1 -1
- package/dist/test/headers.test.d.ts +1 -1
- package/dist/test/headers.test.js +126 -126
- package/dist/test/module.test.d.ts +1 -1
- package/dist/test/module.test.js +117 -117
- package/dist/test/module.test.js.map +1 -1
- package/dist/test/params.test.d.ts +1 -1
- package/dist/test/params.test.js +63 -63
- package/dist/test/request.test.d.ts +8 -8
- package/dist/test/request.test.js +159 -159
- package/dist/test/request.test.js.map +1 -1
- package/dist/test/response.test.d.ts +1 -1
- package/dist/test/response.test.js +79 -79
- package/dist/test/response.test.js.map +1 -1
- package/dist/test/test.d.ts +1 -1
- package/dist/test/test.js +16 -16
- package/dist/test/xhr.mock.d.ts +48 -48
- package/dist/test/xhr.mock.js +94 -94
- package/dist/test/xhr.mock.js.map +1 -1
- package/dist/test/xhr.test.d.ts +1 -1
- package/dist/test/xhr.test.js +344 -344
- package/dist/test/xhr.test.js.map +1 -1
- package/dist/test/xsrf.test.d.ts +1 -1
- package/dist/test/xsrf.test.js +63 -63
- package/dist/test/xsrf.test.js.map +1 -1
- package/dist/testing/api.d.ts +102 -102
- package/dist/testing/api.js +19 -19
- package/dist/testing/backend.d.ts +63 -63
- package/dist/testing/backend.js +141 -141
- package/dist/testing/backend.js.map +1 -1
- package/dist/testing/index.d.ts +10 -10
- package/dist/testing/index.js +16 -16
- package/dist/testing/module.d.ts +16 -16
- package/dist/testing/module.js +38 -38
- package/dist/testing/module.js.map +1 -1
- package/dist/testing/request.d.ts +56 -56
- package/dist/testing/request.js +177 -177
- package/dist/testing/request.js.map +1 -1
- package/dist/testing/request.test.d.ts +8 -8
- package/dist/testing/request.test.js +24 -24
- package/dist/xhr.d.ts +42 -42
- package/dist/xhr.js +298 -298
- package/dist/xhr.js.map +1 -1
- package/dist/xsrf.d.ts +37 -37
- package/dist/xsrf.js +55 -55
- package/dist/xsrf.js.map +1 -1
- package/dist.esm/backend.d.ts +38 -38
- package/dist.esm/backend.js +33 -33
- package/dist.esm/client.d.ts +2108 -2108
- package/dist.esm/client.js +262 -262
- package/dist.esm/client.js.map +1 -1
- package/dist.esm/headers.d.ts +57 -57
- package/dist.esm/headers.js +183 -183
- package/dist.esm/headers.js.map +1 -1
- package/dist.esm/index.d.ts +18 -18
- package/dist.esm/index.js +18 -18
- package/dist.esm/interceptor.d.ts +63 -63
- package/dist.esm/interceptor.js +39 -39
- package/dist.esm/interceptor.js.map +1 -1
- package/dist.esm/module.d.ts +101 -101
- package/dist.esm/module.js +183 -183
- package/dist.esm/module.js.map +1 -1
- package/dist.esm/params.d.ts +98 -98
- package/dist.esm/params.js +179 -179
- package/dist.esm/params.js.map +1 -1
- package/dist.esm/request.d.ts +130 -130
- package/dist.esm/request.js +256 -256
- package/dist.esm/request.js.map +1 -1
- package/dist.esm/response.d.ts +267 -267
- package/dist.esm/response.js +158 -158
- package/dist.esm/response.js.map +1 -1
- package/dist.esm/server.d.ts +28 -28
- package/dist.esm/server.js +113 -113
- package/dist.esm/server.js.map +1 -1
- package/dist.esm/test/client.test.d.ts +8 -8
- package/dist.esm/test/client.test.js +161 -161
- package/dist.esm/test/client.test.js.map +1 -1
- package/dist.esm/test/headers.test.d.ts +1 -1
- package/dist.esm/test/headers.test.js +124 -124
- package/dist.esm/test/module.test.d.ts +1 -1
- package/dist.esm/test/module.test.js +115 -115
- package/dist.esm/test/module.test.js.map +1 -1
- package/dist.esm/test/params.test.d.ts +1 -1
- package/dist.esm/test/params.test.js +61 -61
- package/dist.esm/test/request.test.d.ts +8 -8
- package/dist.esm/test/request.test.js +157 -157
- package/dist.esm/test/request.test.js.map +1 -1
- package/dist.esm/test/response.test.d.ts +1 -1
- package/dist.esm/test/response.test.js +77 -77
- package/dist.esm/test/response.test.js.map +1 -1
- package/dist.esm/test/test.d.ts +1 -1
- package/dist.esm/test/test.js +14 -14
- package/dist.esm/test/xhr.mock.d.ts +48 -48
- package/dist.esm/test/xhr.mock.js +88 -88
- package/dist.esm/test/xhr.mock.js.map +1 -1
- package/dist.esm/test/xhr.test.d.ts +1 -1
- package/dist.esm/test/xhr.test.js +342 -342
- package/dist.esm/test/xhr.test.js.map +1 -1
- package/dist.esm/test/xsrf.test.d.ts +1 -1
- package/dist.esm/test/xsrf.test.js +61 -61
- package/dist.esm/test/xsrf.test.js.map +1 -1
- package/dist.esm/testing/api.d.ts +102 -102
- package/dist.esm/testing/api.js +15 -15
- package/dist.esm/testing/backend.d.ts +63 -63
- package/dist.esm/testing/backend.js +138 -138
- package/dist.esm/testing/backend.js.map +1 -1
- package/dist.esm/testing/index.d.ts +10 -10
- package/dist.esm/testing/index.js +10 -10
- package/dist.esm/testing/module.d.ts +16 -16
- package/dist.esm/testing/module.js +35 -35
- package/dist.esm/testing/module.js.map +1 -1
- package/dist.esm/testing/request.d.ts +56 -56
- package/dist.esm/testing/request.js +173 -173
- package/dist.esm/testing/request.js.map +1 -1
- package/dist.esm/testing/request.test.d.ts +8 -8
- package/dist.esm/testing/request.test.js +22 -22
- package/dist.esm/xhr.d.ts +42 -42
- package/dist.esm/xhr.js +294 -294
- package/dist.esm/xhr.js.map +1 -1
- package/dist.esm/xsrf.d.ts +37 -37
- package/dist.esm/xsrf.js +51 -51
- package/dist.esm/xsrf.js.map +1 -1
- package/package.json +9 -9
- package/tsconfig.esm.tsbuildinfo +1 -0
- package/tsconfig.json +0 -2
- package/tsconfig.tsbuildinfo +1 -8046
package/dist/test/xhr.test.js
CHANGED
|
@@ -1,345 +1,345 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/**
|
|
4
|
-
* @license
|
|
5
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
6
|
-
*
|
|
7
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
8
|
-
* found in the LICENSE file at https://angular.io/license
|
|
9
|
-
*/
|
|
10
|
-
const razmin_1 = require("razmin");
|
|
11
|
-
const chai_1 = require("chai");
|
|
12
|
-
const operators_1 = require("rxjs/operators");
|
|
13
|
-
const request_1 = require("../request");
|
|
14
|
-
const response_1 = require("../response");
|
|
15
|
-
const xhr_1 = require("../xhr");
|
|
16
|
-
const xhr_mock_1 = require("./xhr.mock");
|
|
17
|
-
function trackEvents(obs) {
|
|
18
|
-
const events = [];
|
|
19
|
-
obs.subscribe(event => events.push(event), err => events.push(err));
|
|
20
|
-
return events;
|
|
21
|
-
}
|
|
22
|
-
const TEST_POST = new request_1.HttpRequest('POST', '/test', 'some body', {
|
|
23
|
-
responseType: 'text',
|
|
24
|
-
});
|
|
25
|
-
const XSSI_PREFIX = ')]}\'\n';
|
|
26
|
-
{
|
|
27
|
-
(0, razmin_1.describe)('XhrBackend', () => {
|
|
28
|
-
let factory = null;
|
|
29
|
-
let backend = null;
|
|
30
|
-
(0, razmin_1.beforeEach)(() => {
|
|
31
|
-
factory = new xhr_mock_1.MockXhrFactory();
|
|
32
|
-
backend = new xhr_1.HttpXhrBackend(factory);
|
|
33
|
-
});
|
|
34
|
-
(0, razmin_1.it)('emits status immediately', () => {
|
|
35
|
-
const events = trackEvents(backend.handle(TEST_POST));
|
|
36
|
-
(0, chai_1.expect)(events.length).to.equal(1);
|
|
37
|
-
(0, chai_1.expect)(events[0].type).to.equal(response_1.HttpEventType.Sent);
|
|
38
|
-
});
|
|
39
|
-
(0, razmin_1.it)('sets method, url, and responseType correctly', () => {
|
|
40
|
-
backend.handle(TEST_POST).subscribe();
|
|
41
|
-
(0, chai_1.expect)(factory.mock.method).to.equal('POST');
|
|
42
|
-
(0, chai_1.expect)(factory.mock.responseType).to.equal('text');
|
|
43
|
-
(0, chai_1.expect)(factory.mock.url).to.equal('/test');
|
|
44
|
-
});
|
|
45
|
-
(0, razmin_1.it)('sets outgoing body correctly', () => {
|
|
46
|
-
backend.handle(TEST_POST).subscribe();
|
|
47
|
-
(0, chai_1.expect)(factory.mock.body).to.equal('some body');
|
|
48
|
-
});
|
|
49
|
-
(0, razmin_1.it)('sets outgoing headers, including default headers', () => {
|
|
50
|
-
const post = TEST_POST.clone({
|
|
51
|
-
setHeaders: {
|
|
52
|
-
'Test': 'Test header',
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
backend.handle(post).subscribe();
|
|
56
|
-
(0, chai_1.expect)(factory.mock.mockHeaders).to.eql({
|
|
57
|
-
'Test': 'Test header',
|
|
58
|
-
'Accept': 'application/json, text/plain, */*',
|
|
59
|
-
'Content-Type': 'text/plain',
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
(0, razmin_1.it)('sets outgoing headers, including overriding defaults', () => {
|
|
63
|
-
const setHeaders = {
|
|
64
|
-
'Test': 'Test header',
|
|
65
|
-
'Accept': 'text/html',
|
|
66
|
-
'Content-Type': 'text/css',
|
|
67
|
-
};
|
|
68
|
-
backend.handle(TEST_POST.clone({ setHeaders })).subscribe();
|
|
69
|
-
(0, chai_1.expect)(factory.mock.mockHeaders).to.eql(setHeaders);
|
|
70
|
-
});
|
|
71
|
-
(0, razmin_1.it)('passes withCredentials through', () => {
|
|
72
|
-
backend.handle(TEST_POST.clone({ withCredentials: true })).subscribe();
|
|
73
|
-
(0, chai_1.expect)(factory.mock.withCredentials).to.equal(true);
|
|
74
|
-
});
|
|
75
|
-
(0, razmin_1.it)('handles a text response', () => {
|
|
76
|
-
const events = trackEvents(backend.handle(TEST_POST));
|
|
77
|
-
factory.mock.mockFlush(200, 'OK', 'some response');
|
|
78
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
79
|
-
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
80
|
-
(0, chai_1.expect)(events[1] instanceof response_1.HttpResponse).to.be.ok;
|
|
81
|
-
const res = events[1];
|
|
82
|
-
(0, chai_1.expect)(res.body).to.equal('some response');
|
|
83
|
-
(0, chai_1.expect)(res.status).to.equal(200);
|
|
84
|
-
(0, chai_1.expect)(res.statusText).to.equal('OK');
|
|
85
|
-
});
|
|
86
|
-
(0, razmin_1.it)('handles a json response', () => {
|
|
87
|
-
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
88
|
-
factory.mock.mockFlush(200, 'OK', JSON.stringify({ data: 'some data' }));
|
|
89
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
90
|
-
const res = events[1];
|
|
91
|
-
(0, chai_1.expect)(res.body.data).to.equal('some data');
|
|
92
|
-
});
|
|
93
|
-
(0, razmin_1.it)('handles a blank json response', () => {
|
|
94
|
-
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
95
|
-
factory.mock.mockFlush(200, 'OK', '');
|
|
96
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
97
|
-
const res = events[1];
|
|
98
|
-
(0, chai_1.expect)(res.body).to.be.null;
|
|
99
|
-
});
|
|
100
|
-
(0, razmin_1.it)('handles a json error response', () => {
|
|
101
|
-
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
102
|
-
factory.mock.mockFlush(500, 'Error', JSON.stringify({ data: 'some data' }));
|
|
103
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
104
|
-
const res = events[1];
|
|
105
|
-
(0, chai_1.expect)(res.error.data).to.equal('some data');
|
|
106
|
-
});
|
|
107
|
-
(0, razmin_1.it)('handles a json error response with XSSI prefix', () => {
|
|
108
|
-
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
109
|
-
factory.mock.mockFlush(500, 'Error', XSSI_PREFIX + JSON.stringify({ data: 'some data' }));
|
|
110
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
111
|
-
const res = events[1];
|
|
112
|
-
(0, chai_1.expect)(res.error.data).to.equal('some data');
|
|
113
|
-
});
|
|
114
|
-
(0, razmin_1.it)('handles a json string response', () => {
|
|
115
|
-
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
116
|
-
(0, chai_1.expect)(factory.mock.responseType).to.equal('text');
|
|
117
|
-
factory.mock.mockFlush(200, 'OK', JSON.stringify('this is a string'));
|
|
118
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
119
|
-
const res = events[1];
|
|
120
|
-
(0, chai_1.expect)(res.body).to.equal('this is a string');
|
|
121
|
-
});
|
|
122
|
-
(0, razmin_1.it)('handles a json response with an XSSI prefix', () => {
|
|
123
|
-
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
124
|
-
factory.mock.mockFlush(200, 'OK', XSSI_PREFIX + JSON.stringify({ data: 'some data' }));
|
|
125
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
126
|
-
const res = events[1];
|
|
127
|
-
(0, chai_1.expect)(res.body.data).to.equal('some data');
|
|
128
|
-
});
|
|
129
|
-
(0, razmin_1.it)('emits unsuccessful responses via the error path', done => {
|
|
130
|
-
backend.handle(TEST_POST).subscribe(undefined, (err) => {
|
|
131
|
-
(0, chai_1.expect)(err instanceof response_1.HttpErrorResponse).to.equal(true);
|
|
132
|
-
(0, chai_1.expect)(err.error).to.equal('this is the error');
|
|
133
|
-
done();
|
|
134
|
-
});
|
|
135
|
-
factory.mock.mockFlush(400, 'Bad Request', 'this is the error');
|
|
136
|
-
});
|
|
137
|
-
(0, razmin_1.it)('emits real errors via the error path', done => {
|
|
138
|
-
backend.handle(TEST_POST).subscribe(undefined, (err) => {
|
|
139
|
-
(0, chai_1.expect)(err instanceof response_1.HttpErrorResponse).to.equal(true);
|
|
140
|
-
(0, chai_1.expect)(err.error instanceof Error);
|
|
141
|
-
done();
|
|
142
|
-
});
|
|
143
|
-
factory.mock.mockErrorEvent(new Error('blah'));
|
|
144
|
-
});
|
|
145
|
-
(0, razmin_1.describe)('progress events', () => {
|
|
146
|
-
(0, razmin_1.it)('are emitted for download progress', done => {
|
|
147
|
-
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
148
|
-
.pipe((0, operators_1.toArray)())
|
|
149
|
-
.subscribe(events => {
|
|
150
|
-
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
151
|
-
response_1.HttpEventType.Sent,
|
|
152
|
-
response_1.HttpEventType.ResponseHeader,
|
|
153
|
-
response_1.HttpEventType.DownloadProgress,
|
|
154
|
-
response_1.HttpEventType.DownloadProgress,
|
|
155
|
-
response_1.HttpEventType.Response,
|
|
156
|
-
]);
|
|
157
|
-
const [progress1, progress2, response] = [
|
|
158
|
-
events[2], events[3],
|
|
159
|
-
events[4]
|
|
160
|
-
];
|
|
161
|
-
(0, chai_1.expect)(progress1.partialText).to.equal('down');
|
|
162
|
-
(0, chai_1.expect)(progress1.loaded).to.equal(100);
|
|
163
|
-
(0, chai_1.expect)(progress1.total).to.equal(300);
|
|
164
|
-
(0, chai_1.expect)(progress2.partialText).to.equal('download');
|
|
165
|
-
(0, chai_1.expect)(progress2.loaded).to.equal(200);
|
|
166
|
-
(0, chai_1.expect)(progress2.total).to.equal(300);
|
|
167
|
-
(0, chai_1.expect)(response.body).to.equal('downloaded');
|
|
168
|
-
done();
|
|
169
|
-
});
|
|
170
|
-
factory.mock.responseText = 'down';
|
|
171
|
-
factory.mock.mockDownloadProgressEvent(100, 300);
|
|
172
|
-
factory.mock.responseText = 'download';
|
|
173
|
-
factory.mock.mockDownloadProgressEvent(200, 300);
|
|
174
|
-
factory.mock.mockFlush(200, 'OK', 'downloaded');
|
|
175
|
-
});
|
|
176
|
-
(0, razmin_1.it)('are emitted for upload progress', done => {
|
|
177
|
-
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
178
|
-
.pipe((0, operators_1.toArray)())
|
|
179
|
-
.subscribe(events => {
|
|
180
|
-
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
181
|
-
response_1.HttpEventType.Sent,
|
|
182
|
-
response_1.HttpEventType.UploadProgress,
|
|
183
|
-
response_1.HttpEventType.UploadProgress,
|
|
184
|
-
response_1.HttpEventType.Response,
|
|
185
|
-
]);
|
|
186
|
-
const [progress1, progress2] = [
|
|
187
|
-
events[1],
|
|
188
|
-
events[2],
|
|
189
|
-
];
|
|
190
|
-
(0, chai_1.expect)(progress1.loaded).to.equal(100);
|
|
191
|
-
(0, chai_1.expect)(progress1.total).to.equal(300);
|
|
192
|
-
(0, chai_1.expect)(progress2.loaded).to.equal(200);
|
|
193
|
-
(0, chai_1.expect)(progress2.total).to.equal(300);
|
|
194
|
-
done();
|
|
195
|
-
});
|
|
196
|
-
factory.mock.mockUploadProgressEvent(100, 300);
|
|
197
|
-
factory.mock.mockUploadProgressEvent(200, 300);
|
|
198
|
-
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
199
|
-
});
|
|
200
|
-
(0, razmin_1.it)('are emitted when both upload and download progress are available', done => {
|
|
201
|
-
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
202
|
-
.pipe((0, operators_1.toArray)())
|
|
203
|
-
.subscribe(events => {
|
|
204
|
-
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
205
|
-
response_1.HttpEventType.Sent,
|
|
206
|
-
response_1.HttpEventType.UploadProgress,
|
|
207
|
-
response_1.HttpEventType.ResponseHeader,
|
|
208
|
-
response_1.HttpEventType.DownloadProgress,
|
|
209
|
-
response_1.HttpEventType.Response,
|
|
210
|
-
]);
|
|
211
|
-
done();
|
|
212
|
-
});
|
|
213
|
-
factory.mock.mockUploadProgressEvent(100, 300);
|
|
214
|
-
factory.mock.mockDownloadProgressEvent(200, 300);
|
|
215
|
-
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
216
|
-
});
|
|
217
|
-
(0, razmin_1.it)('are emitted even if length is not computable', done => {
|
|
218
|
-
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
219
|
-
.pipe((0, operators_1.toArray)())
|
|
220
|
-
.subscribe(events => {
|
|
221
|
-
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
222
|
-
response_1.HttpEventType.Sent,
|
|
223
|
-
response_1.HttpEventType.UploadProgress,
|
|
224
|
-
response_1.HttpEventType.ResponseHeader,
|
|
225
|
-
response_1.HttpEventType.DownloadProgress,
|
|
226
|
-
response_1.HttpEventType.Response,
|
|
227
|
-
]);
|
|
228
|
-
done();
|
|
229
|
-
});
|
|
230
|
-
factory.mock.mockUploadProgressEvent(100);
|
|
231
|
-
factory.mock.mockDownloadProgressEvent(200);
|
|
232
|
-
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
233
|
-
});
|
|
234
|
-
(0, razmin_1.it)('include ResponseHeader with headers and status', done => {
|
|
235
|
-
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
236
|
-
.pipe((0, operators_1.toArray)())
|
|
237
|
-
.subscribe(events => {
|
|
238
|
-
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
239
|
-
response_1.HttpEventType.Sent,
|
|
240
|
-
response_1.HttpEventType.ResponseHeader,
|
|
241
|
-
response_1.HttpEventType.DownloadProgress,
|
|
242
|
-
response_1.HttpEventType.Response,
|
|
243
|
-
]);
|
|
244
|
-
const partial = events[1];
|
|
245
|
-
(0, chai_1.expect)(partial.headers.get('Content-Type')).to.equal('text/plain');
|
|
246
|
-
(0, chai_1.expect)(partial.headers.get('Test')).to.equal('Test header');
|
|
247
|
-
done();
|
|
248
|
-
});
|
|
249
|
-
factory.mock.mockResponseHeaders = 'Test: Test header\nContent-Type: text/plain\n';
|
|
250
|
-
factory.mock.mockDownloadProgressEvent(200);
|
|
251
|
-
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
252
|
-
});
|
|
253
|
-
(0, razmin_1.it)('are unsubscribed along with the main request', () => {
|
|
254
|
-
const sub = backend.handle(TEST_POST.clone({ reportProgress: true })).subscribe();
|
|
255
|
-
(0, chai_1.expect)(factory.mock.listeners.progress).not.to.be.undefined;
|
|
256
|
-
sub.unsubscribe();
|
|
257
|
-
(0, chai_1.expect)(factory.mock.listeners.progress).to.be.undefined;
|
|
258
|
-
});
|
|
259
|
-
(0, razmin_1.it)('do not cause headers to be re-parsed on main response', done => {
|
|
260
|
-
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
261
|
-
.pipe((0, operators_1.toArray)())
|
|
262
|
-
.subscribe(events => {
|
|
263
|
-
events
|
|
264
|
-
.filter(event => event.type === response_1.HttpEventType.Response ||
|
|
265
|
-
event.type === response_1.HttpEventType.ResponseHeader)
|
|
266
|
-
.map(event => event)
|
|
267
|
-
.forEach(event => {
|
|
268
|
-
(0, chai_1.expect)(event.status).to.equal(203);
|
|
269
|
-
(0, chai_1.expect)(event.headers.get('Test')).to.equal('This is a test');
|
|
270
|
-
});
|
|
271
|
-
done();
|
|
272
|
-
});
|
|
273
|
-
factory.mock.mockResponseHeaders = 'Test: This is a test\n';
|
|
274
|
-
factory.mock.status = 203;
|
|
275
|
-
factory.mock.mockDownloadProgressEvent(100, 300);
|
|
276
|
-
factory.mock.mockResponseHeaders = 'Test: should never be read\n';
|
|
277
|
-
factory.mock.mockFlush(203, 'OK', 'Testing 1 2 3');
|
|
278
|
-
});
|
|
279
|
-
});
|
|
280
|
-
(0, razmin_1.describe)('gets response URL', () => {
|
|
281
|
-
(0, razmin_1.it)('from XHR.responsesURL', done => {
|
|
282
|
-
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
283
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
284
|
-
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
285
|
-
const response = events[1];
|
|
286
|
-
(0, chai_1.expect)(response.url).to.equal('/response/url');
|
|
287
|
-
done();
|
|
288
|
-
});
|
|
289
|
-
factory.mock.responseURL = '/response/url';
|
|
290
|
-
factory.mock.mockFlush(200, 'OK', 'Test');
|
|
291
|
-
});
|
|
292
|
-
(0, razmin_1.it)('from X-Request-URL header if XHR.responseURL is not present', done => {
|
|
293
|
-
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
294
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
295
|
-
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
296
|
-
const response = events[1];
|
|
297
|
-
(0, chai_1.expect)(response.url).to.equal('/response/url');
|
|
298
|
-
done();
|
|
299
|
-
});
|
|
300
|
-
factory.mock.mockResponseHeaders = 'X-Request-URL: /response/url\n';
|
|
301
|
-
factory.mock.mockFlush(200, 'OK', 'Test');
|
|
302
|
-
});
|
|
303
|
-
(0, razmin_1.it)('falls back on Request.url if neither are available', done => {
|
|
304
|
-
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
305
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
306
|
-
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
307
|
-
const response = events[1];
|
|
308
|
-
(0, chai_1.expect)(response.url).to.equal('/test');
|
|
309
|
-
done();
|
|
310
|
-
});
|
|
311
|
-
factory.mock.mockFlush(200, 'OK', 'Test');
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
(0, razmin_1.describe)('corrects for quirks', () => {
|
|
315
|
-
(0, razmin_1.it)('by normalizing 1223 status to 204', done => {
|
|
316
|
-
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
317
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
318
|
-
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
319
|
-
const response = events[1];
|
|
320
|
-
(0, chai_1.expect)(response.status).to.equal(204);
|
|
321
|
-
done();
|
|
322
|
-
});
|
|
323
|
-
factory.mock.mockFlush(1223, 'IE Special Status', 'Test');
|
|
324
|
-
});
|
|
325
|
-
(0, razmin_1.it)('by normalizing 0 status to 200 if a body is present', done => {
|
|
326
|
-
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
327
|
-
(0, chai_1.expect)(events.length).to.equal(2);
|
|
328
|
-
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
329
|
-
const response = events[1];
|
|
330
|
-
(0, chai_1.expect)(response.status).to.equal(200);
|
|
331
|
-
done();
|
|
332
|
-
});
|
|
333
|
-
factory.mock.mockFlush(0, 'CORS 0 status', 'Test');
|
|
334
|
-
});
|
|
335
|
-
(0, razmin_1.it)('by leaving 0 status as 0 if a body is not present', done => {
|
|
336
|
-
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(undefined, (error) => {
|
|
337
|
-
(0, chai_1.expect)(error.status).to.equal(0);
|
|
338
|
-
done();
|
|
339
|
-
});
|
|
340
|
-
factory.mock.mockFlush(0, 'CORS 0 status');
|
|
341
|
-
});
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* @license
|
|
5
|
+
* Copyright Google Inc. All Rights Reserved.
|
|
6
|
+
*
|
|
7
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
8
|
+
* found in the LICENSE file at https://angular.io/license
|
|
9
|
+
*/
|
|
10
|
+
const razmin_1 = require("razmin");
|
|
11
|
+
const chai_1 = require("chai");
|
|
12
|
+
const operators_1 = require("rxjs/operators");
|
|
13
|
+
const request_1 = require("../request");
|
|
14
|
+
const response_1 = require("../response");
|
|
15
|
+
const xhr_1 = require("../xhr");
|
|
16
|
+
const xhr_mock_1 = require("./xhr.mock");
|
|
17
|
+
function trackEvents(obs) {
|
|
18
|
+
const events = [];
|
|
19
|
+
obs.subscribe(event => events.push(event), err => events.push(err));
|
|
20
|
+
return events;
|
|
21
|
+
}
|
|
22
|
+
const TEST_POST = new request_1.HttpRequest('POST', '/test', 'some body', {
|
|
23
|
+
responseType: 'text',
|
|
24
|
+
});
|
|
25
|
+
const XSSI_PREFIX = ')]}\'\n';
|
|
26
|
+
{
|
|
27
|
+
(0, razmin_1.describe)('XhrBackend', () => {
|
|
28
|
+
let factory = null;
|
|
29
|
+
let backend = null;
|
|
30
|
+
(0, razmin_1.beforeEach)(() => {
|
|
31
|
+
factory = new xhr_mock_1.MockXhrFactory();
|
|
32
|
+
backend = new xhr_1.HttpXhrBackend(factory);
|
|
33
|
+
});
|
|
34
|
+
(0, razmin_1.it)('emits status immediately', () => {
|
|
35
|
+
const events = trackEvents(backend.handle(TEST_POST));
|
|
36
|
+
(0, chai_1.expect)(events.length).to.equal(1);
|
|
37
|
+
(0, chai_1.expect)(events[0].type).to.equal(response_1.HttpEventType.Sent);
|
|
38
|
+
});
|
|
39
|
+
(0, razmin_1.it)('sets method, url, and responseType correctly', () => {
|
|
40
|
+
backend.handle(TEST_POST).subscribe();
|
|
41
|
+
(0, chai_1.expect)(factory.mock.method).to.equal('POST');
|
|
42
|
+
(0, chai_1.expect)(factory.mock.responseType).to.equal('text');
|
|
43
|
+
(0, chai_1.expect)(factory.mock.url).to.equal('/test');
|
|
44
|
+
});
|
|
45
|
+
(0, razmin_1.it)('sets outgoing body correctly', () => {
|
|
46
|
+
backend.handle(TEST_POST).subscribe();
|
|
47
|
+
(0, chai_1.expect)(factory.mock.body).to.equal('some body');
|
|
48
|
+
});
|
|
49
|
+
(0, razmin_1.it)('sets outgoing headers, including default headers', () => {
|
|
50
|
+
const post = TEST_POST.clone({
|
|
51
|
+
setHeaders: {
|
|
52
|
+
'Test': 'Test header',
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
backend.handle(post).subscribe();
|
|
56
|
+
(0, chai_1.expect)(factory.mock.mockHeaders).to.eql({
|
|
57
|
+
'Test': 'Test header',
|
|
58
|
+
'Accept': 'application/json, text/plain, */*',
|
|
59
|
+
'Content-Type': 'text/plain',
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
(0, razmin_1.it)('sets outgoing headers, including overriding defaults', () => {
|
|
63
|
+
const setHeaders = {
|
|
64
|
+
'Test': 'Test header',
|
|
65
|
+
'Accept': 'text/html',
|
|
66
|
+
'Content-Type': 'text/css',
|
|
67
|
+
};
|
|
68
|
+
backend.handle(TEST_POST.clone({ setHeaders })).subscribe();
|
|
69
|
+
(0, chai_1.expect)(factory.mock.mockHeaders).to.eql(setHeaders);
|
|
70
|
+
});
|
|
71
|
+
(0, razmin_1.it)('passes withCredentials through', () => {
|
|
72
|
+
backend.handle(TEST_POST.clone({ withCredentials: true })).subscribe();
|
|
73
|
+
(0, chai_1.expect)(factory.mock.withCredentials).to.equal(true);
|
|
74
|
+
});
|
|
75
|
+
(0, razmin_1.it)('handles a text response', () => {
|
|
76
|
+
const events = trackEvents(backend.handle(TEST_POST));
|
|
77
|
+
factory.mock.mockFlush(200, 'OK', 'some response');
|
|
78
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
79
|
+
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
80
|
+
(0, chai_1.expect)(events[1] instanceof response_1.HttpResponse).to.be.ok;
|
|
81
|
+
const res = events[1];
|
|
82
|
+
(0, chai_1.expect)(res.body).to.equal('some response');
|
|
83
|
+
(0, chai_1.expect)(res.status).to.equal(200);
|
|
84
|
+
(0, chai_1.expect)(res.statusText).to.equal('OK');
|
|
85
|
+
});
|
|
86
|
+
(0, razmin_1.it)('handles a json response', () => {
|
|
87
|
+
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
88
|
+
factory.mock.mockFlush(200, 'OK', JSON.stringify({ data: 'some data' }));
|
|
89
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
90
|
+
const res = events[1];
|
|
91
|
+
(0, chai_1.expect)(res.body.data).to.equal('some data');
|
|
92
|
+
});
|
|
93
|
+
(0, razmin_1.it)('handles a blank json response', () => {
|
|
94
|
+
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
95
|
+
factory.mock.mockFlush(200, 'OK', '');
|
|
96
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
97
|
+
const res = events[1];
|
|
98
|
+
(0, chai_1.expect)(res.body).to.be.null;
|
|
99
|
+
});
|
|
100
|
+
(0, razmin_1.it)('handles a json error response', () => {
|
|
101
|
+
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
102
|
+
factory.mock.mockFlush(500, 'Error', JSON.stringify({ data: 'some data' }));
|
|
103
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
104
|
+
const res = events[1];
|
|
105
|
+
(0, chai_1.expect)(res.error.data).to.equal('some data');
|
|
106
|
+
});
|
|
107
|
+
(0, razmin_1.it)('handles a json error response with XSSI prefix', () => {
|
|
108
|
+
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
109
|
+
factory.mock.mockFlush(500, 'Error', XSSI_PREFIX + JSON.stringify({ data: 'some data' }));
|
|
110
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
111
|
+
const res = events[1];
|
|
112
|
+
(0, chai_1.expect)(res.error.data).to.equal('some data');
|
|
113
|
+
});
|
|
114
|
+
(0, razmin_1.it)('handles a json string response', () => {
|
|
115
|
+
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
116
|
+
(0, chai_1.expect)(factory.mock.responseType).to.equal('text');
|
|
117
|
+
factory.mock.mockFlush(200, 'OK', JSON.stringify('this is a string'));
|
|
118
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
119
|
+
const res = events[1];
|
|
120
|
+
(0, chai_1.expect)(res.body).to.equal('this is a string');
|
|
121
|
+
});
|
|
122
|
+
(0, razmin_1.it)('handles a json response with an XSSI prefix', () => {
|
|
123
|
+
const events = trackEvents(backend.handle(TEST_POST.clone({ responseType: 'json' })));
|
|
124
|
+
factory.mock.mockFlush(200, 'OK', XSSI_PREFIX + JSON.stringify({ data: 'some data' }));
|
|
125
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
126
|
+
const res = events[1];
|
|
127
|
+
(0, chai_1.expect)(res.body.data).to.equal('some data');
|
|
128
|
+
});
|
|
129
|
+
(0, razmin_1.it)('emits unsuccessful responses via the error path', done => {
|
|
130
|
+
backend.handle(TEST_POST).subscribe(undefined, (err) => {
|
|
131
|
+
(0, chai_1.expect)(err instanceof response_1.HttpErrorResponse).to.equal(true);
|
|
132
|
+
(0, chai_1.expect)(err.error).to.equal('this is the error');
|
|
133
|
+
done();
|
|
134
|
+
});
|
|
135
|
+
factory.mock.mockFlush(400, 'Bad Request', 'this is the error');
|
|
136
|
+
});
|
|
137
|
+
(0, razmin_1.it)('emits real errors via the error path', done => {
|
|
138
|
+
backend.handle(TEST_POST).subscribe(undefined, (err) => {
|
|
139
|
+
(0, chai_1.expect)(err instanceof response_1.HttpErrorResponse).to.equal(true);
|
|
140
|
+
(0, chai_1.expect)(err.error instanceof Error);
|
|
141
|
+
done();
|
|
142
|
+
});
|
|
143
|
+
factory.mock.mockErrorEvent(new Error('blah'));
|
|
144
|
+
});
|
|
145
|
+
(0, razmin_1.describe)('progress events', () => {
|
|
146
|
+
(0, razmin_1.it)('are emitted for download progress', done => {
|
|
147
|
+
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
148
|
+
.pipe((0, operators_1.toArray)())
|
|
149
|
+
.subscribe(events => {
|
|
150
|
+
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
151
|
+
response_1.HttpEventType.Sent,
|
|
152
|
+
response_1.HttpEventType.ResponseHeader,
|
|
153
|
+
response_1.HttpEventType.DownloadProgress,
|
|
154
|
+
response_1.HttpEventType.DownloadProgress,
|
|
155
|
+
response_1.HttpEventType.Response,
|
|
156
|
+
]);
|
|
157
|
+
const [progress1, progress2, response] = [
|
|
158
|
+
events[2], events[3],
|
|
159
|
+
events[4]
|
|
160
|
+
];
|
|
161
|
+
(0, chai_1.expect)(progress1.partialText).to.equal('down');
|
|
162
|
+
(0, chai_1.expect)(progress1.loaded).to.equal(100);
|
|
163
|
+
(0, chai_1.expect)(progress1.total).to.equal(300);
|
|
164
|
+
(0, chai_1.expect)(progress2.partialText).to.equal('download');
|
|
165
|
+
(0, chai_1.expect)(progress2.loaded).to.equal(200);
|
|
166
|
+
(0, chai_1.expect)(progress2.total).to.equal(300);
|
|
167
|
+
(0, chai_1.expect)(response.body).to.equal('downloaded');
|
|
168
|
+
done();
|
|
169
|
+
});
|
|
170
|
+
factory.mock.responseText = 'down';
|
|
171
|
+
factory.mock.mockDownloadProgressEvent(100, 300);
|
|
172
|
+
factory.mock.responseText = 'download';
|
|
173
|
+
factory.mock.mockDownloadProgressEvent(200, 300);
|
|
174
|
+
factory.mock.mockFlush(200, 'OK', 'downloaded');
|
|
175
|
+
});
|
|
176
|
+
(0, razmin_1.it)('are emitted for upload progress', done => {
|
|
177
|
+
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
178
|
+
.pipe((0, operators_1.toArray)())
|
|
179
|
+
.subscribe(events => {
|
|
180
|
+
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
181
|
+
response_1.HttpEventType.Sent,
|
|
182
|
+
response_1.HttpEventType.UploadProgress,
|
|
183
|
+
response_1.HttpEventType.UploadProgress,
|
|
184
|
+
response_1.HttpEventType.Response,
|
|
185
|
+
]);
|
|
186
|
+
const [progress1, progress2] = [
|
|
187
|
+
events[1],
|
|
188
|
+
events[2],
|
|
189
|
+
];
|
|
190
|
+
(0, chai_1.expect)(progress1.loaded).to.equal(100);
|
|
191
|
+
(0, chai_1.expect)(progress1.total).to.equal(300);
|
|
192
|
+
(0, chai_1.expect)(progress2.loaded).to.equal(200);
|
|
193
|
+
(0, chai_1.expect)(progress2.total).to.equal(300);
|
|
194
|
+
done();
|
|
195
|
+
});
|
|
196
|
+
factory.mock.mockUploadProgressEvent(100, 300);
|
|
197
|
+
factory.mock.mockUploadProgressEvent(200, 300);
|
|
198
|
+
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
199
|
+
});
|
|
200
|
+
(0, razmin_1.it)('are emitted when both upload and download progress are available', done => {
|
|
201
|
+
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
202
|
+
.pipe((0, operators_1.toArray)())
|
|
203
|
+
.subscribe(events => {
|
|
204
|
+
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
205
|
+
response_1.HttpEventType.Sent,
|
|
206
|
+
response_1.HttpEventType.UploadProgress,
|
|
207
|
+
response_1.HttpEventType.ResponseHeader,
|
|
208
|
+
response_1.HttpEventType.DownloadProgress,
|
|
209
|
+
response_1.HttpEventType.Response,
|
|
210
|
+
]);
|
|
211
|
+
done();
|
|
212
|
+
});
|
|
213
|
+
factory.mock.mockUploadProgressEvent(100, 300);
|
|
214
|
+
factory.mock.mockDownloadProgressEvent(200, 300);
|
|
215
|
+
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
216
|
+
});
|
|
217
|
+
(0, razmin_1.it)('are emitted even if length is not computable', done => {
|
|
218
|
+
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
219
|
+
.pipe((0, operators_1.toArray)())
|
|
220
|
+
.subscribe(events => {
|
|
221
|
+
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
222
|
+
response_1.HttpEventType.Sent,
|
|
223
|
+
response_1.HttpEventType.UploadProgress,
|
|
224
|
+
response_1.HttpEventType.ResponseHeader,
|
|
225
|
+
response_1.HttpEventType.DownloadProgress,
|
|
226
|
+
response_1.HttpEventType.Response,
|
|
227
|
+
]);
|
|
228
|
+
done();
|
|
229
|
+
});
|
|
230
|
+
factory.mock.mockUploadProgressEvent(100);
|
|
231
|
+
factory.mock.mockDownloadProgressEvent(200);
|
|
232
|
+
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
233
|
+
});
|
|
234
|
+
(0, razmin_1.it)('include ResponseHeader with headers and status', done => {
|
|
235
|
+
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
236
|
+
.pipe((0, operators_1.toArray)())
|
|
237
|
+
.subscribe(events => {
|
|
238
|
+
(0, chai_1.expect)(events.map(event => event.type)).to.eql([
|
|
239
|
+
response_1.HttpEventType.Sent,
|
|
240
|
+
response_1.HttpEventType.ResponseHeader,
|
|
241
|
+
response_1.HttpEventType.DownloadProgress,
|
|
242
|
+
response_1.HttpEventType.Response,
|
|
243
|
+
]);
|
|
244
|
+
const partial = events[1];
|
|
245
|
+
(0, chai_1.expect)(partial.headers.get('Content-Type')).to.equal('text/plain');
|
|
246
|
+
(0, chai_1.expect)(partial.headers.get('Test')).to.equal('Test header');
|
|
247
|
+
done();
|
|
248
|
+
});
|
|
249
|
+
factory.mock.mockResponseHeaders = 'Test: Test header\nContent-Type: text/plain\n';
|
|
250
|
+
factory.mock.mockDownloadProgressEvent(200);
|
|
251
|
+
factory.mock.mockFlush(200, 'OK', 'Done');
|
|
252
|
+
});
|
|
253
|
+
(0, razmin_1.it)('are unsubscribed along with the main request', () => {
|
|
254
|
+
const sub = backend.handle(TEST_POST.clone({ reportProgress: true })).subscribe();
|
|
255
|
+
(0, chai_1.expect)(factory.mock.listeners.progress).not.to.be.undefined;
|
|
256
|
+
sub.unsubscribe();
|
|
257
|
+
(0, chai_1.expect)(factory.mock.listeners.progress).to.be.undefined;
|
|
258
|
+
});
|
|
259
|
+
(0, razmin_1.it)('do not cause headers to be re-parsed on main response', done => {
|
|
260
|
+
backend.handle(TEST_POST.clone({ reportProgress: true }))
|
|
261
|
+
.pipe((0, operators_1.toArray)())
|
|
262
|
+
.subscribe(events => {
|
|
263
|
+
events
|
|
264
|
+
.filter(event => event.type === response_1.HttpEventType.Response ||
|
|
265
|
+
event.type === response_1.HttpEventType.ResponseHeader)
|
|
266
|
+
.map(event => event)
|
|
267
|
+
.forEach(event => {
|
|
268
|
+
(0, chai_1.expect)(event.status).to.equal(203);
|
|
269
|
+
(0, chai_1.expect)(event.headers.get('Test')).to.equal('This is a test');
|
|
270
|
+
});
|
|
271
|
+
done();
|
|
272
|
+
});
|
|
273
|
+
factory.mock.mockResponseHeaders = 'Test: This is a test\n';
|
|
274
|
+
factory.mock.status = 203;
|
|
275
|
+
factory.mock.mockDownloadProgressEvent(100, 300);
|
|
276
|
+
factory.mock.mockResponseHeaders = 'Test: should never be read\n';
|
|
277
|
+
factory.mock.mockFlush(203, 'OK', 'Testing 1 2 3');
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
(0, razmin_1.describe)('gets response URL', () => {
|
|
281
|
+
(0, razmin_1.it)('from XHR.responsesURL', done => {
|
|
282
|
+
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
283
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
284
|
+
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
285
|
+
const response = events[1];
|
|
286
|
+
(0, chai_1.expect)(response.url).to.equal('/response/url');
|
|
287
|
+
done();
|
|
288
|
+
});
|
|
289
|
+
factory.mock.responseURL = '/response/url';
|
|
290
|
+
factory.mock.mockFlush(200, 'OK', 'Test');
|
|
291
|
+
});
|
|
292
|
+
(0, razmin_1.it)('from X-Request-URL header if XHR.responseURL is not present', done => {
|
|
293
|
+
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
294
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
295
|
+
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
296
|
+
const response = events[1];
|
|
297
|
+
(0, chai_1.expect)(response.url).to.equal('/response/url');
|
|
298
|
+
done();
|
|
299
|
+
});
|
|
300
|
+
factory.mock.mockResponseHeaders = 'X-Request-URL: /response/url\n';
|
|
301
|
+
factory.mock.mockFlush(200, 'OK', 'Test');
|
|
302
|
+
});
|
|
303
|
+
(0, razmin_1.it)('falls back on Request.url if neither are available', done => {
|
|
304
|
+
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
305
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
306
|
+
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
307
|
+
const response = events[1];
|
|
308
|
+
(0, chai_1.expect)(response.url).to.equal('/test');
|
|
309
|
+
done();
|
|
310
|
+
});
|
|
311
|
+
factory.mock.mockFlush(200, 'OK', 'Test');
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
(0, razmin_1.describe)('corrects for quirks', () => {
|
|
315
|
+
(0, razmin_1.it)('by normalizing 1223 status to 204', done => {
|
|
316
|
+
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
317
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
318
|
+
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
319
|
+
const response = events[1];
|
|
320
|
+
(0, chai_1.expect)(response.status).to.equal(204);
|
|
321
|
+
done();
|
|
322
|
+
});
|
|
323
|
+
factory.mock.mockFlush(1223, 'IE Special Status', 'Test');
|
|
324
|
+
});
|
|
325
|
+
(0, razmin_1.it)('by normalizing 0 status to 200 if a body is present', done => {
|
|
326
|
+
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(events => {
|
|
327
|
+
(0, chai_1.expect)(events.length).to.equal(2);
|
|
328
|
+
(0, chai_1.expect)(events[1].type).to.equal(response_1.HttpEventType.Response);
|
|
329
|
+
const response = events[1];
|
|
330
|
+
(0, chai_1.expect)(response.status).to.equal(200);
|
|
331
|
+
done();
|
|
332
|
+
});
|
|
333
|
+
factory.mock.mockFlush(0, 'CORS 0 status', 'Test');
|
|
334
|
+
});
|
|
335
|
+
(0, razmin_1.it)('by leaving 0 status as 0 if a body is not present', done => {
|
|
336
|
+
backend.handle(TEST_POST).pipe((0, operators_1.toArray)()).subscribe(undefined, (error) => {
|
|
337
|
+
(0, chai_1.expect)(error.status).to.equal(0);
|
|
338
|
+
done();
|
|
339
|
+
});
|
|
340
|
+
factory.mock.mockFlush(0, 'CORS 0 status');
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
345
|
//# sourceMappingURL=xhr.test.js.map
|