import { describe, expect, it } from 'vitest' import { FormConfig } from '../../../../components/form/formConfig' import { InputConfig } from '../../../../components/form/input' import { AddFormConfig } from '../../../../components/form/addForm' describe('components/form/FormConfig', () => { it('初始化默认值并允许参数覆写', () => { const validate = { name: [{ required: true, message: 'required' }] } const disabled = () => true const formConfig = new FormConfig({ ref: 'ruleForm', size: 'default', labelWidth: '80px', inline: true, validate, disabled, labelPosition: 'right' }) expect(formConfig.rule).toEqual([]) expect(formConfig.size).toBe('default') expect(formConfig.labelWidth).toBe('80px') expect(formConfig.inline).toBe(true) expect(formConfig.validate).toBe(validate) expect(formConfig.disabled).toBe(disabled) expect(formConfig.labelPosition).toBe('right') expect(formConfig.labelI18n).toBe(false) expect(formConfig.tipsI18n).toBe(false) }) it('disabled 默认返回 false', () => { const formConfig = new FormConfig({}) expect(formConfig.disabled()).toBe(false) }) it('setRule 会根据 type 构造配置类实例', () => { const formConfig = new FormConfig({}) formConfig.setRule({ type: 'infoInput', model: 'keyword', label: '关键字', clearable: true }) expect(formConfig.rule).toHaveLength(1) expect(formConfig.rule[0]).toBeInstanceOf(InputConfig) expect(formConfig.rule[0]).toMatchObject({ type: 'infoInput', model: 'keyword', label: '关键字', clearable: true }) }) it('setRule 对 infoSlot 直接保留原对象', () => { const formConfig = new FormConfig({}) const slotRule = { type: 'infoSlot', model: 'slotModel', label: '插槽' } formConfig.setRule(slotRule) expect(formConfig.rule).toHaveLength(1) expect(formConfig.rule[0]).toBe(slotRule) }) it('setAddFormRule 返回实例本身并追加 AddFormConfig', () => { const formConfig = new FormConfig({}) const result = formConfig.setAddFormRule({ type: 'infoAddForm', model: 'list', label: '子表单' }) expect(result).toBe(formConfig) expect(formConfig.rule).toHaveLength(1) expect(formConfig.rule[0]).toBeInstanceOf(AddFormConfig) expect(formConfig.rule[0]).toMatchObject({ type: 'infoAddForm', model: 'list', label: '子表单' }) }) })