@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
JavaScript
;
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