parametersMenuBuilder.test.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { AssertionError } from 'node:assert'
  2. import { describe, test, expect, beforeEach, vi } from 'vitest'
  3. import type { RuntimeConfig } from '@nuxt/schema'
  4. //@ts-expect-error problème de typage sans conséquence
  5. import type { AnyAbility } from '@casl/ability/dist/types'
  6. import type { Router } from 'vue-router'
  7. import type { AccessProfile, organizationState } from '~/types/interfaces'
  8. import ParametersMenuBuilder from '~/services/layout/menuBuilder/parametersMenuBuilder'
  9. import type { IconItem, MenuGroup, MenuItem, MenuItems } from '~/types/layout'
  10. class TestableParametersMenuBuilder extends ParametersMenuBuilder {
  11. public override createGroup(
  12. label: string,
  13. icon?: IconItem,
  14. children: MenuItems = [],
  15. actions: Array<MenuItem> = [],
  16. ): MenuGroup {
  17. return super.createGroup(label, icon, children, actions)
  18. }
  19. public override makeChildren(
  20. items: Array<{ pageName: string; icon?: string }>,
  21. ) {
  22. return super.makeChildren(items)
  23. }
  24. }
  25. let runtimeConfig: RuntimeConfig
  26. let ability: AnyAbility
  27. let organizationProfile: organizationState
  28. let accessProfile: AccessProfile
  29. let menuBuilder: TestableParametersMenuBuilder
  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 TestableParametersMenuBuilder(
  40. runtimeConfig,
  41. ability,
  42. organizationProfile,
  43. accessProfile,
  44. router,
  45. )
  46. })
  47. describe('getMenuName', () => {
  48. test('validate name', () => {
  49. expect(menuBuilder.getMenuName()).toEqual('Parameters')
  50. })
  51. })
  52. describe('build', () => {
  53. test('simple call', () => {
  54. // @ts-ignore
  55. menuBuilder.makeChildren = vi.fn((items) => {
  56. if (items.length !== 11) {
  57. throw new AssertionError()
  58. }
  59. return ['foo', 'bar']
  60. })
  61. // @ts-ignore
  62. menuBuilder.createGroup = vi.fn(() => {
  63. return { children: ['foo', 'bar'] }
  64. })
  65. const result = menuBuilder.build()
  66. expect(result).toEqual({ children: ['foo', 'bar'] })
  67. expect(menuBuilder.makeChildren).toHaveBeenCalledOnce()
  68. expect(menuBuilder.createGroup).toHaveBeenCalledOnce()
  69. })
  70. test('has no items', () => {
  71. // @ts-ignore
  72. menuBuilder.makeChildren = vi.fn((items) => {
  73. if (items.length !== 11) {
  74. throw new AssertionError()
  75. }
  76. return []
  77. })
  78. menuBuilder.createGroup = vi.fn()
  79. const result = menuBuilder.build()
  80. expect(result).toEqual(null)
  81. expect(menuBuilder.makeChildren).toHaveBeenCalledOnce()
  82. expect(menuBuilder.createGroup).toHaveBeenCalledTimes(0)
  83. })
  84. })