Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
89 lines
2.4 KiB
TypeScript
89 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { findMenuByPath, findRootMenuByPath } from '../find-menu-by-path';
|
|
|
|
// 示例菜单数据
|
|
const menus: any[] = [
|
|
{ path: '/', children: [] },
|
|
{ path: '/about', children: [] },
|
|
{
|
|
path: '/contact',
|
|
children: [
|
|
{ path: '/contact/email', children: [] },
|
|
{ path: '/contact/phone', children: [] },
|
|
],
|
|
},
|
|
{
|
|
path: '/services',
|
|
children: [
|
|
{ path: '/services/design', children: [] },
|
|
{
|
|
path: '/services/development',
|
|
children: [{ path: '/services/development/web', children: [] }],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
describe('menu Finder Tests', () => {
|
|
it('finds a top-level menu', () => {
|
|
const menu = findMenuByPath(menus, '/about');
|
|
expect(menu).toBeDefined();
|
|
expect(menu?.path).toBe('/about');
|
|
});
|
|
|
|
it('finds a nested menu', () => {
|
|
const menu = findMenuByPath(menus, '/services/development/web');
|
|
expect(menu).toBeDefined();
|
|
expect(menu?.path).toBe('/services/development/web');
|
|
});
|
|
|
|
it('returns null for a non-existent path', () => {
|
|
const menu = findMenuByPath(menus, '/non-existent');
|
|
expect(menu).toBeNull();
|
|
});
|
|
|
|
it('handles empty menus list', () => {
|
|
const menu = findMenuByPath([], '/about');
|
|
expect(menu).toBeNull();
|
|
});
|
|
|
|
it('handles menu items without children', () => {
|
|
const menu = findMenuByPath(
|
|
[{ path: '/only', children: undefined }] as any[],
|
|
'/only',
|
|
);
|
|
expect(menu).toBeDefined();
|
|
expect(menu?.path).toBe('/only');
|
|
});
|
|
|
|
it('finds root menu by path', () => {
|
|
const { findMenu, rootMenu, rootMenuPath } = findRootMenuByPath(
|
|
menus,
|
|
'/services/development/web',
|
|
);
|
|
|
|
expect(findMenu).toBeDefined();
|
|
expect(rootMenu).toBeUndefined();
|
|
expect(rootMenuPath).toBeUndefined();
|
|
expect(findMenu?.path).toBe('/services/development/web');
|
|
});
|
|
|
|
it('returns null for undefined or empty path', () => {
|
|
const menuUndefinedPath = findMenuByPath(menus);
|
|
const menuEmptyPath = findMenuByPath(menus, '');
|
|
expect(menuUndefinedPath).toBeNull();
|
|
expect(menuEmptyPath).toBeNull();
|
|
});
|
|
|
|
it('checks for root menu when path does not exist', () => {
|
|
const { findMenu, rootMenu, rootMenuPath } = findRootMenuByPath(
|
|
menus,
|
|
'/non-existent',
|
|
);
|
|
expect(findMenu).toBeNull();
|
|
expect(rootMenu).toBeUndefined();
|
|
expect(rootMenuPath).toBeUndefined();
|
|
});
|
|
});
|