mirror of
https://github.com/supabase/supabase.git
synced 2026-10-09 11:25:06 +03:00
Extract the enable/disable-and-route decision out of useFeaturePreviewCommands into a pure resolveFeaturePreviewToggle util, and unit test every permutation: disabling, enabling with a route, enabling outside a project-scoped page, missing ref, and previews without a route.
98 lines
2.8 KiB
TypeScript
98 lines
2.8 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
|
|
import { resolveFeaturePreviewToggle } from '@/components/interfaces/App/CommandMenu/FeaturePreviews.utils'
|
|
|
|
describe('resolveFeaturePreviewToggle', () => {
|
|
it('returns disabled when the preview is being turned off', () => {
|
|
const preview = { getRoute: vi.fn(() => '/project/abc/explorer') }
|
|
|
|
const outcome = resolveFeaturePreviewToggle({
|
|
preview,
|
|
isEnabling: false,
|
|
pathname: '/project/[ref]/explorer',
|
|
ref: 'abc',
|
|
})
|
|
|
|
expect(outcome).toStrictEqual({ type: 'disabled' })
|
|
expect(preview.getRoute).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('returns disabled regardless of pathname/ref when turning off', () => {
|
|
const preview = { getRoute: () => '/project/abc/explorer' }
|
|
|
|
const outcome = resolveFeaturePreviewToggle({
|
|
preview,
|
|
isEnabling: false,
|
|
pathname: '/org/some-org',
|
|
ref: undefined,
|
|
})
|
|
|
|
expect(outcome).toStrictEqual({ type: 'disabled' })
|
|
})
|
|
|
|
it('returns a route when enabling on a project-scoped page with a ref', () => {
|
|
const preview = { getRoute: (ref?: string) => `/project/${ref}/explorer` }
|
|
|
|
const outcome = resolveFeaturePreviewToggle({
|
|
preview,
|
|
isEnabling: true,
|
|
pathname: '/project/[ref]/explorer',
|
|
ref: 'abc',
|
|
})
|
|
|
|
expect(outcome).toStrictEqual({ type: 'enabled', route: '/project/abc/explorer' })
|
|
})
|
|
|
|
it('does not route when enabling on a non-project-scoped page (e.g. org view)', () => {
|
|
const preview = { getRoute: (ref?: string) => `/project/${ref}/explorer` }
|
|
|
|
const outcome = resolveFeaturePreviewToggle({
|
|
preview,
|
|
isEnabling: true,
|
|
pathname: '/org/some-org',
|
|
ref: 'abc',
|
|
})
|
|
|
|
expect(outcome).toStrictEqual({ type: 'enabled' })
|
|
})
|
|
|
|
it('does not route when enabling with no ref, even on a project-scoped pathname', () => {
|
|
const preview = { getRoute: (ref?: string) => `/project/${ref}/explorer` }
|
|
|
|
const outcome = resolveFeaturePreviewToggle({
|
|
preview,
|
|
isEnabling: true,
|
|
pathname: '/project/[ref]/explorer',
|
|
ref: undefined,
|
|
})
|
|
|
|
expect(outcome).toStrictEqual({ type: 'enabled' })
|
|
})
|
|
|
|
it('does not route when the preview has no getRoute', () => {
|
|
const preview = {}
|
|
|
|
const outcome = resolveFeaturePreviewToggle({
|
|
preview,
|
|
isEnabling: true,
|
|
pathname: '/project/[ref]/explorer',
|
|
ref: 'abc',
|
|
})
|
|
|
|
expect(outcome).toStrictEqual({ type: 'enabled' })
|
|
})
|
|
|
|
it('does not route when getRoute returns undefined', () => {
|
|
const preview = { getRoute: () => undefined as unknown as string }
|
|
|
|
const outcome = resolveFeaturePreviewToggle({
|
|
preview,
|
|
isEnabling: true,
|
|
pathname: '/project/[ref]/explorer',
|
|
ref: 'abc',
|
|
})
|
|
|
|
expect(outcome).toStrictEqual({ type: 'enabled' })
|
|
})
|
|
})
|