const logging = require('../lib/Adapters/Logger/WinstonLogger'); const winston = require('winston'); class TestTransport extends winston.Transport { log(level, msg, meta, callback) { callback(null, true); } } describe('Logger', () => { it('should add transport', () => { const testTransport = new (TestTransport)({ name: 'test' }); spyOn(testTransport, 'log'); logging.addTransport(testTransport); expect(Object.keys(logging.logger.transports).length).toBe(4); logging.logger.info('hi'); expect(testTransport.log).toHaveBeenCalled(); logging.removeTransport(testTransport); expect(Object.keys(logging.logger.transports).length).toBe(3); }); it('should have files transports', (done) => { reconfigureServer().then(() => { const transports = logging.logger.transports; const transportKeys = Object.keys(transports); expect(transportKeys.length).toBe(3); done(); }); }); it('should disable files logs', (done) => { reconfigureServer({ logsFolder: null }).then(() => { const transports = logging.logger.transports; const transportKeys = Object.keys(transports); expect(transportKeys.length).toBe(1); done(); }); }); it('should enable JSON logs', (done) => { // Force console transport reconfigureServer({ logsFolder: null, jsonLogs: true, silent: false }).then(() => { spyOn(process.stdout, 'write'); logging.logger.info('hi', {key: 'value'}); expect(process.stdout.write).toHaveBeenCalled(); const firstLog = process.stdout.write.calls.first().args[0]; expect(firstLog).toEqual(JSON.stringify({key: 'value', level: 'info', message: 'hi' }) + '\n'); return reconfigureServer({ jsonLogs: false }); }).then(() => { done(); }); }); });