/* @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); }); });