Files
bDS/tests/renderer/components/menuTreeMove.test.ts
2026-02-21 19:51:34 +01:00

82 lines
1.9 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { applyTreeMove, type MenuTreeItem } from '../../../src/renderer/components/MenuEditorView/menuTreeMove';
function createTree(): MenuTreeItem[] {
return [
{
id: 'home',
title: 'Home',
kind: 'page',
children: [],
},
{
id: 'docs',
title: 'Docs',
kind: 'submenu',
children: [
{
id: 'about',
title: 'About',
kind: 'page',
children: [],
},
],
},
{
id: 'blog',
title: 'Blog',
kind: 'submenu',
children: [
{
id: 'post-1',
title: 'Post 1',
kind: 'page',
children: [],
},
{
id: 'post-2',
title: 'Post 2',
kind: 'page',
children: [],
},
],
},
];
}
describe('applyTreeMove', () => {
it('moves a page into a submenu', () => {
const moved = applyTreeMove(createTree(), {
dragIds: ['home'],
parentId: 'docs',
index: 1,
});
const docs = moved.find((item) => item.id === 'docs');
expect(docs?.children.map((child) => child.id)).toEqual(['about', 'home']);
expect(moved.map((item) => item.id)).toEqual(['docs', 'blog']);
});
it('moves a whole subtree without losing children', () => {
const moved = applyTreeMove(createTree(), {
dragIds: ['blog'],
parentId: null,
index: 0,
});
expect(moved[0].id).toBe('blog');
expect(moved[0].children.map((child) => child.id)).toEqual(['post-1', 'post-2']);
});
it('reorders siblings within same parent', () => {
const moved = applyTreeMove(createTree(), {
dragIds: ['post-2'],
parentId: 'blog',
index: 0,
});
const blog = moved.find((item) => item.id === 'blog');
expect(blog?.children.map((child) => child.id)).toEqual(['post-2', 'post-1']);
});
});