myAccessesMenuBuilder.test.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 MyAccessesMenuBuilder from '~/services/layout/menuBuilder/myAccessesMenuBuilder'
  8. import type { MenuGroup } from '~/types/layout'
  9. import { MENU_LINK_TYPE } from '~/types/enum/layout'
  10. let runtimeConfig: RuntimeConfig
  11. let ability: AnyAbility
  12. let organizationProfile: organizationState
  13. let accessProfile: AccessProfile
  14. let menuBuilder: MyAccessesMenuBuilder
  15. let router: Router
  16. beforeEach(() => {
  17. runtimeConfig = vi.fn() as any as RuntimeConfig
  18. ability = vi.fn() as any as AnyAbility
  19. organizationProfile = vi.fn() as any as organizationState
  20. accessProfile = vi.fn() as any as AccessProfile
  21. // @ts-ignore
  22. router = vi.fn() as Router
  23. runtimeConfig.baseUrlAdminLegacy = 'https://mydomain.com/'
  24. menuBuilder = new MyAccessesMenuBuilder(
  25. runtimeConfig,
  26. ability,
  27. organizationProfile,
  28. accessProfile,
  29. router,
  30. )
  31. })
  32. describe('getMenuName', () => {
  33. test('validate name', () => {
  34. expect(menuBuilder.getMenuName()).toEqual('MyAccesses')
  35. })
  36. })
  37. describe('build', () => {
  38. test('default : has no items, even with rights', () => {
  39. ability.can = vi.fn(() => true)
  40. expect(menuBuilder.build()).toEqual(null)
  41. })
  42. test('with enabled multi accesses', () => {
  43. accessProfile.multiAccesses = [
  44. { id: 1, name: 'Bob' },
  45. { id: 2, name: 'Séraphin' },
  46. { id: 3, name: 'Lilou' },
  47. ]
  48. const result = menuBuilder.build() as MenuGroup
  49. expect(result.label).toEqual('multiAccesses')
  50. expect(result.icon).toEqual({ name: 'fas fa-building' })
  51. expect(result.children).toEqual([
  52. {
  53. label: 'Bob',
  54. icon: undefined,
  55. to: 'https://mydomain.com/#/switch/1',
  56. target: '_self',
  57. type: MENU_LINK_TYPE.V1,
  58. active: false,
  59. endOfSubsection: false,
  60. },
  61. {
  62. label: 'Séraphin',
  63. icon: undefined,
  64. to: 'https://mydomain.com/#/switch/2',
  65. target: '_self',
  66. type: MENU_LINK_TYPE.V1,
  67. active: false,
  68. endOfSubsection: false,
  69. },
  70. {
  71. label: 'Lilou',
  72. icon: undefined,
  73. to: 'https://mydomain.com/#/switch/3',
  74. target: '_self',
  75. type: MENU_LINK_TYPE.V1,
  76. active: false,
  77. endOfSubsection: false,
  78. },
  79. ])
  80. })
  81. })