mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
82 lines
2.9 KiB
TypeScript
82 lines
2.9 KiB
TypeScript
|
import { setupDatabaseAndSynchronizer, switchClient } from '@joplin/lib/testing/test-utils';
|
||
|
import { setupCommandForTesting, setupApplication } from './utils/testUtils';
|
||
|
import Folder from '@joplin/lib/models/Folder';
|
||
|
import Note from '@joplin/lib/models/Note';
|
||
|
const Command = require('./command-rmbook');
|
||
|
|
||
|
const setUpCommand = () => {
|
||
|
const command = setupCommandForTesting(Command);
|
||
|
const promptMock = jest.fn(() => true);
|
||
|
command.setPrompt(promptMock);
|
||
|
|
||
|
return { command, promptMock };
|
||
|
};
|
||
|
|
||
|
|
||
|
describe('command-rmbook', () => {
|
||
|
beforeEach(async () => {
|
||
|
await setupDatabaseAndSynchronizer(1);
|
||
|
await switchClient(1);
|
||
|
await setupApplication();
|
||
|
});
|
||
|
|
||
|
it('should ask before moving to the trash', async () => {
|
||
|
await Folder.save({ title: 'folder1' });
|
||
|
|
||
|
const { command, promptMock } = setUpCommand();
|
||
|
|
||
|
await command.action({ 'notebook': 'folder1', options: {} });
|
||
|
|
||
|
expect(promptMock).toHaveBeenCalledTimes(1);
|
||
|
|
||
|
const folder1 = await Folder.loadByTitle('folder1');
|
||
|
expect(folder1.deleted_time).not.toBeFalsy();
|
||
|
expect((await Note.allItemsInTrash()).folderIds).toHaveLength(1);
|
||
|
});
|
||
|
|
||
|
it('cancelling a prompt should prevent deletion', async () => {
|
||
|
await Folder.save({ title: 'folder1' });
|
||
|
|
||
|
const { command, promptMock } = setUpCommand();
|
||
|
promptMock.mockImplementation(() => false);
|
||
|
await command.action({ 'notebook': 'folder1', options: {} });
|
||
|
|
||
|
expect((await Note.allItemsInTrash()).folderIds).toHaveLength(0);
|
||
|
});
|
||
|
|
||
|
it('should not prompt when the force flag is given', async () => {
|
||
|
const { id: folder1Id } = await Folder.save({ title: 'folder1' });
|
||
|
const { id: folder2Id } = await Folder.save({ title: 'folder2', parent_id: folder1Id });
|
||
|
|
||
|
const { command, promptMock } = setUpCommand();
|
||
|
await command.action({ 'notebook': 'folder1', options: { force: true } });
|
||
|
|
||
|
expect(promptMock).toHaveBeenCalledTimes(0);
|
||
|
|
||
|
expect((await Note.allItemsInTrash()).folderIds.includes(folder1Id)).toBe(true);
|
||
|
expect((await Note.allItemsInTrash()).folderIds.includes(folder2Id)).toBe(true);
|
||
|
});
|
||
|
|
||
|
it('should support permanent deletion', async () => {
|
||
|
const { id: folder1Id } = await Folder.save({ title: 'folder1' });
|
||
|
const { id: folder2Id } = await Folder.save({ title: 'folder2' });
|
||
|
|
||
|
const { command, promptMock } = setUpCommand();
|
||
|
await command.action({ 'notebook': 'folder1', options: { permanent: true, force: true } });
|
||
|
expect(promptMock).not.toHaveBeenCalled();
|
||
|
|
||
|
// Should be permanently deleted.
|
||
|
expect((await Note.allItemsInTrash()).folderIds.includes(folder1Id)).toBe(false);
|
||
|
expect(await Folder.load(folder1Id, { includeDeleted: true })).toBe(undefined);
|
||
|
|
||
|
// folder2 should not be deleted
|
||
|
expect(await Folder.load(folder2Id, { includeDeleted: false })).toBeTruthy();
|
||
|
|
||
|
// Should prompt before deleting
|
||
|
await command.action({ 'notebook': 'folder2', options: { permanent: true } });
|
||
|
expect(promptMock).toHaveBeenCalled();
|
||
|
expect(await Folder.load(folder2Id, { includeDeleted: false })).toBeUndefined();
|
||
|
});
|
||
|
});
|
||
|
|