mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
117 lines
3.9 KiB
TypeScript
117 lines
3.9 KiB
TypeScript
import { Day, msleep } from '@joplin/utils/time';
|
|
import Folder from '../../models/Folder';
|
|
import Note from '../../models/Note';
|
|
import { setupDatabaseAndSynchronizer, simulateReadOnlyShareEnv, switchClient } from '../../testing/test-utils';
|
|
import permanentlyDeleteOldItems from './permanentlyDeleteOldItems';
|
|
import Setting from '../../models/Setting';
|
|
|
|
describe('permanentlyDeleteOldItems', () => {
|
|
|
|
beforeEach(async () => {
|
|
await setupDatabaseAndSynchronizer(1);
|
|
await switchClient(1);
|
|
});
|
|
|
|
it('should auto-delete old items', async () => {
|
|
const folder1 = await Folder.save({});
|
|
const folder2 = await Folder.save({});
|
|
const note1 = await Note.save({ parent_id: folder1.id });
|
|
const note2 = await Note.save({});
|
|
|
|
await Folder.delete(folder1.id, { toTrash: true, deleteChildren: true });
|
|
|
|
// First check that it doesn't auto-delete if it's not within the right interval
|
|
await permanentlyDeleteOldItems(Day);
|
|
|
|
expect((await Folder.load(folder1.id))).toBeTruthy();
|
|
expect((await Folder.load(folder2.id))).toBeTruthy();
|
|
expect((await Note.load(note1.id))).toBeTruthy();
|
|
expect((await Note.load(note2.id))).toBeTruthy();
|
|
|
|
await msleep(1);
|
|
await permanentlyDeleteOldItems(0);
|
|
|
|
expect((await Folder.load(folder1.id))).toBeFalsy();
|
|
expect((await Folder.load(folder2.id))).toBeTruthy();
|
|
expect((await Note.load(note1.id))).toBeFalsy();
|
|
expect((await Note.load(note2.id))).toBeTruthy();
|
|
});
|
|
|
|
it('should not auto-delete non-empty folders', async () => {
|
|
const folder1 = await Folder.save({});
|
|
const folder2 = await Folder.save({});
|
|
const note1 = await Note.save({ parent_id: folder1.id });
|
|
const note2 = await Note.save({});
|
|
|
|
await Folder.delete(folder1.id, { toTrash: true, deleteChildren: true });
|
|
|
|
// Simulates a folder having been deleted a long time ago - so it should be deleted. But
|
|
// since it contains a note it should not.
|
|
await Folder.save({ id: folder1.id, deleted_time: 1000 });
|
|
|
|
await permanentlyDeleteOldItems(Day);
|
|
|
|
expect((await Folder.load(folder1.id))).toBeTruthy();
|
|
expect((await Note.load(note1.id))).toBeTruthy();
|
|
|
|
// Now both folders and items are within the deletion interval, so they should be both be
|
|
// auto-deleted
|
|
await Note.save({ id: note1.id, deleted_time: 1000 });
|
|
|
|
await permanentlyDeleteOldItems(1);
|
|
|
|
expect((await Folder.load(folder1.id))).toBeFalsy();
|
|
expect((await Folder.load(folder2.id))).toBeTruthy();
|
|
expect((await Note.load(note1.id))).toBeFalsy();
|
|
expect((await Note.load(note2.id))).toBeTruthy();
|
|
});
|
|
|
|
it('should not do anything if auto-deletion is not enabled', async () => {
|
|
Setting.setValue('trash.autoDeletionEnabled', false);
|
|
const folder1 = await Folder.save({});
|
|
await Folder.delete(folder1.id, { toTrash: true });
|
|
await msleep(1);
|
|
await permanentlyDeleteOldItems(0);
|
|
expect(await Folder.count()).toBe(1);
|
|
});
|
|
|
|
it('should not auto-delete read-only items', async () => {
|
|
const shareId = 'testShare';
|
|
|
|
// Simulates a folder having been deleted a long time ago
|
|
const longTimeAgo = 1000;
|
|
|
|
const readOnlyFolder = await Folder.save({
|
|
title: 'Read-only folder',
|
|
share_id: shareId,
|
|
deleted_time: longTimeAgo,
|
|
});
|
|
const readOnlyNote1 = await Note.save({
|
|
title: 'Read-only note',
|
|
parent_id: readOnlyFolder.id,
|
|
share_id: shareId,
|
|
deleted_time: longTimeAgo,
|
|
});
|
|
const readOnlyNote2 = await Note.save({
|
|
title: 'Read-only note 2',
|
|
share_id: shareId,
|
|
deleted_time: longTimeAgo,
|
|
});
|
|
const writableNote = await Note.save({
|
|
title: 'Editable note',
|
|
deleted_time: longTimeAgo,
|
|
});
|
|
|
|
const cleanup = simulateReadOnlyShareEnv(shareId);
|
|
await permanentlyDeleteOldItems(Day);
|
|
|
|
// Should preserve only the read-only items.
|
|
expect(await Folder.load(readOnlyFolder.id)).toBeTruthy();
|
|
expect(await Note.load(readOnlyNote1.id)).toBeTruthy();
|
|
expect(await Note.load(readOnlyNote2.id)).toBeTruthy();
|
|
expect(await Note.load(writableNote.id)).toBeFalsy();
|
|
|
|
cleanup();
|
|
});
|
|
});
|