|
|
@@ -0,0 +1,87 @@
|
|
|
+import { describe, test, it, expect } from 'vitest'
|
|
|
+import MenuComposer from "~/services/layout/menuComposer";
|
|
|
+import {RuntimeConfig} from "@nuxt/schema";
|
|
|
+import {AnyAbility} from "@casl/ability/dist/types";
|
|
|
+import {AccessProfile, LayoutState, organizationState} from "~/types/interfaces";
|
|
|
+import {MenuBuilder, MenuGroup, MenuItem} from "~/types/layout";
|
|
|
+import {MENU_LINK_TYPE} from "~/types/enum/layout";
|
|
|
+import AbstractMenuBuilder from "~/services/layout/menuBuilder/abstractMenuBuilder";
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+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
|
|
|
+
|
|
|
+ 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, layoutState)
|
|
|
+
|
|
|
+ expect(dummyBuilderClass1).toHaveBeenCalledOnce()
|
|
|
+ expect(dummyBuilderClass1).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
|
|
|
+ expect(dummyBuilder1.build).toHaveBeenCalledOnce()
|
|
|
+
|
|
|
+ expect(dummyBuilderClass2).toHaveBeenCalledOnce()
|
|
|
+ expect(dummyBuilderClass2).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
|
|
|
+ expect(dummyBuilder2.build).toHaveBeenCalledOnce()
|
|
|
+
|
|
|
+ expect(dummyBuilderClass3).toHaveBeenCalledOnce()
|
|
|
+ expect(dummyBuilderClass3).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
|
|
|
+ expect(dummyBuilder3.build).toHaveBeenCalledOnce()
|
|
|
+
|
|
|
+ expect(dummyBuilderClass4).toHaveBeenCalledOnce()
|
|
|
+ expect(dummyBuilderClass4).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
|
|
|
+ expect(dummyBuilder4.build).toHaveBeenCalledOnce()
|
|
|
+
|
|
|
+ expect(layoutState.menus).toEqual({
|
|
|
+ 'dummy1': item1,
|
|
|
+ 'dummy2': group1,
|
|
|
+ 'dummy3': group2
|
|
|
+ })
|
|
|
+
|
|
|
+ expect(layoutState.menusOpened).toEqual({
|
|
|
+ 'dummy3': false
|
|
|
+ })
|
|
|
+ })
|
|
|
+})
|