mainMenuBuilder.test.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import { describe, test, expect } from 'vitest'
  2. import type { RuntimeConfig } from '@nuxt/schema'
  3. import type { AnyAbility } from '@casl/ability/dist/types'
  4. import type { AccessProfile, organizationState } from '~/types/interfaces'
  5. import MainMenuBuilder from '~/services/layout/menuBuilder/mainMenuBuilder'
  6. import type { 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(
  33. runtimeConfig,
  34. ability,
  35. organizationProfile,
  36. accessProfile,
  37. )
  38. })
  39. describe('getMenuName', () => {
  40. test('validate name', () => {
  41. expect(menuBuilder.getMenuName()).toEqual('Main')
  42. })
  43. })
  44. describe('build', () => {
  45. test('return all menus', () => {
  46. // @ts-ignore
  47. menuBuilder.buildSubmenu = vi.fn(
  48. (menuBuilder: typeof AbstractMenuBuilder): MenuGroup => {
  49. return { label: 'foo' }
  50. },
  51. )
  52. const result = menuBuilder.build() as MenuGroup
  53. // @ts-ignore
  54. expect(menuBuilder.buildSubmenu).toBeCalledWith(AccessMenuBuilder)
  55. // @ts-ignore
  56. expect(menuBuilder.buildSubmenu).toBeCalledWith(AgendaMenuBuilder)
  57. // @ts-ignore
  58. expect(menuBuilder.buildSubmenu).toBeCalledWith(EquipmentMenuBuilder)
  59. // @ts-ignore
  60. expect(menuBuilder.buildSubmenu).toBeCalledWith(EducationalMenuBuilder)
  61. // @ts-ignore
  62. expect(menuBuilder.buildSubmenu).toBeCalledWith(BillingMenuBuilder)
  63. // @ts-ignore
  64. expect(menuBuilder.buildSubmenu).toBeCalledWith(CommunicationMenuBuilder)
  65. // @ts-ignore
  66. expect(menuBuilder.buildSubmenu).toBeCalledWith(DonorsMenuBuilder)
  67. // @ts-ignore
  68. expect(menuBuilder.buildSubmenu).toBeCalledWith(RewardsMenuBuilder)
  69. // @ts-ignore
  70. expect(menuBuilder.buildSubmenu).toBeCalledWith(WebsiteAdminMenuBuilder)
  71. // @ts-ignore
  72. expect(menuBuilder.buildSubmenu).toBeCalledWith(CotisationsMenuBuilder)
  73. // @ts-ignore
  74. expect(menuBuilder.buildSubmenu).toBeCalledWith(StatsMenuBuilder)
  75. // @ts-ignore
  76. expect(menuBuilder.buildSubmenu).toBeCalledWith(Admin2iosMenuBuilder)
  77. expect(result.label).toEqual('main')
  78. expect(result.icon).toEqual(undefined)
  79. expect((result.children ?? []).length).toEqual(12)
  80. })
  81. test('return a single group', () => {
  82. // @ts-ignore
  83. menuBuilder.buildSubmenu = vi.fn(
  84. (menuBuilder: typeof AbstractMenuBuilder): MenuGroup | null => {
  85. if (menuBuilder.menuName === 'Access') {
  86. return {
  87. label: 'submenu',
  88. children: [
  89. { label: 'item1', type: MENU_LINK_TYPE.INTERNAL, active: true },
  90. { label: 'item2', type: MENU_LINK_TYPE.INTERNAL, active: true },
  91. { label: 'item3', type: MENU_LINK_TYPE.INTERNAL, active: true },
  92. ],
  93. }
  94. }
  95. return null
  96. },
  97. )
  98. const result = menuBuilder.build() as MenuGroup
  99. expect(result.label).toEqual('submenu')
  100. expect((result.children ?? []).length).toEqual(3)
  101. })
  102. test('return null', () => {
  103. // @ts-ignore
  104. menuBuilder.buildSubmenu = vi.fn(
  105. (menuBuilder: typeof AbstractMenuBuilder): MenuGroup | null => {
  106. return null
  107. },
  108. )
  109. const result = menuBuilder.build() as MenuGroup
  110. expect(result).toEqual(null)
  111. })
  112. })