@rxx/http
Version:
Http IO module for rxx.
378 lines (377 loc) • 16.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var testing_1 = require("@rxx/testing");
var http_handler_1 = require("../http-handler");
var types_1 = require("../types");
var chai_1 = require("chai");
var rxjs_1 = require("rxjs");
describe('HttpHandler', function () {
var initFormResponse;
var initPostResponse;
var initPostErrorResponse;
var initGetResponse;
var initGetErrorResponse;
var STATUS = { OK: 200, BAD_REQUEST: 400 };
var parseRequest = function (req) {
var ret = {};
req.split('&').forEach(function (v) {
var splited = v.split('=');
var v1 = splited[0];
var v2 = splited[1];
ret[v1] = v2 === 'false' ? false : v2 === 'true' ? true : v2;
});
return ret;
};
var server = {
respond: function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var ret;
var _this = this;
return tslib_1.__generator(this, function (_a) {
if (queue.length === 0) {
return [2, new Promise(function (resolve) {
setTimeout(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, server.respond()];
case 1:
_a.sent();
resolve();
return [2];
}
});
}); }, 10);
})];
}
ret = queue.slice();
queue.length = 0;
return [2, new Promise(function (resolve) {
setTimeout(function () {
ret.forEach(function (_a) {
var resolve = _a.resolve, res = _a.res;
return resolve(res);
});
resolve();
}, 500);
})];
});
});
},
};
var queue = [];
beforeEach(function () {
initPostResponse = function (proceed) {
return new http_handler_1.HttpHandler({
response: function (methodInvocation) {
if (proceed) {
return methodInvocation.proceed();
}
},
request: function (methodInvocation) {
var _a = methodInvocation.getArguments()[0], url = _a.url, data = _a.data;
return new Promise(function (resolve) {
var res = new Response(JSON.stringify(data), {
status: STATUS.OK,
headers: {
'Content-type': 'application/json',
},
});
queue.push({ resolve: resolve, res: res });
});
},
});
};
initPostErrorResponse = function (proceed) {
return new http_handler_1.HttpHandler({
response: function (methodInvocation) {
if (proceed) {
return methodInvocation.proceed();
}
},
request: function (methodInvocation) {
var _a = methodInvocation.getArguments()[0], url = _a.url, data = _a.data;
return new Promise(function (_, reject) {
return queue.push({
resolve: reject,
res: new Response(JSON.stringify(data), {
status: STATUS.BAD_REQUEST,
headers: {
'Content-type': 'application/json',
},
}),
});
});
},
});
};
initFormResponse = function (proceed) {
return new http_handler_1.HttpHandler({
response: function (methodInvocation) {
if (proceed) {
return methodInvocation.proceed();
}
},
request: function (methodInvocation) {
var _a = methodInvocation.getArguments()[0], url = _a.url, data = _a.data;
return new Promise(function (resolve) {
return queue.push({
resolve: resolve,
res: new Response(JSON.stringify(data), {
status: STATUS.OK,
headers: {
'Content-type': 'application/json',
},
}),
});
});
},
});
};
initGetResponse = function (proceed, params) {
return new http_handler_1.HttpHandler({
response: function (methodInvocation) {
if (proceed) {
return methodInvocation.proceed();
}
},
request: function (methodInvocation) {
var _a = methodInvocation.getArguments()[0], url = _a.url, data = _a.data;
return new Promise(function (resolve) {
return queue.push({
resolve: resolve,
res: new Response('{"success": true}', {
status: STATUS.OK,
headers: {
'Content-type': 'application/json',
},
}),
});
});
},
});
};
initGetErrorResponse = function (proceed) {
return new http_handler_1.HttpHandler({
response: function (methodInvocation) {
if (proceed) {
return methodInvocation.proceed();
}
},
request: function (methodInvocation) {
var _a = methodInvocation.getArguments()[0], url = _a.url, data = _a.data;
return new Promise(function (_, reject) {
return queue.push({
resolve: reject,
res: new Response('{"success": false}', {
status: STATUS.BAD_REQUEST,
headers: {
'Content-type': 'application/json',
},
}),
});
});
},
});
};
});
afterEach(function () {
queue.length = 0;
});
var waitRequest = function (opt, inst, key) {
var _a;
var subject = new rxjs_1.Subject();
inst.subscribe({ http: (_a = {}, _a[key] = subject, _a) });
subject.next(opt);
};
describe('HttpHandler#get()', function () {
it('Send get request(200)', function (done) {
var handler = initGetResponse(true);
handler.response.for('test').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(true);
chai_1.expect(data.status).to.be.eq(STATUS.OK);
chai_1.expect(data.response).to.be.deep.equal({ success: true });
}, done));
waitRequest({ url: '/test/ok', responseType: types_1.ResponseType.JSON }, handler, 'test');
server.respond();
});
it('Send get request(200, with parameter)', function (done) {
var handler = initGetResponse(true, 'test=1');
handler.response.for('test').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(true);
chai_1.expect(data.status).to.be.eq(STATUS.OK);
chai_1.expect(data.response).to.be.deep.equal({ success: true });
}, done));
waitRequest({ url: '/test/ok', data: { test: 1 }, responseType: types_1.ResponseType.JSON }, handler, 'test');
server.respond();
});
it('Send get request (400)', function (done) {
var handler = initGetErrorResponse(true);
handler.response.for('test').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(false);
chai_1.expect(data.status).to.be.eq(STATUS.BAD_REQUEST);
chai_1.expect(data.error).to.be.deep.equal({ success: false });
}, done));
waitRequest({ url: '/test/ng', responseType: types_1.ResponseType.JSON }, handler, 'test');
server.respond();
});
it('Apply interceptor (200)', function (done) {
var handler = initGetResponse(true);
handler.response.for('test').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(true);
chai_1.expect(data.status).to.be.eq(STATUS.OK);
chai_1.expect(data.response).to.be.deep.equal({ success: true });
}, done));
waitRequest({ url: '/test/ok', responseType: types_1.ResponseType.JSON }, handler, 'test');
server.respond();
});
it('Apply interceptor (400)', function (done) {
var handler = initGetErrorResponse(true);
handler.response.for('test').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(false);
chai_1.expect(data.status).to.be.eq(STATUS.BAD_REQUEST);
chai_1.expect(data.error).to.be.deep.equal({ success: false });
}, done));
waitRequest({ url: '/test/ng', responseType: types_1.ResponseType.JSON }, handler, 'test');
server.respond();
});
it('Apply interceptor and stop process (200)', function () {
var called = false;
var handler = initGetResponse(false);
handler.response.for('test').subscribe(function (res) {
called = true;
});
waitRequest({ url: '/test/ok', responseType: types_1.ResponseType.JSON }, handler, 'test');
server.respond();
chai_1.expect(called).to.be.eq(false);
});
it('Apply interceptor and stop process (400)', function () {
var called = false;
var handler = initGetErrorResponse(false);
handler.response.for('test').subscribe(function (res) {
called = true;
});
waitRequest({ url: '/test/ng', responseType: types_1.ResponseType.JSON }, handler, 'test');
server.respond();
chai_1.expect(called).to.be.eq(false);
});
});
describe('HttpHandler#post()', function () {
it('Send post request.(200)', function (done) {
var handler = initPostResponse(true);
handler.response.for('test-post').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(true);
chai_1.expect(data.status).to.be.eq(STATUS.OK);
chai_1.expect(data.response).to.be.deep.equal({ success: true });
}, done));
waitRequest({
url: '/test/ok',
data: { success: true },
method: types_1.HttpMethod.POST,
responseType: types_1.ResponseType.JSON,
}, handler, 'test-post');
server.respond();
});
it('Send post request.(200, form)', function (done) {
var handler = initFormResponse(true);
handler.response.for('test-post').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(true);
chai_1.expect(data.status).to.be.eq(STATUS.OK);
chai_1.expect(data.response).to.be.deep.equal({ success: true });
}, done));
waitRequest({
url: '/test/ok',
data: { success: true },
form: true,
method: types_1.HttpMethod.POST,
responseType: types_1.ResponseType.JSON,
}, handler, 'test-post');
server.respond();
});
it('Send post request.(400)', function (done) {
var handler = initPostErrorResponse(true);
handler.response.for('test-post').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(false);
chai_1.expect(data.status).to.be.eq(STATUS.BAD_REQUEST);
chai_1.expect(data.error).to.be.deep.equal({ success: false });
}, done));
waitRequest({
url: '/test/ng',
data: { success: false },
method: types_1.HttpMethod.POST,
responseType: types_1.ResponseType.JSON,
}, handler, 'test-post');
server.respond();
});
it('Apply interceptor.(200)', function (done) {
var handler = initPostResponse(true);
handler.response.for('test-post').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(true);
chai_1.expect(data.status).to.be.eq(STATUS.OK);
chai_1.expect(data.response).to.be.deep.equal({ success: true });
}, done));
waitRequest({
url: '/test/ok',
data: { success: true },
method: types_1.HttpMethod.POST,
responseType: types_1.ResponseType.JSON,
}, handler, 'test-post');
server.respond();
});
it('Apply interceptor.(400)', function (done) {
var handler = initPostErrorResponse(true);
handler.response.for('test-post').subscribe(testing_1.graceful(function (_a) {
var data = _a.data;
chai_1.expect(data.ok).to.be.eq(false);
chai_1.expect(data.status).to.be.eq(STATUS.BAD_REQUEST);
chai_1.expect(data.error).to.be.deep.equal({ success: false });
}, done));
waitRequest({
url: '/test/ng',
data: { success: false },
method: types_1.HttpMethod.POST,
responseType: types_1.ResponseType.JSON,
}, handler, 'test-post');
server.respond();
});
it('Apply interceptor and stop process.(200)', function () {
var called = false;
var handler = initPostResponse(false);
handler.response.for('test-post').subscribe(function (res) {
called = true;
});
waitRequest({
url: '/test/ok',
data: { success: true },
method: types_1.HttpMethod.POST,
responseType: types_1.ResponseType.JSON,
}, handler, 'test-post');
server.respond();
chai_1.expect(called).to.be.eq(false);
});
it('Apply interceptor and stop process.(400)', function () {
var called = false;
var handler = initPostErrorResponse(false);
handler.response.for('test-post').subscribe(function (res) {
called = true;
});
waitRequest({
url: '/test/ng',
data: { success: true },
method: types_1.HttpMethod.POST,
responseType: types_1.ResponseType.JSON,
}, handler, 'test-post');
server.respond();
chai_1.expect(called).to.be.eq(false);
});
});
});