mirror of
https://github.com/supabase/supabase.git
synced 2026-05-08 01:40:13 -04:00
23c827bdda
- consolidate `top level menu` and `contextual menu` into nested menu on mobile - remove legacy mobile submenu
91 lines
2.3 KiB
TypeScript
91 lines
2.3 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import { convertSectionsToProductMenu } from './SubMenu.utils'
|
|
|
|
describe('convertSectionsToProductMenu', () => {
|
|
it('converts sections with heading and links to ProductMenuGroup format', () => {
|
|
const sections = [
|
|
{
|
|
key: 'configuration',
|
|
heading: 'Configuration',
|
|
links: [
|
|
{ key: 'general', label: 'General', href: '/org/foo/general' },
|
|
{ key: 'security', label: 'Security', href: '/org/foo/security' },
|
|
],
|
|
},
|
|
]
|
|
|
|
const result = convertSectionsToProductMenu(sections)
|
|
|
|
expect(result).toEqual([
|
|
{
|
|
key: 'configuration',
|
|
title: 'Configuration',
|
|
items: [
|
|
{ key: 'general', name: 'General', url: '/org/foo/general' },
|
|
{ key: 'security', name: 'Security', url: '/org/foo/security' },
|
|
],
|
|
},
|
|
])
|
|
})
|
|
|
|
it('uses # for undefined href', () => {
|
|
const sections = [
|
|
{
|
|
key: 'config',
|
|
links: [{ key: 'item', label: 'Item' }],
|
|
},
|
|
]
|
|
|
|
const result = convertSectionsToProductMenu(sections)
|
|
|
|
expect(result[0].items[0].url).toBe('#')
|
|
})
|
|
|
|
it('handles empty sections array', () => {
|
|
const result = convertSectionsToProductMenu([])
|
|
expect(result).toEqual([])
|
|
})
|
|
|
|
it('handles section with empty links', () => {
|
|
const sections = [
|
|
{
|
|
key: 'empty',
|
|
heading: 'Empty',
|
|
links: [],
|
|
},
|
|
]
|
|
|
|
const result = convertSectionsToProductMenu(sections)
|
|
|
|
expect(result).toEqual([{ key: 'empty', title: 'Empty', items: [] }])
|
|
})
|
|
|
|
it('handles section without heading', () => {
|
|
const sections = [
|
|
{
|
|
key: 'no-heading',
|
|
links: [{ key: 'a', label: 'A', href: '/a' }],
|
|
},
|
|
]
|
|
|
|
const result = convertSectionsToProductMenu(sections)
|
|
|
|
expect(result[0].title).toBeUndefined()
|
|
expect(result[0].items).toHaveLength(1)
|
|
})
|
|
|
|
it('converts multiple sections', () => {
|
|
const sections = [
|
|
{ key: 'a', heading: 'A', links: [{ key: 'a1', label: 'A1', href: '/a1' }] },
|
|
{ key: 'b', heading: 'B', links: [{ key: 'b1', label: 'B1', href: '/b1' }] },
|
|
]
|
|
|
|
const result = convertSectionsToProductMenu(sections)
|
|
|
|
expect(result).toHaveLength(2)
|
|
expect(result[0].key).toBe('a')
|
|
expect(result[1].key).toBe('b')
|
|
})
|
|
})
|