| import { describe, it, expect, vi, beforeEach } from 'vitest' |
| import { mount } from '@vue/test-utils' |
| import ImportDataModal from '@/components/admin/proxy/ImportDataModal.vue' |
|
|
| const showError = vi.fn() |
| const showSuccess = vi.fn() |
|
|
| vi.mock('@/stores/app', () => ({ |
| useAppStore: () => ({ |
| showError, |
| showSuccess |
| }) |
| })) |
|
|
| vi.mock('@/api/admin', () => ({ |
| adminAPI: { |
| proxies: { |
| importData: vi.fn() |
| } |
| } |
| })) |
|
|
| vi.mock('vue-i18n', () => ({ |
| useI18n: () => ({ |
| t: (key: string) => key |
| }) |
| })) |
|
|
| describe('Proxy ImportDataModal', () => { |
| beforeEach(() => { |
| showError.mockReset() |
| showSuccess.mockReset() |
| }) |
|
|
| it('未选择文件时提示错误', async () => { |
| const wrapper = mount(ImportDataModal, { |
| props: { show: true }, |
| global: { |
| stubs: { |
| BaseDialog: { template: '<div><slot /><slot name="footer" /></div>' } |
| } |
| } |
| }) |
|
|
| await wrapper.find('form').trigger('submit') |
| expect(showError).toHaveBeenCalledWith('admin.proxies.dataImportSelectFile') |
| }) |
|
|
| it('无效 JSON 时提示解析失败', async () => { |
| const wrapper = mount(ImportDataModal, { |
| props: { show: true }, |
| global: { |
| stubs: { |
| BaseDialog: { template: '<div><slot /><slot name="footer" /></div>' } |
| } |
| } |
| }) |
|
|
| const input = wrapper.find('input[type="file"]') |
| const file = new File(['invalid json'], 'data.json', { type: 'application/json' }) |
| Object.defineProperty(file, 'text', { |
| value: () => Promise.resolve('invalid json') |
| }) |
| Object.defineProperty(input.element, 'files', { |
| value: [file] |
| }) |
|
|
| await input.trigger('change') |
| await wrapper.find('form').trigger('submit') |
| await Promise.resolve() |
|
|
| expect(showError).toHaveBeenCalledWith('admin.proxies.dataImportParseFailed') |
| }) |
| }) |
|
|