alagarr
Version:
Alagarr is a request-response helper library that removes the boilerplate from your Node.js serverless functions and helps make your code portable.
88 lines (87 loc) • 4.4 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const requests_1 = require("../../../test/fixtures/requests");
const log_1 = __importStar(require("./log"));
const mockRequest = Object.assign({}, requests_1.get);
const mockResponse = {
body: 'foobar',
headers: {
foo: 'bar',
},
statusCode: 200,
};
const mockOptions = {
enableLogger: true,
};
describe('Request/Response logging ', () => {
test('is logged by default logger when none is provided in options', () => {
const spy = jest
.spyOn(process.stdout, 'write')
.mockImplementationOnce(item => expect(item).toContain('statusCode'));
const result = log_1.default(mockResponse, mockRequest, mockOptions);
expect(result.statusCode).toBe(200);
expect(spy).toHaveBeenCalledTimes(1);
});
test('is logged by custom options.logger if one is provided', () => {
const mockCustomLogger = jest.fn(() => true);
const response = log_1.default(mockResponse, mockRequest, Object.assign({}, mockOptions, { logger: mockCustomLogger }));
expect(mockCustomLogger).toHaveBeenCalledTimes(1);
expect(response.statusCode).toBe(200);
});
test('will always return response regardles of the logger result', () => {
const mockCustomLogger = jest.fn(() => false);
const response = log_1.default(mockResponse, mockRequest, Object.assign({}, mockOptions, { logger: mockCustomLogger }));
expect(mockCustomLogger).toHaveBeenCalledTimes(1);
expect(response).toBe(response);
});
test('should not log when enableLogger is falsy', () => {
const mockCustomLogger = jest.fn(() => false);
const response = log_1.default(mockResponse, mockRequest, {
enableLogger: false,
logger: mockCustomLogger,
});
expect(mockCustomLogger).toHaveBeenCalledTimes(0);
expect(response).toBe(response);
});
});
describe('Default logger', () => {
test('should construct a requestUri when request contained query string parameters', () => {
jest.spyOn(process.stdout, 'write').mockImplementationOnce((_) => true);
expect(log_1.logger(mockRequest, mockResponse).requestUri).toBe('/');
jest.spyOn(process.stdout, 'write').mockImplementationOnce((_) => true);
expect(log_1.logger(Object.assign({}, mockRequest, { query: { foo: 'bar', bar: 'foo' } }), mockResponse).requestUri).toBe('/?foo=bar&bar=foo');
});
test('should write to process.stdout when statusCode is not in the 500s', () => {
jest
.spyOn(process.stdout, 'write')
.mockImplementationOnce(item => !expect(item).toContain('statusCode'));
const result = log_1.logger(mockRequest, mockResponse);
expect(result.statusCode).toBe(200);
});
test('should write to process.stderr when statusCode is in the 500s', () => {
const spy = jest
.spyOn(process.stderr, 'write')
.mockImplementationOnce(item => !expect(item).toContain('statusCode'));
const result = log_1.logger(mockRequest, Object.assign({}, mockResponse, { statusCode: 500 }));
expect(result.statusCode).toBe(500);
expect(spy).toHaveBeenCalledTimes(1);
});
test('should include httpProtocol', () => {
jest.spyOn(process.stdout, 'write').mockImplementationOnce((_) => true);
const result = log_1.logger(Object.assign({}, mockRequest, { headers: Object.assign({}, mockRequest.headers, { via: 'foo bar' }) }), mockResponse);
expect(result.httpProtocol).toBe('foo');
});
test('should include request content-length', () => {
jest.spyOn(process.stdout, 'write').mockImplementationOnce((_) => true);
expect(log_1.logger(Object.assign({}, mockRequest, { body: 'foobar' }), mockResponse).requestContentLength).toBe(6);
jest.spyOn(process.stdout, 'write').mockImplementationOnce((_) => true);
expect(log_1.logger(Object.assign({}, mockRequest, { body: undefined }), mockResponse).requestContentLength).toBe(0);
});
});