126 lines
3.1 KiB
TypeScript
126 lines
3.1 KiB
TypeScript
/* @vitest-environment happy-dom */
|
|
|
|
/* eslint-disable vue/one-component-per-file */
|
|
|
|
import { mount } from '@vue/test-utils';
|
|
import { defineComponent, h } from 'vue';
|
|
|
|
import QqBotPluginTaskList from '@test-source/apps/web-antdv-next/src/views/qqbot/plugin-task/list';
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
import { isSupportedAdminMenuName } from '#/api/core/menu';
|
|
import routes from '#/router/routes/modules/qqbot';
|
|
|
|
vi.mock('#/api/request', () => ({
|
|
requestClient: {
|
|
get: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
vi.mock('@vben/common-ui', () => ({
|
|
Page: defineComponent({
|
|
name: 'MockPage',
|
|
setup(_, { slots }) {
|
|
return () => h('main', slots.default?.());
|
|
},
|
|
}),
|
|
}));
|
|
|
|
vi.mock('antdv-next', () => ({
|
|
Alert: defineComponent({
|
|
name: 'MockAlert',
|
|
setup() {
|
|
return () => h('div');
|
|
},
|
|
}),
|
|
Drawer: defineComponent({
|
|
name: 'MockDrawer',
|
|
setup(_, { slots }) {
|
|
return () => h('aside', slots.default?.());
|
|
},
|
|
}),
|
|
Input: defineComponent({
|
|
name: 'MockInput',
|
|
setup() {
|
|
return () => h('input');
|
|
},
|
|
}),
|
|
Modal: defineComponent({
|
|
name: 'MockModal',
|
|
setup(_, { slots }) {
|
|
return () => h('div', slots.default?.());
|
|
},
|
|
}),
|
|
RadioButton: defineComponent({
|
|
name: 'MockRadioButton',
|
|
setup(_, { slots }) {
|
|
return () => h('button', slots.default?.());
|
|
},
|
|
}),
|
|
RadioGroup: defineComponent({
|
|
name: 'MockRadioGroup',
|
|
setup(_, { slots }) {
|
|
return () => h('div', slots.default?.());
|
|
},
|
|
}),
|
|
Space: defineComponent({
|
|
name: 'MockSpace',
|
|
setup(_, { slots }) {
|
|
return () => h('div', slots.default?.());
|
|
},
|
|
}),
|
|
Tag: defineComponent({
|
|
name: 'MockTag',
|
|
setup(_, { slots }) {
|
|
return () => h('span', slots.default?.());
|
|
},
|
|
}),
|
|
message: {
|
|
success: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
vi.mock('#/components/ktTable', () => ({
|
|
KtTable: defineComponent({
|
|
name: 'KtTable',
|
|
setup() {
|
|
return () => h('section', { 'data-testid': 'plugin-task-table' });
|
|
},
|
|
}),
|
|
useKtTable: vi.fn(() => [vi.fn(), { reload: vi.fn() }]),
|
|
}));
|
|
|
|
vi.mock('#/api/qqbot/plugin-task', () => ({
|
|
disableQqbotPluginTask: vi.fn(),
|
|
enableQqbotPluginTask: vi.fn(),
|
|
getQqbotPluginTaskPage: vi.fn(async () => ({ list: [], total: 0 })),
|
|
getQqbotPluginTaskRunPage: vi.fn(async () => ({ list: [], total: 0 })),
|
|
runQqbotPluginTaskOnce: vi.fn(),
|
|
updateQqbotPluginTaskCron: vi.fn(),
|
|
}));
|
|
|
|
describe('qqbot plugin task page', () => {
|
|
it('renders a single route root and task table shell', () => {
|
|
const wrapper = mount(QqBotPluginTaskList);
|
|
|
|
expect(wrapper.exists()).toBe(true);
|
|
expect(wrapper.element.nodeType).toBe(Node.ELEMENT_NODE);
|
|
expect(wrapper.find('[data-testid="plugin-task-table"]').exists()).toBe(
|
|
true,
|
|
);
|
|
});
|
|
|
|
it('registers a supported QQBot plugin task route', () => {
|
|
const qqbotRoute = routes.find((route) => route.name === 'QqBot');
|
|
expect(qqbotRoute?.children).toEqual(
|
|
expect.arrayContaining([
|
|
expect.objectContaining({
|
|
name: 'QqBotPluginTask',
|
|
path: '/qqbot/plugin-task',
|
|
}),
|
|
]),
|
|
);
|
|
expect(isSupportedAdminMenuName('QqBotPluginTask')).toBe(true);
|
|
});
|
|
});
|