mainMenuBuilder.test.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import { describe, test, expect } from 'vitest'
  2. import {RuntimeConfig} from "@nuxt/schema";
  3. import {AnyAbility} from "@casl/ability/dist/types";
  4. import {AccessProfile, organizationState} from "~/types/interfaces";
  5. import MainMenuBuilder from "~/services/layout/menuBuilder/mainMenuBuilder";
  6. import {MenuGroup} from "~/types/layout";
  7. import {MENU_LINK_TYPE} from "~/types/enum/layout";
  8. import AbstractMenuBuilder from "~/services/layout/menuBuilder/abstractMenuBuilder";
  9. import AccessMenuBuilder from "~/services/layout/menuBuilder/accessMenuBuilder";
  10. import AgendaMenuBuilder from "~/services/layout/menuBuilder/agendaMenuBuilder";
  11. import EquipmentMenuBuilder from "~/services/layout/menuBuilder/equipmentMenuBuilder";
  12. import EducationalMenuBuilder from "~/services/layout/menuBuilder/educationalMenuBuilder";
  13. import BillingMenuBuilder from "~/services/layout/menuBuilder/billingMenuBuilder";
  14. import CommunicationMenuBuilder from "~/services/layout/menuBuilder/communicationMenuBuilder";
  15. import DonorsMenuBuilder from "~/services/layout/menuBuilder/donorsMenuBuilder";
  16. import RewardsMenuBuilder from "~/services/layout/menuBuilder/rewardsMenuBuilder";
  17. import WebsiteAdminMenuBuilder from "~/services/layout/menuBuilder/websiteAdminMenuBuilder";
  18. import CotisationsMenuBuilder from "~/services/layout/menuBuilder/cotisationsMenuBuilder";
  19. import StatsMenuBuilder from "~/services/layout/menuBuilder/statsMenuBuilder";
  20. import Admin2iosMenuBuilder from "~/services/layout/menuBuilder/admin2iosMenuBuilder";
  21. let runtimeConfig: RuntimeConfig
  22. let ability: AnyAbility
  23. let organizationProfile: organizationState
  24. let accessProfile: AccessProfile
  25. let menuBuilder: MainMenuBuilder
  26. beforeEach(()=> {
  27. runtimeConfig = vi.fn() as any as RuntimeConfig
  28. ability = vi.fn() as any as AnyAbility
  29. organizationProfile = vi.fn() as any as organizationState
  30. accessProfile = vi.fn() as any as AccessProfile
  31. runtimeConfig.baseUrlAdminLegacy = 'https://mydomain.com/'
  32. menuBuilder = new MainMenuBuilder(runtimeConfig, ability, organizationProfile, accessProfile)
  33. })
  34. describe('getMenuName', () => {
  35. test('validate name', () => {
  36. expect(menuBuilder.getMenuName()).toEqual("Main")
  37. })
  38. })
  39. describe('build', () => {
  40. test('return all menus', () => {
  41. // @ts-ignore
  42. menuBuilder.buildSubmenu = vi.fn((menuBuilder: typeof AbstractMenuBuilder): MenuGroup => {
  43. return { label: 'foo' }
  44. })
  45. const result = menuBuilder.build() as MenuGroup
  46. // @ts-ignore
  47. expect(menuBuilder.buildSubmenu).toBeCalledWith(AccessMenuBuilder)
  48. // @ts-ignore
  49. expect(menuBuilder.buildSubmenu).toBeCalledWith(AgendaMenuBuilder)
  50. // @ts-ignore
  51. expect(menuBuilder.buildSubmenu).toBeCalledWith(EquipmentMenuBuilder)
  52. // @ts-ignore
  53. expect(menuBuilder.buildSubmenu).toBeCalledWith(EducationalMenuBuilder)
  54. // @ts-ignore
  55. expect(menuBuilder.buildSubmenu).toBeCalledWith(BillingMenuBuilder)
  56. // @ts-ignore
  57. expect(menuBuilder.buildSubmenu).toBeCalledWith(CommunicationMenuBuilder)
  58. // @ts-ignore
  59. expect(menuBuilder.buildSubmenu).toBeCalledWith(DonorsMenuBuilder)
  60. // @ts-ignore
  61. expect(menuBuilder.buildSubmenu).toBeCalledWith(RewardsMenuBuilder)
  62. // @ts-ignore
  63. expect(menuBuilder.buildSubmenu).toBeCalledWith(WebsiteAdminMenuBuilder)
  64. // @ts-ignore
  65. expect(menuBuilder.buildSubmenu).toBeCalledWith(CotisationsMenuBuilder)
  66. // @ts-ignore
  67. expect(menuBuilder.buildSubmenu).toBeCalledWith(StatsMenuBuilder)
  68. // @ts-ignore
  69. expect(menuBuilder.buildSubmenu).toBeCalledWith(Admin2iosMenuBuilder)
  70. expect(result.label).toEqual('main')
  71. expect(result.icon).toEqual(undefined)
  72. expect((result.children ?? []).length).toEqual(12)
  73. })
  74. test('return a single group', () => {
  75. // @ts-ignore
  76. menuBuilder.buildSubmenu = vi.fn((menuBuilder: typeof AbstractMenuBuilder): MenuGroup | null => {
  77. if (menuBuilder.menuName === 'Access') {
  78. return { label: 'submenu', children: [
  79. {label: 'item1', type: MENU_LINK_TYPE.INTERNAL, active: true},
  80. {label: 'item2', type: MENU_LINK_TYPE.INTERNAL, active: true},
  81. {label: 'item3', type: MENU_LINK_TYPE.INTERNAL, active: true}
  82. ] }
  83. }
  84. return null
  85. })
  86. const result = menuBuilder.build() as MenuGroup
  87. expect(result.label).toEqual('submenu')
  88. expect((result.children ?? []).length).toEqual(3)
  89. })
  90. test('return null', () => {
  91. // @ts-ignore
  92. menuBuilder.buildSubmenu = vi.fn((menuBuilder: typeof AbstractMenuBuilder): MenuGroup | null => {
  93. return null
  94. })
  95. const result = menuBuilder.build() as MenuGroup
  96. expect(result).toEqual(null)
  97. })
  98. })