135 lines
3.8 KiB
TypeScript
135 lines
3.8 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
import { ViewManagerEpoch } from '../../../src/card-controller/view/types';
|
|
import {
|
|
getUpFolderMediaItem,
|
|
upFolderClickHandler,
|
|
} from '../../../src/components-lib/folder/up-folder';
|
|
import { ViewFolder } from '../../../src/view/item';
|
|
import { EventMediaQuery, FolderViewQuery } from '../../../src/view/query';
|
|
import {
|
|
createCardAPI,
|
|
createFolder,
|
|
createView,
|
|
TestViewMedia,
|
|
} from '../../test-utils';
|
|
|
|
describe('upFolderClickHandler', () => {
|
|
const item = new TestViewMedia();
|
|
|
|
it('should ignore non-folder query', () => {
|
|
const api = createCardAPI();
|
|
const view = createView({
|
|
query: new EventMediaQuery(),
|
|
});
|
|
vi.mocked(api.getViewManager().getView).mockReturnValue(view);
|
|
|
|
const epoch: ViewManagerEpoch = {
|
|
manager: api.getViewManager(),
|
|
};
|
|
|
|
upFolderClickHandler(item, new Event('click'), epoch);
|
|
|
|
expect(api.getViewManager().setViewByParametersWithExistingQuery).not.toBeCalled();
|
|
});
|
|
|
|
it('should ignore folder query without raw query', () => {
|
|
const api = createCardAPI();
|
|
const view = createView({
|
|
query: new FolderViewQuery(),
|
|
});
|
|
vi.mocked(api.getViewManager().getView).mockReturnValue(view);
|
|
|
|
const epoch: ViewManagerEpoch = {
|
|
manager: api.getViewManager(),
|
|
};
|
|
|
|
upFolderClickHandler(item, new Event('click'), epoch);
|
|
|
|
expect(api.getViewManager().setViewByParametersWithExistingQuery).not.toBeCalled();
|
|
});
|
|
|
|
it('should ignore folder query wihout parent to go up to', () => {
|
|
const api = createCardAPI();
|
|
const view = createView({
|
|
query: new FolderViewQuery({ folder: createFolder(), path: ['path'] }),
|
|
});
|
|
vi.mocked(api.getViewManager().getView).mockReturnValue(view);
|
|
|
|
const epoch: ViewManagerEpoch = {
|
|
manager: api.getViewManager(),
|
|
};
|
|
|
|
upFolderClickHandler(item, new Event('click'), epoch);
|
|
|
|
expect(api.getViewManager().setViewByParametersWithExistingQuery).not.toBeCalled();
|
|
});
|
|
|
|
it('should go up in the folder hierarchy', () => {
|
|
const api = createCardAPI();
|
|
const folder = createFolder();
|
|
const view = createView({
|
|
query: new FolderViewQuery({
|
|
folder,
|
|
path: ['one', 'two', 'three'],
|
|
}),
|
|
});
|
|
vi.mocked(api.getViewManager().getView).mockReturnValue(view);
|
|
|
|
const epoch: ViewManagerEpoch = {
|
|
manager: api.getViewManager(),
|
|
};
|
|
|
|
upFolderClickHandler(item, new Event('click'), epoch);
|
|
|
|
expect(api.getViewManager().setViewByParametersWithExistingQuery).toBeCalledWith({
|
|
params: {
|
|
query: expect.any(FolderViewQuery),
|
|
},
|
|
});
|
|
|
|
const query = vi.mocked(api.getViewManager().setViewByParametersWithExistingQuery)
|
|
.mock.calls[0][0]?.params?.query;
|
|
expect(query?.getQuery()).toEqual({
|
|
folder,
|
|
path: ['one', 'two'],
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getUpFolderMediaItem', () => {
|
|
it('should ignore non-folder query', () => {
|
|
const view = createView({
|
|
query: new EventMediaQuery(),
|
|
});
|
|
expect(getUpFolderMediaItem(view)).toBeNull();
|
|
});
|
|
|
|
it('should ignore folder query without raw query', () => {
|
|
const view = createView({
|
|
query: new FolderViewQuery(),
|
|
});
|
|
expect(getUpFolderMediaItem(view)).toBeNull();
|
|
});
|
|
|
|
it('should ignore folder query without parents', () => {
|
|
const view = createView({
|
|
query: new FolderViewQuery({ folder: createFolder(), path: ['one'] }),
|
|
});
|
|
expect(getUpFolderMediaItem(view)).toBeNull();
|
|
});
|
|
|
|
it('should get up folder media', () => {
|
|
const view = createView({
|
|
query: new FolderViewQuery({
|
|
folder: createFolder(),
|
|
path: ['one', 'two', 'three'],
|
|
}),
|
|
});
|
|
|
|
const folderMedia = getUpFolderMediaItem(view);
|
|
|
|
expect(folderMedia).toBeInstanceOf(ViewFolder);
|
|
expect(folderMedia?.getIcon()).toBe('mdi:arrow-up-left');
|
|
});
|
|
});
|