import { describe, expect, it } from 'vitest'
import type { SettingsModalSchema, SettingsTabInput } from '../../types'
import {
APPEARANCE_TAB,
buildFlatSettingsSchema,
buildSettingsTabs,
filterSettingsSchemaByAccess,
normalizeVisibleSettingsTabs,
settingsGroupToTab,
} from '../../components/SettingsModal.schema'
describe('SettingsModal schema helpers', () => {
const schema: SettingsModalSchema = {
groups: [
{
id: 'general',
label: 'General',
description: 'Shared settings',
icon: '',
fields: [
{ name: 'title', label: 'Title', type: 'text' },
{ name: 'adminOnly', label: 'Admin Only', type: 'text', access: { requiresAdmin: true } },
],
columns: 2,
},
{
id: 'hidden',
label: 'Hidden',
access: { requiresAdmin: true },
fields: [
{ name: 'secret', label: 'Secret', type: 'text' },
],
},
],
}
it('builds flat form sections from settings groups', () => {
expect(buildFlatSettingsSchema(schema)).toEqual({
sections: [
{
id: 'general',
title: '',
fields: schema.groups[0].fields,
columns: 2,
condition: undefined,
},
{
id: 'hidden',
title: '',
fields: schema.groups[1].fields,
columns: undefined,
condition: undefined,
},
],
})
})
it('filters groups and fields with the caller access policy', () => {
const filtered = filterSettingsSchemaByAccess(
schema,
(item) => !item.access?.requiresAdmin
)
expect(filtered.groups).toHaveLength(1)
expect(filtered.groups[0].id).toBe('general')
expect(filtered.groups[0].fields.map(field => field.name)).toEqual(['title'])
})
it('maps visible schema groups to tabs', () => {
expect(settingsGroupToTab(schema.groups[0])).toEqual({
id: 'general',
label: 'General',
description: 'Shared settings',
icon: '',
})
})
it('normalizes manual tabs before access filtering', () => {
const tabs: SettingsTabInput[] = [
'General',
{ id: 'admin', label: 'Admin', access: { requiresAdmin: true } },
]
expect(
normalizeVisibleSettingsTabs(tabs, (item) => !item.access?.requiresAdmin)
).toEqual([
{ id: 'General', label: 'General' },
])
})
it('appends the appearance tab when enabled', () => {
expect(buildSettingsTabs([{ id: 'general', label: 'General' }], true)).toEqual([
{ id: 'general', label: 'General' },
APPEARANCE_TAB,
])
})
})