| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import { describe, expect, it } from 'vitest'
- import { getActiveKey, toSubMenuSections } from './AccountLayout.utils'
- describe('toSubMenuSections', () => {
- it('converts sections to SubMenuSection format', () => {
- const sections = [
- {
- key: 'account-settings',
- heading: 'Account Settings',
- links: [
- { key: 'preferences', label: 'Preferences', href: '/account/me', isActive: true },
- {
- key: 'access-tokens',
- label: 'Access Tokens',
- href: '/account/tokens',
- isActive: false,
- },
- ],
- },
- ]
- const result = toSubMenuSections(sections)
- expect(result).toHaveLength(1)
- expect(result[0]).toEqual({
- key: 'account-settings',
- heading: 'Account Settings',
- links: [
- { key: 'preferences', label: 'Preferences', href: '/account/me' },
- { key: 'access-tokens', label: 'Access Tokens', href: '/account/tokens' },
- ],
- })
- })
- it('returns empty array for non-array input', () => {
- expect(toSubMenuSections(null as any)).toEqual([])
- expect(toSubMenuSections(undefined as any)).toEqual([])
- })
- it('filters out invalid links', () => {
- const sections = [
- {
- key: 's1',
- links: [
- { key: 'a', label: 'A', href: '/a' },
- null,
- { key: '', label: 'B', href: '/b' },
- { key: 'c', label: null, href: '/c' } as any,
- ],
- },
- ]
- const result = toSubMenuSections(sections)
- expect(result[0].links).toHaveLength(1)
- expect(result[0].links[0]).toEqual({ key: 'a', label: 'A', href: '/a' })
- })
- it('handles missing optional fields', () => {
- const sections = [{ key: 's1', links: [{ key: 'a', label: 'A' }] }]
- const result = toSubMenuSections(sections)
- expect(result[0].links[0].href).toBeUndefined()
- expect(result[0].heading).toBeUndefined()
- })
- })
- describe('getActiveKey', () => {
- it('returns key of first active link', () => {
- const sections = [
- {
- key: 's1',
- links: [
- { key: 'a', label: 'A', isActive: false },
- { key: 'b', label: 'B', isActive: true },
- ],
- },
- ]
- expect(getActiveKey(sections)).toBe('b')
- })
- it('returns first active across sections', () => {
- const sections = [
- { key: 's1', links: [{ key: 'a', label: 'A', isActive: false }] },
- { key: 's2', links: [{ key: 'b', label: 'B', isActive: true }] },
- ]
- expect(getActiveKey(sections)).toBe('b')
- })
- it('returns undefined when no active link', () => {
- const sections = [{ key: 's1', links: [{ key: 'a', label: 'A', isActive: false }] }]
- expect(getActiveKey(sections)).toBeUndefined()
- })
- it('returns undefined for invalid input', () => {
- expect(getActiveKey(null as any)).toBeUndefined()
- expect(getActiveKey(undefined as any)).toBeUndefined()
- expect(getActiveKey([])).toBeUndefined()
- })
- it('handles missing links array', () => {
- const sections = [{ key: 's1', links: undefined }]
- expect(getActiveKey(sections as any)).toBeUndefined()
- })
- })
|