mainMenuBuilder.test.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { describe, test, it, 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, MenuItem} 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 MedalsMenuBuilder from "~/services/layout/menuBuilder/medalsMenuBuilder";
  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: TestableMainMenuBuilder
  26. class TestableMainMenuBuilder extends MainMenuBuilder {
  27. public buildSubmenu(menuBuilder: typeof AbstractMenuBuilder) {
  28. return super.buildSubmenu(menuBuilder)
  29. }
  30. }
  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. runtimeConfig.baseUrlAdminLegacy = 'https://mydomain.com/'
  37. menuBuilder = new TestableMainMenuBuilder(runtimeConfig, ability, organizationProfile, accessProfile)
  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. menuBuilder.buildSubmenu = vi.fn((menuBuilder: typeof AbstractMenuBuilder): MenuGroup => {
  47. return { label: 'foo' }
  48. })
  49. const result = menuBuilder.build() as MenuGroup
  50. expect(menuBuilder.buildSubmenu).toBeCalledWith(AccessMenuBuilder)
  51. expect(menuBuilder.buildSubmenu).toBeCalledWith(AgendaMenuBuilder)
  52. expect(menuBuilder.buildSubmenu).toBeCalledWith(EquipmentMenuBuilder)
  53. expect(menuBuilder.buildSubmenu).toBeCalledWith(EducationalMenuBuilder)
  54. expect(menuBuilder.buildSubmenu).toBeCalledWith(BillingMenuBuilder)
  55. expect(menuBuilder.buildSubmenu).toBeCalledWith(CommunicationMenuBuilder)
  56. expect(menuBuilder.buildSubmenu).toBeCalledWith(DonorsMenuBuilder)
  57. expect(menuBuilder.buildSubmenu).toBeCalledWith(MedalsMenuBuilder)
  58. expect(menuBuilder.buildSubmenu).toBeCalledWith(WebsiteAdminMenuBuilder)
  59. expect(menuBuilder.buildSubmenu).toBeCalledWith(CotisationsMenuBuilder)
  60. expect(menuBuilder.buildSubmenu).toBeCalledWith(StatsMenuBuilder)
  61. expect(menuBuilder.buildSubmenu).toBeCalledWith(Admin2iosMenuBuilder)
  62. expect(result.label).toEqual('main')
  63. expect(result.icon).toEqual(undefined)
  64. expect((result.children ?? []).length).toEqual(12)
  65. })
  66. test('return a single group', () => {
  67. menuBuilder.buildSubmenu = vi.fn((menuBuilder: typeof AbstractMenuBuilder): MenuGroup | null => {
  68. if (menuBuilder.menuName === 'Access') {
  69. return { label: 'submenu', children: [
  70. {label: 'item1', type: MENU_LINK_TYPE.INTERNAL, active: true},
  71. {label: 'item2', type: MENU_LINK_TYPE.INTERNAL, active: true},
  72. {label: 'item3', type: MENU_LINK_TYPE.INTERNAL, active: true}
  73. ] }
  74. }
  75. return null
  76. })
  77. const result = menuBuilder.build() as MenuGroup
  78. expect(result.label).toEqual('submenu')
  79. expect((result.children ?? []).length).toEqual(3)
  80. })
  81. test('return null', () => {
  82. menuBuilder.buildSubmenu = vi.fn((menuBuilder: typeof AbstractMenuBuilder): MenuGroup | null => {
  83. return null
  84. })
  85. const result = menuBuilder.build() as MenuGroup
  86. expect(result).toEqual(null)
  87. })
  88. })