import Logger, { LogLevel, TargetType } from '@joplin/utils/Logger'; import { setupDatabaseAndSynchronizer, switchClient } from '../testing/test-utils'; import Note from '../models/Note'; import ActionLogger from './ActionLogger'; import Setting from '../models/Setting'; import { pathExists, readFile, remove, writeFile } from 'fs-extra'; const getLogPath = () => `${Setting.value('profileDir')}/log.txt`; const logContainsEntryWith = async (...terms: string[]) => { const lines = (await readFile(getLogPath(), 'utf8')).split('\n'); for (const line of lines) { if (terms.every(t => line.includes(t))) { return true; } } return false; }; describe('ActionLogger', () => { beforeEach(async () => { await setupDatabaseAndSynchronizer(1); await switchClient(1); const logPath = getLogPath(); if (await pathExists(logPath)) { await remove(logPath); } await writeFile(logPath, '', 'utf8'); const logger = new Logger(); logger.addTarget(TargetType.File, { path: logPath }); logger.setLevel(LogLevel.Info); Logger.initializeGlobalLogger(logger); }); it('should log deletions', async () => { const note = await Note.save({ title: 'MyTestNote' }); await Note.delete(note.id, { toTrash: false }); await Logger.globalLogger.waitForFileWritesToComplete_(); expect( await logContainsEntryWith('DeleteAction', note.id, note.title), ).toBe(true); }); it('should be possible to disable ActionLogger globally', async () => { const note1 = await Note.save({ title: 'testNote1' }); const note2 = await Note.save({ title: 'testNote2' }); ActionLogger.enabled = true; await Note.delete(note1.id, { toTrash: false }); ActionLogger.enabled = false; await Note.delete(note2.id, { toTrash: false }); ActionLogger.enabled = true; await Logger.globalLogger.waitForFileWritesToComplete_(); expect(await logContainsEntryWith('DeleteAction', note1.id)).toBe(true); expect(await logContainsEntryWith('DeleteAction', note2.id)).toBe(false); }); });