188 lines
6.7 KiB
JavaScript
188 lines
6.7 KiB
JavaScript
import { shallowMount } from '@vue/test-utils';
|
|
import Explorer from '../../../../src/components/Explorer';
|
|
import store from '../../../../src/store';
|
|
import workspaceSvc from '../../../../src/services/workspaceSvc';
|
|
import specUtils from '../specUtils';
|
|
|
|
const mount = () => shallowMount(Explorer, { store });
|
|
const select = (id) => {
|
|
store.commit('explorer/setSelectedId', id);
|
|
expect(store.getters['explorer/selectedNode'].item.id).toEqual(id);
|
|
};
|
|
const ensureExists = file => expect(store.getters.allItemsById).toHaveProperty(file.id);
|
|
const ensureNotExists = file => expect(store.getters.allItemsById).not.toHaveProperty(file.id);
|
|
const refreshItem = item => store.getters.allItemsById[item.id];
|
|
|
|
describe('Explorer.vue', () => {
|
|
it('should create new files in the root folder', () => {
|
|
expect(store.state.explorer.newChildNode.isNil).toBeTruthy();
|
|
const wrapper = mount();
|
|
wrapper.find('.side-title__button--new-file').trigger('click');
|
|
expect(store.state.explorer.newChildNode.isNil).toBeFalsy();
|
|
expect(store.state.explorer.newChildNode.item).toMatchObject({
|
|
type: 'file',
|
|
parentId: null,
|
|
});
|
|
});
|
|
|
|
it('should create new files in a folder', async () => {
|
|
const folder = await workspaceSvc.storeItem({ type: 'folder' });
|
|
const wrapper = mount();
|
|
select(folder.id);
|
|
wrapper.find('.side-title__button--new-file').trigger('click');
|
|
expect(store.state.explorer.newChildNode.item).toMatchObject({
|
|
type: 'file',
|
|
parentId: folder.id,
|
|
});
|
|
});
|
|
|
|
it('should not create new files in the trash folder', () => {
|
|
const wrapper = mount();
|
|
select('trash');
|
|
wrapper.find('.side-title__button--new-file').trigger('click');
|
|
expect(store.state.explorer.newChildNode.item).toMatchObject({
|
|
type: 'file',
|
|
parentId: null,
|
|
});
|
|
});
|
|
|
|
it('should create new folders in the root folder', () => {
|
|
expect(store.state.explorer.newChildNode.isNil).toBeTruthy();
|
|
const wrapper = mount();
|
|
wrapper.find('.side-title__button--new-folder').trigger('click');
|
|
expect(store.state.explorer.newChildNode.isNil).toBeFalsy();
|
|
expect(store.state.explorer.newChildNode.item).toMatchObject({
|
|
type: 'folder',
|
|
parentId: null,
|
|
});
|
|
});
|
|
|
|
it('should create new folders in a folder', async () => {
|
|
const folder = await workspaceSvc.storeItem({ type: 'folder' });
|
|
const wrapper = mount();
|
|
select(folder.id);
|
|
wrapper.find('.side-title__button--new-folder').trigger('click');
|
|
expect(store.state.explorer.newChildNode.item).toMatchObject({
|
|
type: 'folder',
|
|
parentId: folder.id,
|
|
});
|
|
});
|
|
|
|
it('should not create new folders in the trash folder', () => {
|
|
const wrapper = mount();
|
|
select('trash');
|
|
wrapper.find('.side-title__button--new-folder').trigger('click');
|
|
expect(store.state.explorer.newChildNode.item).toMatchObject({
|
|
type: 'folder',
|
|
parentId: null,
|
|
});
|
|
});
|
|
|
|
it('should not create new folders in the temp folder', () => {
|
|
const wrapper = mount();
|
|
select('temp');
|
|
wrapper.find('.side-title__button--new-folder').trigger('click');
|
|
expect(store.state.explorer.newChildNode.item).toMatchObject({
|
|
type: 'folder',
|
|
parentId: null,
|
|
});
|
|
});
|
|
|
|
it('should move file to the trash folder on delete', async () => {
|
|
const file = await workspaceSvc.createFile({}, true);
|
|
expect(file.parentId).toEqual(null);
|
|
const wrapper = mount();
|
|
select(file.id);
|
|
wrapper.find('.side-title__button--delete').trigger('click');
|
|
ensureExists(file);
|
|
expect(refreshItem(file).parentId).toEqual('trash');
|
|
});
|
|
|
|
it('should not delete the trash folder', async () => {
|
|
const wrapper = mount();
|
|
select('trash');
|
|
wrapper.find('.side-title__button--delete').trigger('click');
|
|
await specUtils.resolveModal('trashDeletion');
|
|
});
|
|
|
|
it('should not delete files in the trash folder', async () => {
|
|
const file = await workspaceSvc.createFile({ parentId: 'trash' }, true);
|
|
const wrapper = mount();
|
|
select(file.id);
|
|
wrapper.find('.side-title__button--delete').trigger('click');
|
|
await specUtils.resolveModal('trashDeletion');
|
|
ensureExists(file);
|
|
});
|
|
|
|
it('should delete the temp folder after confirmation', async () => {
|
|
const file = await workspaceSvc.createFile({ parentId: 'temp' }, true);
|
|
const wrapper = mount();
|
|
select('temp');
|
|
wrapper.find('.side-title__button--delete').trigger('click');
|
|
await specUtils.resolveModal('tempFolderDeletion');
|
|
ensureNotExists(file);
|
|
});
|
|
|
|
it('should delete temp files after confirmation', async () => {
|
|
const file = await workspaceSvc.createFile({ parentId: 'temp' }, true);
|
|
const wrapper = mount();
|
|
select(file.id);
|
|
wrapper.find('.side-title__button--delete').trigger('click');
|
|
ensureExists(file);
|
|
await specUtils.resolveModal('tempFileDeletion');
|
|
ensureNotExists(file);
|
|
});
|
|
|
|
it('should delete folder after confirmation', async () => {
|
|
const folder = await workspaceSvc.storeItem({ type: 'folder' });
|
|
const file = await workspaceSvc.createFile({ parentId: folder.id }, true);
|
|
const wrapper = mount();
|
|
select(folder.id);
|
|
wrapper.find('.side-title__button--delete').trigger('click');
|
|
await specUtils.resolveModal('folderDeletion');
|
|
ensureNotExists(folder);
|
|
// Make sure file has been moved to Trash
|
|
ensureExists(file);
|
|
expect(refreshItem(file).parentId).toEqual('trash');
|
|
});
|
|
|
|
it('should rename files', async () => {
|
|
const file = await workspaceSvc.createFile({}, true);
|
|
const wrapper = mount();
|
|
select(file.id);
|
|
wrapper.find('.side-title__button--rename').trigger('click');
|
|
expect(store.getters['explorer/editingNode'].item.id).toEqual(file.id);
|
|
});
|
|
|
|
it('should rename folders', async () => {
|
|
const folder = await workspaceSvc.storeItem({ type: 'folder' });
|
|
const wrapper = mount();
|
|
select(folder.id);
|
|
wrapper.find('.side-title__button--rename').trigger('click');
|
|
expect(store.getters['explorer/editingNode'].item.id).toEqual(folder.id);
|
|
});
|
|
|
|
it('should not rename the trash folder', async () => {
|
|
const wrapper = mount();
|
|
select('trash');
|
|
wrapper.find('.side-title__button--rename').trigger('click');
|
|
expect(store.getters['explorer/editingNode'].isNil).toBeTruthy();
|
|
});
|
|
|
|
it('should not rename the temp folder', async () => {
|
|
const wrapper = mount();
|
|
select('temp');
|
|
wrapper.find('.side-title__button--rename').trigger('click');
|
|
expect(store.getters['explorer/editingNode'].isNil).toBeTruthy();
|
|
});
|
|
|
|
it('should close itself', async () => {
|
|
store.dispatch('data/toggleExplorer', true);
|
|
specUtils.checkToggler(
|
|
Explorer,
|
|
wrapper => wrapper.find('.side-title__button--close').trigger('click'),
|
|
() => store.getters['data/layoutSettings'].showExplorer,
|
|
);
|
|
});
|
|
});
|