basicomptaMenuBuilder.test.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { describe, test, expect, vi, beforeEach } from 'vitest'
  2. import type { RuntimeConfig } from '@nuxt/schema'
  3. import type { AnyAbility } from '@casl/ability'
  4. import type { Router } from 'vue-router'
  5. import type { AccessProfile, organizationState } from '~/types/interfaces'
  6. import BasicomptaMenuBuilder from '~/services/layout/menuBuilder/basicomptaMenuBuilder'
  7. import { MENU_LINK_TYPE } from '~/types/enum/layout'
  8. let runtimeConfig: RuntimeConfig
  9. let ability: AnyAbility
  10. let organizationProfile: organizationState
  11. let accessProfile: AccessProfile
  12. let menuBuilder: BasicomptaMenuBuilder
  13. let router: Router
  14. beforeEach(() => {
  15. runtimeConfig = vi.fn() as any as RuntimeConfig
  16. ability = vi.fn() as any as AnyAbility
  17. organizationProfile = vi.fn() as any as organizationState
  18. accessProfile = vi.fn() as any as AccessProfile
  19. // @ts-ignore
  20. router = vi.fn() as Router
  21. runtimeConfig.baseUrlAdminLegacy = 'https://mydomain.com/'
  22. menuBuilder = new BasicomptaMenuBuilder(
  23. runtimeConfig,
  24. ability,
  25. organizationProfile,
  26. accessProfile,
  27. router,
  28. )
  29. })
  30. describe('getMenuName', () => {
  31. test('validate name', () => {
  32. expect(menuBuilder.getMenuName()).toEqual('Basicompta')
  33. })
  34. })
  35. describe('build', () => {
  36. test('without ability', () => {
  37. ability.can = vi.fn((action: string, subject: string) => false)
  38. expect(menuBuilder.build()).toEqual(null)
  39. })
  40. test('without admin, administratif, or financial manager access', () => {
  41. ability.can = vi.fn((action: string, subject: string) => true)
  42. accessProfile.isAdminAccess = false
  43. accessProfile.isAdministratifManager = false
  44. accessProfile.isFinancialManager = false
  45. expect(menuBuilder.build()).toEqual({
  46. label: 'basicompta_admin',
  47. icon: { name: 'fas fa-suitcase' },
  48. to: 'https://mydomain.com/#/basicompta',
  49. type: MENU_LINK_TYPE.V1,
  50. target: '_self',
  51. active: false,
  52. endOfSubsection: false,
  53. })
  54. })
  55. test('with admin access', () => {
  56. ability.can = vi.fn((action: string, subject: string) => true)
  57. accessProfile.isAdminAccess = true
  58. expect(menuBuilder.build()).toEqual({
  59. label: 'basicompta_admin',
  60. icon: { name: 'fas fa-suitcase' },
  61. to: 'https://mydomain.com/#/basicompta',
  62. type: MENU_LINK_TYPE.V1,
  63. target: '_self',
  64. active: false,
  65. endOfSubsection: false,
  66. })
  67. })
  68. test('with administratif manager access', () => {
  69. ability.can = vi.fn((action: string, subject: string) => true)
  70. accessProfile.isAdminAccess = false
  71. accessProfile.isAdministratifManager = true
  72. expect(menuBuilder.build()).toEqual({
  73. label: 'basicompta_admin',
  74. icon: { name: 'fas fa-suitcase' },
  75. to: 'https://mydomain.com/#/basicompta',
  76. type: MENU_LINK_TYPE.V1,
  77. target: '_self',
  78. active: false,
  79. endOfSubsection: false,
  80. })
  81. })
  82. test('with financial manager access', () => {
  83. ability.can = vi.fn((action: string, subject: string) => true)
  84. accessProfile.isAdminAccess = false
  85. accessProfile.isAdministratifManager = false
  86. accessProfile.isFinancialManager = true
  87. expect(menuBuilder.build()).toEqual({
  88. label: 'basicompta_admin',
  89. icon: { name: 'fas fa-suitcase' },
  90. to: 'https://mydomain.com/#/basicompta',
  91. type: MENU_LINK_TYPE.V1,
  92. target: '_self',
  93. active: false,
  94. endOfSubsection: false,
  95. })
  96. })
  97. })