@bitblit/epsilon
Version:
Tiny adapter to simplify building API gateway Lambda APIS
100 lines • 4.88 kB
JavaScript
;
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const response_util_1 = require("./response-util");
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const built_in_filters_1 = require("../built-in/http/built-in-filters");
const epsilon_constants_1 = require("../epsilon-constants");
describe('#responseUtil', function () {
it('should correctly combine a redirect url and query params', function () {
const evt = {
httpMethod: 'get',
multiValueHeaders: {},
multiValueQueryStringParameters: {},
path: '/v0/meta/server',
body: null,
headers: null,
isBase64Encoded: false,
pathParameters: null,
stageVariables: null,
resource: null,
queryStringParameters: {
a: 'b',
c: 'd',
},
requestContext: {
stage: 'v0',
},
};
const out1 = response_util_1.ResponseUtil.redirect('myTarget?e=f', 301, evt.queryStringParameters);
expect(out1).toBeTruthy();
expect(out1.headers).toBeTruthy();
expect(out1.headers.Location).toEqual('myTarget?e=f&a=b&c=d');
const out2 = response_util_1.ResponseUtil.redirect('myTarget', 301, evt.queryStringParameters);
expect(out2).toBeTruthy();
expect(out2.headers).toBeTruthy();
expect(out2.headers.Location).toEqual('myTarget?a=b&c=d');
});
it('should leave already encoded stuff alone', () => __awaiter(this, void 0, void 0, function* () {
const singlePixel = fs_1.default.readFileSync(path_1.default.join(__dirname, '../../test-data/test.png')).toString('base64');
const temp = {
body: singlePixel,
statusCode: 200,
isBase64Encoded: true,
headers: {
'content-type': 'application/zip',
'content-disposition': 'attachment; filename="adomni_bs_' + new Date().getTime() + '.zip"',
},
};
const cast = response_util_1.ResponseUtil.coerceToProxyResult(temp);
expect(cast.body).toEqual(temp.body);
const gzip = yield response_util_1.ResponseUtil.applyGzipIfPossible('gzip', cast);
expect(cast.body).toEqual(gzip.body);
}));
it('should add cors to proxy result MATCH 1', () => __awaiter(this, void 0, void 0, function* () {
const evt = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../test-data/sample-json/sample-request-1.json')).toString());
const proxy = {};
const fCtx = {
event: evt,
rawResult: null,
context: null,
result: proxy,
routeAndParse: null,
modelValidator: null,
authenticators: null,
};
yield built_in_filters_1.BuiltInFilters.addAllowReflectionCORSHeaders(fCtx);
expect(proxy.headers).toBeTruthy();
expect(proxy.headers['Access-Control-Allow-Origin']).toEqual('http://localhost:4200');
expect(proxy.headers['Access-Control-Allow-Methods']).toEqual('GET');
expect(proxy.headers['Access-Control-Allow-Headers']).toEqual(epsilon_constants_1.EpsilonConstants.AUTH_HEADER_NAME.toLowerCase());
}));
it('should add cors to proxy result MATCH 2', () => __awaiter(this, void 0, void 0, function* () {
const evt = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../../test-data/sample-json/sample-request-2.json')).toString());
const proxy = {};
const fCtx = {
event: evt,
rawResult: null,
context: null,
result: proxy,
routeAndParse: null,
modelValidator: null,
authenticators: null,
};
yield built_in_filters_1.BuiltInFilters.addAllowReflectionCORSHeaders(fCtx);
expect(proxy.headers).toBeTruthy();
}));
});
//# sourceMappingURL=response-util.spec.js.map