mirror of
https://github.com/bitwarden/browser
synced 2025-12-22 11:13:46 +00:00
Use log service for console messages (#221)
* Use logService for console messages * Implement a base ConsoleLog service Use this class as a default for other services that would like to output to console. This service is overriden in CLI and Desktop to use CLI's consoleLogService and electronLogService, respectively. * Use browser-process-hrtime for timing * test LogService implementations * Ignore default import of hrtime * Clean up imports. Require ConsoleLog injection Co-authored-by: Matt Gibson <mdgibson@Matts-MBP.lan>
This commit is contained in:
95
spec/common/services/consoleLog.service.spec.ts
Normal file
95
spec/common/services/consoleLog.service.spec.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import { ConsoleLogService } from '../../../src/services/consoleLog.service';
|
||||
|
||||
const originalConsole = console;
|
||||
let caughtMessage: any;
|
||||
|
||||
declare var console: any;
|
||||
|
||||
export function interceptConsole(interceptions: any): object {
|
||||
console = {
|
||||
// tslint:disable-next-line
|
||||
log: function () {
|
||||
interceptions.log = arguments;
|
||||
},
|
||||
// tslint:disable-next-line
|
||||
warn: function () {
|
||||
interceptions.warn = arguments;
|
||||
},
|
||||
// tslint:disable-next-line
|
||||
error: function () {
|
||||
interceptions.error = arguments;
|
||||
}
|
||||
};
|
||||
return interceptions;
|
||||
}
|
||||
|
||||
export function restoreConsole() {
|
||||
console = originalConsole;
|
||||
}
|
||||
|
||||
describe('ConsoleLogService', () => {
|
||||
let logService: ConsoleLogService;
|
||||
beforeEach(() => {
|
||||
caughtMessage = {};
|
||||
interceptConsole(caughtMessage);
|
||||
logService = new ConsoleLogService(true);
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
restoreConsole();
|
||||
});
|
||||
|
||||
it('filters messages below the set threshold', () => {
|
||||
logService = new ConsoleLogService(true, (level) => true);
|
||||
logService.debug('debug');
|
||||
logService.info('info');
|
||||
logService.warning('warning');
|
||||
logService.error('error');
|
||||
|
||||
expect(caughtMessage).toEqual({});
|
||||
});
|
||||
it('only writes debug messages in dev mode', () => {
|
||||
logService = new ConsoleLogService(false);
|
||||
|
||||
logService.debug('debug message');
|
||||
expect(caughtMessage.log).toBeUndefined();
|
||||
});
|
||||
|
||||
|
||||
it('writes debug/info messages to console.log', () => {
|
||||
logService.debug('this is a debug message');
|
||||
expect(caughtMessage).toEqual({ log: jasmine.arrayWithExactContents(['this is a debug message']) });
|
||||
|
||||
logService.info('this is an info message');
|
||||
expect(caughtMessage).toEqual({ log: jasmine.arrayWithExactContents(['this is an info message']) });
|
||||
});
|
||||
it('writes warning messages to console.warn', () => {
|
||||
logService.warning('this is a warning message');
|
||||
expect(caughtMessage).toEqual({ warn: jasmine.arrayWithExactContents(['this is a warning message']) });
|
||||
});
|
||||
it('writes error messages to console.error', () => {
|
||||
logService.error('this is an error message');
|
||||
expect(caughtMessage).toEqual({ error: jasmine.arrayWithExactContents(['this is an error message']) });
|
||||
});
|
||||
|
||||
it('times with output to info', async () => {
|
||||
logService.time();
|
||||
await new Promise(r => setTimeout(r, 250));
|
||||
const duration = logService.timeEnd();
|
||||
expect(duration[0]).toBe(0);
|
||||
expect(duration[1]).toBeGreaterThan(0);
|
||||
expect(duration[1]).toBeLessThan(500 * 10e6);
|
||||
|
||||
expect(caughtMessage).toEqual(jasmine.arrayContaining([]));
|
||||
expect(caughtMessage.log.length).toBe(1);
|
||||
expect(caughtMessage.log[0]).toEqual(jasmine.stringMatching(/^default: \d+\.?\d*ms$/));
|
||||
});
|
||||
|
||||
it('filters time output', async () => {
|
||||
logService = new ConsoleLogService(true, (level) => true);
|
||||
logService.time();
|
||||
logService.timeEnd();
|
||||
|
||||
expect(caughtMessage).toEqual({});
|
||||
});
|
||||
});
|
||||
9
spec/electron/services/electronLog.service.spec.ts
Normal file
9
spec/electron/services/electronLog.service.spec.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { ElectronLogService } from '../../../src/electron/services/electronLog.service';
|
||||
|
||||
describe('ElectronLogService', () => {
|
||||
it('sets dev based on electron method', () => {
|
||||
process.env.ELECTRON_IS_DEV = '1';
|
||||
const logService = new ElectronLogService();
|
||||
expect(logService).toEqual(jasmine.objectContaining({ isDev: true }) as any);
|
||||
});
|
||||
});
|
||||
41
spec/node/cli/consoleLog.service.spec.ts
Normal file
41
spec/node/cli/consoleLog.service.spec.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { ConsoleLogService } from '../../../src/cli/services/consoleLog.service';
|
||||
import { interceptConsole, restoreConsole } from '../../common/services/consoleLog.service.spec';
|
||||
|
||||
const originalConsole = console;
|
||||
let caughtMessage: any = {};
|
||||
|
||||
describe('CLI Console log service', () => {
|
||||
let logService: ConsoleLogService;
|
||||
beforeEach(() => {
|
||||
caughtMessage = {};
|
||||
interceptConsole(caughtMessage);
|
||||
logService = new ConsoleLogService(true);
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
restoreConsole();
|
||||
});
|
||||
|
||||
it('should redirect all console to error if BW_RESPONSE env is true', () => {
|
||||
process.env.BW_RESPONSE = 'true';
|
||||
|
||||
logService.debug('this is a debug message');
|
||||
expect(caughtMessage).toEqual({ error: jasmine.arrayWithExactContents(['this is a debug message']) });
|
||||
});
|
||||
|
||||
it('should not redirect console to error if BW_RESPONSE != true', () => {
|
||||
process.env.BW_RESPONSE = 'false';
|
||||
|
||||
logService.debug('debug');
|
||||
logService.info('info');
|
||||
logService.warning('warning');
|
||||
logService.error('error');
|
||||
|
||||
expect(caughtMessage).toEqual({
|
||||
log: jasmine.arrayWithExactContents(['info']),
|
||||
warn: jasmine.arrayWithExactContents(['warning']),
|
||||
error: jasmine.arrayWithExactContents(['error']),
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
@@ -2,7 +2,8 @@
|
||||
"spec_dir": "dist/spec",
|
||||
"spec_files": [
|
||||
"common/**/*[sS]pec.js",
|
||||
"node/**/*[sS]pec.js"
|
||||
"node/**/*[sS]pec.js",
|
||||
"electron/**/*[sS]pec.js"
|
||||
],
|
||||
"helpers": [
|
||||
"helpers.js"
|
||||
|
||||
Reference in New Issue
Block a user