import { expect } from 'chai'; import * as streambuffers from 'stream-buffers'; import { JSONLogger } from '../../src/middleware'; import { Request, Response } from '../../src/http'; import { getMockAPIEvent } from '../support/mockapievent'; describe('A JSONLogger middleware', () => { let middleware: JSONLogger; let event = getMockAPIEvent(); event.body = JSON.stringify({ foo: 'bar' }); let request = new Request(event); let response = new Response(); let stream = new streambuffers.WritableStreamBuffer(); it('should be constructed from a name, and optionally a level', () => { middleware = new JSONLogger('lambdaless'); expect(middleware).to.exist; middleware = new JSONLogger('lambdaless', 'info'); expect(middleware).to.exist; }); it('should be able to add a target log stream', () => { middleware.addStream(stream); }); it('should have processRequest() accepting a request and response', () => { expect(middleware.processRequest).to.exist; }); it('should have processResponse() accepting a request and response', () => { expect(middleware.processResponse).to.exist; }); it('should log the request to the configured stream', async () => { await middleware.processRequest(request, response); let raw = stream.getContentsAsString('utf8'); let log = JSON.parse(raw); expect(log).to.be.an('object'); }); it('should log the response to the configured stream', async () => { await middleware.processResponse(request, response); let raw = stream.getContentsAsString('utf8'); let log = JSON.parse(raw); expect(log).to.be.an('object'); }); });