basicomptaMenuBuilder.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. menuBuilder = new BasicomptaMenuBuilder(
  22. runtimeConfig,
  23. ability,
  24. organizationProfile,
  25. accessProfile,
  26. router,
  27. )
  28. })
  29. describe('getMenuName', () => {
  30. test('validate name', () => {
  31. expect(menuBuilder.getMenuName()).toEqual('Basicompta')
  32. })
  33. })
  34. describe('build', () => {
  35. test('without admin, administratif, or financial manager access', () => {
  36. accessProfile.isAdminAccess = false
  37. accessProfile.isAdministratifManager = false
  38. accessProfile.isFinancialManager = false
  39. expect(menuBuilder.build()).toEqual(null)
  40. })
  41. test('with admin access', () => {
  42. accessProfile.isAdminAccess = true
  43. expect(menuBuilder.build()).toEqual({
  44. label: 'basicompta_admin',
  45. icon: { name: 'fas fa-suitcase' },
  46. to: 'https://app.basicompta.fr/',
  47. type: MENU_LINK_TYPE.EXTERNAL,
  48. active: false,
  49. target: '_blank',
  50. })
  51. })
  52. test('with administratif manager access', () => {
  53. accessProfile.isAdminAccess = false
  54. accessProfile.isAdministratifManager = true
  55. expect(menuBuilder.build()).toEqual({
  56. label: 'basicompta_admin',
  57. icon: { name: 'fas fa-suitcase' },
  58. to: 'https://app.basicompta.fr/',
  59. type: MENU_LINK_TYPE.EXTERNAL,
  60. active: false,
  61. target: '_blank',
  62. })
  63. })
  64. test('with financial manager access', () => {
  65. accessProfile.isAdminAccess = false
  66. accessProfile.isAdministratifManager = false
  67. accessProfile.isFinancialManager = true
  68. expect(menuBuilder.build()).toEqual({
  69. label: 'basicompta_admin',
  70. icon: { name: 'fas fa-suitcase' },
  71. to: 'https://app.basicompta.fr/',
  72. type: MENU_LINK_TYPE.EXTERNAL,
  73. active: false,
  74. target: '_blank',
  75. })
  76. })
  77. })