menuComposer.test.ts 3.6 KB

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