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, ]) }) })