UNPKG

@studyportals/sp-r2d2

Version:

A framework that contains various components used when developing projects that will be deployed via AWS λ.

253 lines 14.1 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const mocha_1 = require("@testdeck/mocha"); const Moq = require("typemoq"); const chai_1 = require("chai"); const sp_r2d2_interface_1 = require("@studyportals/sp-r2d2-interface"); const application_1 = require("../../../../application"); const http_response_sender_class_1 = require("../../../../environment/execution-environments/api-gateway/response-sending/http-response-sender.class"); const internal_server_error_response_class_1 = require("../../../../environment/execution-environments/api-gateway/http-responses/internal-server-error-response.class"); const unauthorized_response_class_1 = require("../../../../environment/execution-environments/api-gateway/http-responses/unauthorized-response.class"); const bad_request_response_class_1 = require("../../../../environment/execution-environments/api-gateway/http-responses/bad-request-response.class"); const success_response_class_1 = require("../../../../environment/execution-environments/api-gateway/http-responses/success-response.class"); const not_found_response_class_1 = require("../../../../environment/execution-environments/api-gateway/http-responses/not-found-response.class"); let HttpResponseSenderTest = class HttpResponseSenderTest { get httpResponseMock() { return this._httpResponseMock; } get httpResponse() { return this.httpResponseMock.object; } get testInstanceMock() { return this._testInstanceMock; } get testInstance() { return this.testInstanceMock.object; } before() { this._httpResponseMock = Moq.Mock.ofType(); this._testInstanceMock = Moq.Mock.ofType(http_response_sender_class_1.HttpResponseSender); this.testInstanceMock.callBase = true; } sendHttpResponse__CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const statusCode = 'SomeStatusCode'; const body = { SomeProperty: 'SomeValue' }; const headers = 'SomeHeaders'; this.httpResponseMock.setup((_) => _.statusCode).returns(() => statusCode); this.httpResponseMock.setup((_) => _.body).returns(() => body); this.httpResponseMock.setup((_) => _.headers).returns(() => headers); const result = yield this.testInstance['sendHttpResponse'](this.httpResponse); chai_1.assert.deepEqual(result, { statusCode: statusCode, headers: headers, body: JSON.stringify(body), }); }); } sendRawHttpResponse__CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const expectedStatusCode = 200; const expectedHeaders = { someHeader: 'test' }; const expectedBody = 'someText'; const result = new sp_r2d2_interface_1.RawHttpResult(expectedStatusCode, expectedHeaders, expectedBody); const response = yield this.testInstance['sendRawHttpResponse'](result); chai_1.assert.deepEqual(response, { statusCode: result.statusCode, headers: result.headers, body: result.body, }); }); } sendUncaughtError__CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const errorMessage = 'SomeErrorMessage'; const error = new Error(errorMessage); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendUncaughtError(error), errorMessage, internal_server_error_response_class_1.InternalServerErrorResponse); }); } sendRequestAuthorizationError__CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const errorMessage = 'SomeErrorMessage'; const error = new application_1.AuthorizationError(errorMessage); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestAuthorizationError(error), errorMessage, unauthorized_response_class_1.UnauthorizedResponse); }); } sendRequestAuthorizationError_ResultGiven_CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const result = new sp_r2d2_interface_1.Result(false); const error = new application_1.AuthorizationError('some-message', result); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestAuthorizationError(error), result, unauthorized_response_class_1.UnauthorizedResponse); }); } sendRequestValidationError__CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const errorMessage = 'SomeErrorMessage'; const error = new application_1.ValidationError(errorMessage); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestValidationError(error), errorMessage, bad_request_response_class_1.BadRequestResponse); }); } sendRequestValidationError_ResultGiven_CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const result = new sp_r2d2_interface_1.Result(false); const error = new application_1.ValidationError('some-message', result); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestValidationError(error), result, bad_request_response_class_1.BadRequestResponse); }); } sendRequestExecutionError__CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const errorMessage = 'SomeErrorMessage'; const error = new application_1.ExecutionError(errorMessage); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestExecutionError(error), errorMessage, internal_server_error_response_class_1.InternalServerErrorResponse); }); } sendRequestExecutionError_ResultGiven_CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const result = new sp_r2d2_interface_1.Result(false); const error = new application_1.ExecutionError('some-message', application_1.ExecutionErrorReason.UNKNOWN, result); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestExecutionError(error), result, internal_server_error_response_class_1.InternalServerErrorResponse); }); } sendRequestExecutionError_ReasonDataNotAvailable_CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const errorMessage = 'SomeErrorMessage'; const error = new application_1.ExecutionError(errorMessage, application_1.ExecutionErrorReason.DATA_NOT_AVAILABLE); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestExecutionError(error), errorMessage, not_found_response_class_1.NotFoundResponse); }); } sendRequestExecutionError_ReasonDataNotAvailable_ResultGiven_CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const result = new sp_r2d2_interface_1.Result(false); const error = new application_1.ExecutionError('some-message', application_1.ExecutionErrorReason.DATA_NOT_AVAILABLE, result); yield this.testTemplateSendHttpResponseCorrectlyCalledForError(() => this.testInstance.sendRequestExecutionError(error), result, not_found_response_class_1.NotFoundResponse); }); } sendExecutionOutcome__CorrectlySent() { return __awaiter(this, void 0, void 0, function* () { const result = 'SomeResult'; let receivedResponse; let wasAwaited = false; this.testInstanceMock .setup((_) => _['sendHttpResponse'](Moq.It.isAny())) .callback((_) => (receivedResponse = _)) .returns(() => new Promise((res) => { setTimeout(() => { wasAwaited = true; res(); }, 10); })); yield this.testInstance.sendExecutionOutcome(result); this.testInstanceMock.verify((_) => _['sendHttpResponse'](Moq.It.isAny()), Moq.Times.once()); chai_1.assert.isTrue(wasAwaited, 'Not awaited'); chai_1.assert.instanceOf(receivedResponse, success_response_class_1.SuccessResponse); chai_1.assert.equal(receivedResponse.body, result); }); } sendExecutionOutcome_RawHttpResult_CorrectlySentNonJsonResponse() { return __awaiter(this, void 0, void 0, function* () { const expectedStatusCode = 200; const expectedHeaders = { someHeader: 'test' }; const expectedBody = 'someText'; const result = new sp_r2d2_interface_1.RawHttpResult(expectedStatusCode, expectedHeaders, expectedBody); let receivedResponse; let wasAwaited = false; this.testInstanceMock .setup((_) => _['sendRawHttpResponse'](Moq.It.isAny())) .callback((_) => (receivedResponse = _)) .returns(() => new Promise((res) => { setTimeout(() => { wasAwaited = true; res(); }, 10); })); yield this.testInstance.sendExecutionOutcome(result); this.testInstanceMock.verify((_) => _['sendRawHttpResponse'](Moq.It.isAny()), Moq.Times.once()); chai_1.assert.isTrue(wasAwaited, 'Not awaited'); chai_1.assert.instanceOf(receivedResponse, sp_r2d2_interface_1.RawHttpResult); chai_1.assert.equal(receivedResponse.body, result.body); }); } testTemplateSendHttpResponseCorrectlyCalledForError(testCase, error, responseType) { return __awaiter(this, void 0, void 0, function* () { let receivedResponse; let wasAwaited = false; this.testInstanceMock .setup((_) => _['sendHttpResponse'](Moq.It.isAny())) .callback((_) => (receivedResponse = _)) .returns(() => new Promise((res) => { setTimeout(() => { wasAwaited = true; res(); }, 10); })); yield testCase(); this.testInstanceMock.verify((_) => _['sendHttpResponse'](Moq.It.isAny()), Moq.Times.once()); chai_1.assert.isTrue(wasAwaited, 'Not awaited'); chai_1.assert.instanceOf(receivedResponse, responseType); if (receivedResponse.body instanceof sp_r2d2_interface_1.FailedResult) { chai_1.assert.equal(receivedResponse.body.errorMsg, error); } else { chai_1.assert.deepEqual(receivedResponse.body, error); } }); } }; __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendHttpResponse__CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRawHttpResponse__CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendUncaughtError__CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestAuthorizationError__CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestAuthorizationError_ResultGiven_CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestValidationError__CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestValidationError_ResultGiven_CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestExecutionError__CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestExecutionError_ResultGiven_CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestExecutionError_ReasonDataNotAvailable_CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendRequestExecutionError_ReasonDataNotAvailable_ResultGiven_CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendExecutionOutcome__CorrectlySent", null); __decorate([ mocha_1.test ], HttpResponseSenderTest.prototype, "sendExecutionOutcome_RawHttpResult_CorrectlySentNonJsonResponse", null); HttpResponseSenderTest = __decorate([ (0, mocha_1.suite)() ], HttpResponseSenderTest); //# sourceMappingURL=http-response-sender.test.js.map