Blame view

Yi.Vben5.Vue3/packages/utils/src/helpers/__tests__/generate-routes-frontend.test.ts 2.76 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
  import type { RouteRecordRaw } from 'vue-router';
  
  import { describe, expect, it } from 'vitest';
  
  import {
    generateRoutesByFrontend,
    hasAuthority,
  } from '../generate-routes-frontend';
  
  // Mock 路由数据
  const mockRoutes = [
    {
      meta: {
        authority: ['admin', 'user'],
        hideInMenu: false,
      },
      path: '/dashboard',
      children: [
        {
          path: '/dashboard/overview',
          meta: { authority: ['admin'], hideInMenu: false },
        },
        {
          path: '/dashboard/stats',
          meta: { authority: ['user'], hideInMenu: true },
        },
      ],
    },
    {
      meta: { authority: ['admin'], hideInMenu: false },
      path: '/settings',
    },
    {
      meta: { hideInMenu: false },
      path: '/profile',
    },
  ] as RouteRecordRaw[];
  
  describe('hasAuthority', () => {
    it('should return true if there is no authority defined', () => {
      expect(hasAuthority(mockRoutes[2], ['admin'])).toBe(true);
    });
  
    it('should return true if the user has the required authority', () => {
      expect(hasAuthority(mockRoutes[0], ['admin'])).toBe(true);
    });
  
    it('should return false if the user does not have the required authority', () => {
      expect(hasAuthority(mockRoutes[1], ['user'])).toBe(false);
    });
  });
  
  describe('generateRoutesByFrontend', () => {
    it('should handle routes without children', async () => {
      const generatedRoutes = await generateRoutesByFrontend(mockRoutes, [
        'user',
      ]);
      expect(generatedRoutes).toEqual(
        expect.arrayContaining([
          expect.objectContaining({
            path: '/profile', // This route has no children and should be included
          }),
        ]),
      );
    });
  
    it('should handle empty roles array', async () => {
      const generatedRoutes = await generateRoutesByFrontend(mockRoutes, []);
      expect(generatedRoutes).toEqual(
        expect.arrayContaining([
          // Only routes without authority should be included
          expect.objectContaining({
            path: '/profile',
          }),
        ]),
      );
      expect(generatedRoutes).not.toEqual(
        expect.arrayContaining([
          expect.objectContaining({
            path: '/dashboard',
          }),
          expect.objectContaining({
            path: '/settings',
          }),
        ]),
      );
    });
  
    it('should handle missing meta fields', async () => {
      const routesWithMissingMeta = [
        { path: '/path1' }, // No meta
        { meta: {}, path: '/path2' }, // Empty meta
        { meta: { authority: ['admin'] }, path: '/path3' }, // Only authority
      ];
      const generatedRoutes = await generateRoutesByFrontend(
        routesWithMissingMeta as RouteRecordRaw[],
        ['admin'],
      );
      expect(generatedRoutes).toEqual([
        { path: '/path1' },
        { meta: {}, path: '/path2' },
        { meta: { authority: ['admin'] }, path: '/path3' },
      ]);
    });
  });