import { describe, expect, it, vi } from 'vitest' import { DynamicConfig } from '../../../../components/form/dynamic' import { VueCronConfig } from '../../../../components/form/VueCron' import { InfoCronConfig } from '../../../../components/form/infoCron' describe('components/form 动态与 cron 配置类', () => { it('DynamicConfig 提供默认值、翻译索引文案与参数覆写', () => { const rule = vi.fn(() => [{ type: 'infoInput', model: 'name', label: '名称' }]) const noOper = vi.fn(() => true) const hiddenAdd = vi.fn(() => true) const hiddenRemove = vi.fn(() => true) const showAddAll = vi.fn(() => true) const config = new DynamicConfig({ model: 'rows', label: '动态表单', height: '400px', tableSize: 'small', showIndex: true, indexLabel: '自定义序号', indexWidth: 80, rule, noOper, showUpload: true, pagination: true, isSplit: true, isDrop: true, hiddenAdd, hiddenRemove, showAddAll }) expect(new DynamicConfig({ model: 'rows', label: '动态表单' }).indexLabel).toBe('tableIndex') expect(config.type).toBe('infoDynamic') expect(config.height).toBe('400px') expect(config.tableSize).toBe('small') expect(config.showIndex).toBe(true) expect(config.indexLabel).toBe('自定义序号') expect(config.indexWidth).toBe(80) expect(config.rule()).toEqual([{ type: 'infoInput', model: 'name', label: '名称' }]) expect(config.noOper()).toBe(true) expect(config.showUpload).toBe(true) expect(config.pagination).toBe(true) expect(config.isSplit).toBe(true) expect(config.isDrop).toBe(true) expect(config.hiddenAdd()).toBe(true) expect(config.hiddenRemove()).toBe(true) expect(config.showAddAll()).toBe(true) }) it('VueCronConfig 提供默认值、默认函数与参数覆写', () => { const placeholder = vi.fn(() => 'cronPlaceholder') const disabled = vi.fn(() => false) const methods = vi.fn() const config = new VueCronConfig({ model: 'cron', label: 'Cron', placement: 'bottom', teleported: false, placeholder, disabled, methods }) expect(config.type).toBe('infoVueCron') expect(config.placement).toBe('bottom') expect(config.teleported).toBe(false) expect(config.placeholder()).toBe('cronPlaceholder') expect(config.disabled()).toBe(false) expect(config.methods()).toBeUndefined() }) it('InfoCronConfig 与映射键保持一致并保留原有方法行为', () => { const disabled = vi.fn(() => true) const methods = vi.fn() const config = new InfoCronConfig({ model: 'cron', label: 'Cron', placement: 'top', disabled, methods }) expect(config.type).toBe('infoCron') expect(config.model).toBe('cron') expect(config.label).toBe('Cron') expect(config.placement).toBe('top') expect(config.disabled()).toBe(true) expect(config.methods()).toBeUndefined() }) })