parametersMenuBuilder.test.ts 2.7 KB

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