/* @vitest-environment happy-dom */
|
|
import { flushPromises, mount } from '@vue/test-utils';
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import routesSource from '../../../../../router/routes/basic.ts?raw';
|
import SourcePathPage from '../index.vue';
|
import pageSource from '../index.vue?raw';
|
|
const apiMocks = vi.hoisted(() => ({ getSourcePaths: vi.fn() }));
|
const drawerMocks = vi.hoisted(() => ({ openDrawer: vi.fn() }));
|
|
vi.mock('#/api/x/eln/sources', () => apiMocks);
|
vi.mock('@jnpf/ui/drawer', () => ({ useDrawer: () => [vi.fn(), { openDrawer: drawerMocks.openDrawer }] }));
|
vi.mock('@jnpf/ui/form', () => ({
|
BasicForm: { name: 'BasicForm', template: '<form />' },
|
useForm: () => [vi.fn(), { getFieldsValue: vi.fn(() => ({})), resetFields: vi.fn() }],
|
}));
|
vi.mock('@jnpf/ui/vxeTable', () => ({
|
BasicVxeTable: {
|
name: 'BasicVxeTable',
|
props: { dataSource: { default: () => [], type: Array } },
|
template:
|
'<div><slot name="tableTitle" /><div v-for="record in dataSource" :key="record.id"><span>{{ record.displayName }}</span><span>{{ record.path }}</span><slot name="status" :record="record" /></div></div>',
|
},
|
useVxeTable: () => [vi.fn(), { setLoading: vi.fn() }],
|
}));
|
vi.mock('../SourcePathDrawer.vue', () => ({
|
default: { emits: ['success'], name: 'SourcePathDrawer', template: '<aside data-test="source-path-drawer" />' },
|
}));
|
|
const path = {
|
code: 'request',
|
displayName: '所属请验单',
|
editVersion: 1,
|
id: 'path-1',
|
outputs: [],
|
path: '检验项 > 请验单 > 生产日期',
|
revision: 1,
|
scope: '全部检验项',
|
status: 'PUBLISHED',
|
};
|
|
function mountPage() {
|
return mount(SourcePathPage, {
|
global: {
|
stubs: {
|
'a-alert': { template: '<div><slot /><slot name="action" /></div>' },
|
'a-button': { emits: ['click'], template: '<button @click="$emit(\'click\')"><slot /></button>' },
|
'a-tag': { template: '<span><slot /></span>' },
|
},
|
},
|
});
|
}
|
|
describe('来源路径管理页面', () => {
|
beforeEach(() => {
|
vi.clearAllMocks();
|
apiMocks.getSourcePaths.mockResolvedValue({ data: [path] });
|
});
|
|
it('使用标准列表结构独立加载来源路径', async () => {
|
const wrapper = mountPage();
|
await flushPromises();
|
|
expect(apiMocks.getSourcePaths).toHaveBeenCalledTimes(1);
|
expect(wrapper.text()).toContain('所属请验单');
|
expect(pageSource).toContain('jnpf-content-wrapper-search-box');
|
expect(pageSource).toContain('jnpf-content-wrapper-content');
|
expect(pageSource).toContain('<BasicVxeTable');
|
});
|
|
it('新增成功后刷新列表', async () => {
|
const wrapper = mountPage();
|
await flushPromises();
|
|
await wrapper.get('[data-test="new-source-path"]').trigger('click');
|
expect(drawerMocks.openDrawer).toHaveBeenCalledWith(true);
|
|
wrapper.findComponent({ name: 'SourcePathDrawer' }).vm.$emit('success');
|
await flushPromises();
|
expect(apiMocks.getSourcePaths).toHaveBeenCalledTimes(2);
|
});
|
|
it('注册独立隐藏路由', () => {
|
expect(routesSource).toContain("path: '/eln/source-paths'");
|
expect(routesSource).toContain("name: 'elnSourcePaths'");
|
expect(routesSource).toContain("title: '来源路径管理'");
|
});
|
});
|