mirror of
https://github.com/supabase/supabase.git
synced 2026-05-10 10:50:18 -04:00
23c827bdda
- consolidate `top level menu` and `contextual menu` into nested menu on mobile - remove legacy mobile submenu
113 lines
4.1 KiB
TypeScript
113 lines
4.1 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { getSectionKeyFromPathname, resolveSectionDisplay } from './MobileMenuContent.utils'
|
|
|
|
describe('getSectionKeyFromPathname', () => {
|
|
it('returns section key for project section paths', () => {
|
|
expect(getSectionKeyFromPathname('/project/abc123/database/schemas')).toBe('database')
|
|
expect(getSectionKeyFromPathname('/project/abc123/auth/users')).toBe('auth')
|
|
expect(getSectionKeyFromPathname('/project/abc123/settings/general')).toBe('settings')
|
|
expect(getSectionKeyFromPathname('/project/abc123/integrations')).toBe('integrations')
|
|
expect(getSectionKeyFromPathname('/project/abc123/realtime/inspector')).toBe('realtime')
|
|
expect(getSectionKeyFromPathname('/project/abc123/functions')).toBe('functions')
|
|
expect(getSectionKeyFromPathname('/project/abc123/logs/explorer')).toBe('logs')
|
|
expect(getSectionKeyFromPathname('/project/abc123/advisors/security')).toBe('advisors')
|
|
})
|
|
|
|
it('returns null for project home (no section segment)', () => {
|
|
expect(getSectionKeyFromPathname('/project/abc123')).toBeNull()
|
|
expect(getSectionKeyFromPathname('/project/abc123/')).toBeNull()
|
|
})
|
|
|
|
it('returns null when pathname does not contain "project"', () => {
|
|
expect(getSectionKeyFromPathname('/org/my-org')).toBeNull()
|
|
expect(getSectionKeyFromPathname('/account/me')).toBeNull()
|
|
expect(getSectionKeyFromPathname('/')).toBeNull()
|
|
expect(getSectionKeyFromPathname('')).toBeNull()
|
|
})
|
|
|
|
it('returns null when project segment is missing or dynamic', () => {
|
|
expect(getSectionKeyFromPathname('/project')).toBeNull()
|
|
expect(getSectionKeyFromPathname('/project/')).toBeNull()
|
|
expect(getSectionKeyFromPathname('/project/[ref]/database/schemas')).toBeNull()
|
|
})
|
|
|
|
it('returns first segment after project ref as section key', () => {
|
|
expect(getSectionKeyFromPathname('/project/foo/bar/baz')).toBe('bar')
|
|
})
|
|
})
|
|
|
|
describe('resolveSectionDisplay', () => {
|
|
const routes = [
|
|
{ key: 'database', label: 'Database' },
|
|
{ key: 'auth', label: 'Authentication' },
|
|
{ key: 'settings', label: 'Settings' },
|
|
]
|
|
|
|
it('returns nulls when viewLevel is top', () => {
|
|
const result = resolveSectionDisplay({
|
|
viewLevel: 'top',
|
|
selectedSectionKey: 'database',
|
|
currentSectionKey: 'auth',
|
|
currentProduct: 'Authentication',
|
|
routes,
|
|
})
|
|
expect(result).toEqual({ sectionKey: null, sectionLabel: null })
|
|
})
|
|
|
|
it('uses selectedSectionKey when set', () => {
|
|
const result = resolveSectionDisplay({
|
|
viewLevel: 'section',
|
|
selectedSectionKey: 'database',
|
|
currentSectionKey: 'auth',
|
|
currentProduct: 'Authentication',
|
|
routes,
|
|
})
|
|
expect(result).toEqual({ sectionKey: 'database', sectionLabel: 'Database' })
|
|
})
|
|
|
|
it('falls back to currentSectionKey when selectedSectionKey is null', () => {
|
|
const result = resolveSectionDisplay({
|
|
viewLevel: 'section',
|
|
selectedSectionKey: null,
|
|
currentSectionKey: 'auth',
|
|
currentProduct: 'Authentication',
|
|
routes,
|
|
})
|
|
expect(result).toEqual({ sectionKey: 'auth', sectionLabel: 'Authentication' })
|
|
})
|
|
|
|
it('uses currentProduct as label when sectionKey matches currentSectionKey', () => {
|
|
const result = resolveSectionDisplay({
|
|
viewLevel: 'section',
|
|
selectedSectionKey: 'auth',
|
|
currentSectionKey: 'auth',
|
|
currentProduct: 'Auth Users',
|
|
routes,
|
|
})
|
|
expect(result).toEqual({ sectionKey: 'auth', sectionLabel: 'Auth Users' })
|
|
})
|
|
|
|
it('falls back to sectionKey itself when no matching route', () => {
|
|
const result = resolveSectionDisplay({
|
|
viewLevel: 'section',
|
|
selectedSectionKey: 'unknown',
|
|
currentSectionKey: null,
|
|
currentProduct: '',
|
|
routes,
|
|
})
|
|
expect(result).toEqual({ sectionKey: 'unknown', sectionLabel: 'unknown' })
|
|
})
|
|
|
|
it('returns nulls when in section view but both keys are null', () => {
|
|
const result = resolveSectionDisplay({
|
|
viewLevel: 'section',
|
|
selectedSectionKey: null,
|
|
currentSectionKey: null,
|
|
currentProduct: '',
|
|
routes,
|
|
})
|
|
expect(result).toEqual({ sectionKey: null, sectionLabel: null })
|
|
})
|
|
})
|