| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- import { describe, test, expect, vi } from 'vitest'
- import type { RuntimeConfig } from '@nuxt/schema'
- import type { AnyAbility } from '@casl/ability/dist/types'
- import type { Router } from 'vue-router'
- import MenuComposer from '~/services/layout/menuComposer'
- import type {
- AccessProfile,
- LayoutState,
- organizationState,
- } from '~/types/interfaces'
- import type { MenuBuilder, MenuGroup, MenuItem } from '~/types/layout'
- import { MENU_LINK_TYPE } from '~/types/enum/layout'
- describe('build', () => {
- test('simple call', () => {
- // @ts-ignore
- const runtimeConfig = vi.fn() as RuntimeConfig
- // @ts-ignore
- const ability = vi.fn() as AnyAbility
- // @ts-ignore
- const organizationProfile = vi.fn() as organizationState
- // @ts-ignore
- const accessProfile = vi.fn() as AccessProfile
- // @ts-ignore
- const layoutState = vi.fn() as LayoutState
- // @ts-ignore
- const router = vi.fn() as Router
- layoutState.menus = {}
- layoutState.menusOpened = {}
- const item1 = { label: 'item1', type: MENU_LINK_TYPE.INTERNAL } as MenuItem
- const group1 = { label: 'group1', children: [] } as MenuGroup
- const group2 = {
- label: 'group1',
- children: [{ label: 'item2', type: MENU_LINK_TYPE.INTERNAL }],
- } as MenuGroup
- // @ts-ignore
- const dummyBuilder1 = vi.fn() as MenuBuilder
- const dummyBuilderClass1 = vi.fn(() => dummyBuilder1)
- dummyBuilder1.getMenuName = vi.fn(() => 'dummy1')
- dummyBuilder1.build = vi.fn(() => item1)
- // @ts-ignore
- const dummyBuilder2 = vi.fn() as MenuBuilder
- const dummyBuilderClass2 = vi.fn(() => dummyBuilder2)
- dummyBuilder2.getMenuName = vi.fn(() => 'dummy2')
- dummyBuilder2.build = vi.fn(() => group1)
- // @ts-ignore
- const dummyBuilder3 = vi.fn() as MenuBuilder
- const dummyBuilderClass3 = vi.fn(() => dummyBuilder3)
- dummyBuilder3.getMenuName = vi.fn(() => 'dummy3')
- dummyBuilder3.build = vi.fn(() => group2)
- // @ts-ignore
- const dummyBuilder4 = vi.fn() as MenuBuilder
- const dummyBuilderClass4 = vi.fn(() => dummyBuilder4)
- dummyBuilder4.getMenuName = vi.fn(() => 'dummy4')
- dummyBuilder4.build = vi.fn(() => null)
- // @ts-ignore
- MenuComposer.builders = [
- dummyBuilderClass1,
- dummyBuilderClass2,
- dummyBuilderClass3,
- dummyBuilderClass4,
- ]
- MenuComposer.build(
- runtimeConfig,
- ability,
- organizationProfile,
- accessProfile,
- router,
- layoutState,
- )
- expect(dummyBuilderClass1).toHaveBeenCalledOnce()
- expect(dummyBuilderClass1).toHaveBeenCalledWith(
- runtimeConfig,
- ability,
- organizationProfile,
- accessProfile,
- router,
- )
- expect(dummyBuilder1.build).toHaveBeenCalledOnce()
- expect(dummyBuilderClass2).toHaveBeenCalledOnce()
- expect(dummyBuilderClass2).toHaveBeenCalledWith(
- runtimeConfig,
- ability,
- organizationProfile,
- accessProfile,
- router,
- )
- expect(dummyBuilder2.build).toHaveBeenCalledOnce()
- expect(dummyBuilderClass3).toHaveBeenCalledOnce()
- expect(dummyBuilderClass3).toHaveBeenCalledWith(
- runtimeConfig,
- ability,
- organizationProfile,
- accessProfile,
- router,
- )
- expect(dummyBuilder3.build).toHaveBeenCalledOnce()
- expect(dummyBuilderClass4).toHaveBeenCalledOnce()
- expect(dummyBuilderClass4).toHaveBeenCalledWith(
- runtimeConfig,
- ability,
- organizationProfile,
- accessProfile,
- router,
- )
- expect(dummyBuilder4.build).toHaveBeenCalledOnce()
- expect(layoutState.menus).toEqual({
- dummy1: item1,
- dummy2: group1,
- dummy3: group2,
- })
- expect(layoutState.menusOpened).toEqual({
- dummy3: false,
- })
- })
- })
|