mainMenuBuilder.test.ts 5.2 KB

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