UNPKG

@rxx/http

Version:
378 lines (377 loc) 16.9 kB
"use strict"; 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); }); }); });