import { reactive } from 'vue' import { describe, expect, it, vi, beforeEach } from 'vitest' import { InitDialog } from '../../../hooks/InitDialog' describe('InitDialog', () => { class AddFormMock { id?: string name = '' nested = { enabled: false } } let modelData: { [key: string]: any } let dialogConfig: { [key: string]: any } let addOrEditTable: ReturnType let initDialog: InitDialog beforeEach(() => { modelData = reactive(new AddFormMock()) dialogConfig = reactive({ title: '', isShowDialog: false }) addOrEditTable = vi.fn() initDialog = new InitDialog({ addText: '新增', editText: '编辑', modelData, dialogConfig, addOrEditTable, AddFrom: AddFormMock }) }) it('新增态 showDialog 会重置表单并显示弹窗', () => { modelData.id = 'temp-id' modelData.name = '旧数据' modelData.nested.enabled = true initDialog.showDialog({}) expect(dialogConfig.title).toBe('新增') expect(dialogConfig.isShowDialog).toBe(true) expect(modelData).toEqual({ name: '', nested: { enabled: false } }) }) it('编辑态 showDialog 会回填数据并显示弹窗', () => { initDialog.showDialog({ id: '1', name: '编辑数据', nested: { enabled: true } }) expect(dialogConfig.title).toBe('编辑') expect(dialogConfig.isShowDialog).toBe(true) expect(modelData).toEqual({ id: '1', name: '编辑数据', nested: { enabled: true } }) }) it('closeDialog 会重置表单并关闭弹窗', () => { initDialog.showDialog({ id: '1', name: '编辑数据', nested: { enabled: true } }) initDialog.closeDialog() expect(dialogConfig.isShowDialog).toBe(false) expect(modelData).toEqual({ name: '', nested: { enabled: false } }) }) it('多次打开和关闭后仍会按场景正确重置表单', () => { initDialog.showDialog({ id: '1', name: '第一次编辑', nested: { enabled: true } }) initDialog.closeDialog() initDialog.showDialog({}) expect(dialogConfig.title).toBe('新增') expect(modelData).toEqual({ name: '', nested: { enabled: false } }) }) it('confirmDialog 校验通过时会调用 addOrEditTable', () => { initDialog.formRef.value = { validate: (callback: (valid: boolean) => void) => callback(true) } initDialog.confirmDialog() expect(addOrEditTable).toHaveBeenCalledTimes(1) }) it('confirmDialog 校验失败时不会调用 addOrEditTable', () => { initDialog.formRef.value = { validate: (callback: (valid: boolean) => void) => callback(false) } initDialog.confirmDialog() expect(addOrEditTable).not.toHaveBeenCalled() }) })