menuComposer.test.ts 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { describe, test, it, expect } from 'vitest'
  2. import MenuComposer from "~/services/layout/menuComposer";
  3. import type {RuntimeConfig} from "@nuxt/schema";
  4. import type {AnyAbility} from "@casl/ability/dist/types";
  5. import type {AccessProfile, LayoutState, organizationState} from "~/types/interfaces";
  6. import type {MenuBuilder, MenuGroup, MenuItem} from "~/types/layout";
  7. import {MENU_LINK_TYPE} from "~/types/enum/layout";
  8. describe('build', () => {
  9. test('simple call', () => {
  10. // @ts-ignore
  11. const runtimeConfig = vi.fn() as RuntimeConfig
  12. // @ts-ignore
  13. const ability = vi.fn() as AnyAbility
  14. // @ts-ignore
  15. const organizationProfile = vi.fn() as organizationState
  16. // @ts-ignore
  17. const accessProfile = vi.fn() as AccessProfile
  18. // @ts-ignore
  19. const layoutState = vi.fn() as LayoutState
  20. layoutState.menus = {}
  21. layoutState.menusOpened = {}
  22. const item1 = {label: 'item1', type: MENU_LINK_TYPE.INTERNAL} as MenuItem
  23. const group1 = {label: 'group1', children: []} as MenuGroup
  24. const group2 = {label: 'group1', children: [{label: 'item2', type: MENU_LINK_TYPE.INTERNAL}]} as MenuGroup
  25. // @ts-ignore
  26. const dummyBuilder1 = vi.fn() as MenuBuilder
  27. const dummyBuilderClass1 = vi.fn(() => dummyBuilder1)
  28. dummyBuilder1.getMenuName = vi.fn(() => 'dummy1')
  29. dummyBuilder1.build = vi.fn(() => item1)
  30. // @ts-ignore
  31. const dummyBuilder2 = vi.fn() as MenuBuilder
  32. const dummyBuilderClass2 = vi.fn(() => dummyBuilder2)
  33. dummyBuilder2.getMenuName = vi.fn(() => 'dummy2')
  34. dummyBuilder2.build = vi.fn(() => group1)
  35. // @ts-ignore
  36. const dummyBuilder3 = vi.fn() as MenuBuilder
  37. const dummyBuilderClass3 = vi.fn(() => dummyBuilder3)
  38. dummyBuilder3.getMenuName = vi.fn(() => 'dummy3')
  39. dummyBuilder3.build = vi.fn(() => group2)
  40. // @ts-ignore
  41. const dummyBuilder4 = vi.fn() as MenuBuilder
  42. const dummyBuilderClass4 = vi.fn(() => dummyBuilder4)
  43. dummyBuilder4.getMenuName = vi.fn(() => 'dummy4')
  44. dummyBuilder4.build = vi.fn(() => null)
  45. // @ts-ignore
  46. MenuComposer.builders = [ dummyBuilderClass1, dummyBuilderClass2, dummyBuilderClass3, dummyBuilderClass4 ]
  47. MenuComposer.build(runtimeConfig, ability, organizationProfile, accessProfile, layoutState)
  48. expect(dummyBuilderClass1).toHaveBeenCalledOnce()
  49. expect(dummyBuilderClass1).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
  50. expect(dummyBuilder1.build).toHaveBeenCalledOnce()
  51. expect(dummyBuilderClass2).toHaveBeenCalledOnce()
  52. expect(dummyBuilderClass2).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
  53. expect(dummyBuilder2.build).toHaveBeenCalledOnce()
  54. expect(dummyBuilderClass3).toHaveBeenCalledOnce()
  55. expect(dummyBuilderClass3).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
  56. expect(dummyBuilder3.build).toHaveBeenCalledOnce()
  57. expect(dummyBuilderClass4).toHaveBeenCalledOnce()
  58. expect(dummyBuilderClass4).toHaveBeenCalledWith(runtimeConfig, ability, organizationProfile, accessProfile)
  59. expect(dummyBuilder4.build).toHaveBeenCalledOnce()
  60. expect(layoutState.menus).toEqual({
  61. 'dummy1': item1,
  62. 'dummy2': group1,
  63. 'dummy3': group2
  64. })
  65. expect(layoutState.menusOpened).toEqual({
  66. 'dummy3': false
  67. })
  68. })
  69. })