parametersMenuBuilder.test.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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(items: Array<{ pageName: string; icon?: string }>) {
  20. return super.makeChildren(items)
  21. }
  22. }
  23. let runtimeConfig: RuntimeConfig
  24. let ability: AnyAbility
  25. let organizationProfile: organizationState
  26. let accessProfile: AccessProfile
  27. let menuBuilder: TestableParametersMenuBuilder
  28. let router: Router
  29. beforeEach(() => {
  30. runtimeConfig = vi.fn() as any as RuntimeConfig
  31. ability = vi.fn() as any as AnyAbility
  32. organizationProfile = vi.fn() as any as organizationState
  33. accessProfile = vi.fn() as any as AccessProfile
  34. // @ts-ignore
  35. router = vi.fn() as Router
  36. runtimeConfig.baseUrlAdminLegacy = 'https://mydomain.com/'
  37. menuBuilder = new TestableParametersMenuBuilder(
  38. runtimeConfig,
  39. ability,
  40. organizationProfile,
  41. accessProfile,
  42. router,
  43. )
  44. })
  45. describe('getMenuName', () => {
  46. test('validate name', () => {
  47. expect(menuBuilder.getMenuName()).toEqual('Parameters')
  48. })
  49. })
  50. describe('build', () => {
  51. test('simple call', () => {
  52. // @ts-ignore
  53. menuBuilder.makeChildren = vi.fn((items) => {
  54. if (items.length !== 11) {
  55. throw new AssertionError()
  56. }
  57. return ['foo', 'bar']
  58. })
  59. // @ts-ignore
  60. menuBuilder.createGroup = vi.fn(() => {
  61. return { children: ['foo', 'bar'] }
  62. })
  63. const result = menuBuilder.build()
  64. expect(result).toEqual({ children: ['foo', 'bar'] })
  65. expect(menuBuilder.makeChildren).toHaveBeenCalledOnce()
  66. expect(menuBuilder.createGroup).toHaveBeenCalledOnce()
  67. })
  68. test('has no items', () => {
  69. // @ts-ignore
  70. menuBuilder.makeChildren = vi.fn((items) => {
  71. if (items.length !== 11) {
  72. throw new AssertionError()
  73. }
  74. return []
  75. })
  76. menuBuilder.createGroup = vi.fn()
  77. const result = menuBuilder.build()
  78. expect(result).toEqual(null)
  79. expect(menuBuilder.makeChildren).toHaveBeenCalledOnce()
  80. expect(menuBuilder.createGroup).toHaveBeenCalledTimes(0)
  81. })
  82. })