SettingsMenu.utils.test.tsx 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { renderHook } from '@testing-library/react'
  2. import { useFlag } from 'common'
  3. import { describe, expect, it, vi } from 'vitest'
  4. import { useGenerateSettingsMenu } from './SettingsMenu.utils'
  5. import { useIsPlatformWebhooksEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
  6. vi.mock('@/lib/constants', async () => {
  7. const actual = await vi.importActual<Record<string, unknown>>('@/lib/constants')
  8. return {
  9. ...actual,
  10. IS_PLATFORM: true,
  11. }
  12. })
  13. vi.mock('common', () => ({
  14. useFlag: vi.fn().mockReturnValue(false),
  15. useParams: vi.fn().mockReturnValue({ ref: 'project-ref' }),
  16. }))
  17. vi.mock('@/hooks/misc/useSelectedOrganization', () => ({
  18. useSelectedOrganizationQuery: vi.fn().mockReturnValue({ data: { slug: 'my-org' } }),
  19. }))
  20. vi.mock('@/hooks/misc/useSelectedProject', () => ({
  21. useSelectedProjectQuery: vi.fn().mockReturnValue({ data: { status: 'ACTIVE_HEALTHY' } }),
  22. }))
  23. vi.mock('@/hooks/misc/useIsFeatureEnabled', () => ({
  24. useIsFeatureEnabled: vi
  25. .fn()
  26. .mockReturnValue({ projectSettingsLegacyJwtKeys: false, billingAll: true }),
  27. }))
  28. vi.mock('@/components/interfaces/App/FeaturePreview/FeaturePreviewContext', () => ({
  29. useIsPlatformWebhooksEnabled: vi.fn().mockReturnValue(true),
  30. }))
  31. describe('useGenerateSettingsMenu', () => {
  32. it('includes webhooks when platformWebhooks feature is enabled', () => {
  33. vi.mocked(useIsPlatformWebhooksEnabled).mockReturnValue(true)
  34. const { result } = renderHook(() => useGenerateSettingsMenu())
  35. const configurationGroup = result.current.find((group) => group.title === 'Configuration')
  36. const hasWebhooks = configurationGroup?.items.some(
  37. (item) => item.name === 'Webhooks' && item.url === '/project/project-ref/settings/webhooks'
  38. )
  39. expect(hasWebhooks).toBe(true)
  40. })
  41. it('hides webhooks when platformWebhooks feature is disabled', () => {
  42. vi.mocked(useIsPlatformWebhooksEnabled).mockReturnValue(false)
  43. const { result } = renderHook(() => useGenerateSettingsMenu())
  44. const configurationGroup = result.current.find((group) => group.title === 'Configuration')
  45. const hasWebhooks = configurationGroup?.items.some((item) => item.name === 'Webhooks')
  46. expect(hasWebhooks).toBe(false)
  47. })
  48. it('does not include members link in project settings navigation', () => {
  49. const { result } = renderHook(() => useGenerateSettingsMenu())
  50. const configurationGroup = result.current.find((group) => group.title === 'Configuration')
  51. const hasMembers = configurationGroup?.items.some((item) => item.name === 'Members')
  52. expect(hasMembers).toBe(false)
  53. })
  54. it('includes dashboard in configuration when flag is enabled', () => {
  55. vi.mocked(useFlag).mockReturnValue(true)
  56. const { result } = renderHook(() => useGenerateSettingsMenu())
  57. const configurationGroup = result.current.find((group) => group.title === 'Configuration')
  58. const hasDashboardPreferences = configurationGroup?.items.some(
  59. (item) => item.name === 'Dashboard' && item.url === '/project/project-ref/settings/dashboard'
  60. )
  61. expect(hasDashboardPreferences).toBe(true)
  62. expect(result.current.find((group) => group.title === 'Preferences')).toBeUndefined()
  63. })
  64. it('hides dashboard in configuration when flag is disabled', () => {
  65. vi.mocked(useFlag).mockReturnValue(false)
  66. const { result } = renderHook(() => useGenerateSettingsMenu())
  67. const configurationGroup = result.current.find((group) => group.title === 'Configuration')
  68. expect(configurationGroup?.items.some((item) => item.name === 'Dashboard')).toBe(false)
  69. })
  70. })