mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-05-30 12:18:10 +00:00
114 lines
3.0 KiB
TypeScript
114 lines
3.0 KiB
TypeScript
/*
|
|
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
|
*
|
|
* Copyright (C) 2025 Tencent.
|
|
*/
|
|
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
|
import { defineComponent, h } from 'vue';
|
|
import { mount } from '@vue/test-utils';
|
|
|
|
import AddButton from '@editor/layouts/page-bar/AddButton.vue';
|
|
|
|
const editorService = {
|
|
get: vi.fn(),
|
|
add: vi.fn(),
|
|
};
|
|
|
|
const uiService = {
|
|
get: vi.fn(() => true),
|
|
};
|
|
|
|
vi.mock('@editor/hooks/use-services', () => ({
|
|
useServices: () => ({ editorService, uiService }),
|
|
}));
|
|
|
|
vi.mock('@editor/utils/editor', () => ({
|
|
generatePageNameByApp: vi.fn(() => 'page_xxx'),
|
|
}));
|
|
|
|
vi.mock('@tmagic/design', () => ({
|
|
TMagicPopover: defineComponent({
|
|
name: 'FakeTMagicPopover',
|
|
setup(_p, { slots }) {
|
|
return () => h('div', { class: 'fake-popover' }, [slots.reference?.(), slots.default?.()]);
|
|
},
|
|
}),
|
|
}));
|
|
|
|
vi.mock('@editor/components/Icon.vue', () => ({
|
|
default: defineComponent({
|
|
name: 'FakeIcon',
|
|
props: ['icon'],
|
|
setup() {
|
|
return () => h('i', { class: 'fake-icon' });
|
|
},
|
|
}),
|
|
}));
|
|
|
|
vi.mock('@editor/components/ToolButton.vue', () => ({
|
|
default: defineComponent({
|
|
name: 'FakeToolButton',
|
|
props: ['data'],
|
|
setup(props) {
|
|
return () =>
|
|
h(
|
|
'button',
|
|
{
|
|
class: 'tool-btn',
|
|
onClick: () => (props.data as any).handler?.(),
|
|
},
|
|
(props.data as any).text,
|
|
);
|
|
},
|
|
}),
|
|
}));
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
uiService.get.mockReturnValue(true);
|
|
});
|
|
|
|
describe('AddButton.vue', () => {
|
|
test('显示按钮渲染并支持新增页面', async () => {
|
|
editorService.get.mockReturnValue({ items: [] });
|
|
const wrapper = mount(AddButton);
|
|
const btns = wrapper.findAll('.tool-btn');
|
|
expect(btns.length).toBe(2);
|
|
await btns[0].trigger('click');
|
|
expect(editorService.add).toHaveBeenCalled();
|
|
const args = editorService.add.mock.calls[0][0];
|
|
expect(args.type).toBe('page');
|
|
expect(args.name).toBe('page_xxx');
|
|
});
|
|
|
|
test('点击新增页面片', async () => {
|
|
editorService.get.mockReturnValue({ items: [] });
|
|
const wrapper = mount(AddButton);
|
|
const btns = wrapper.findAll('.tool-btn');
|
|
await btns[1].trigger('click');
|
|
const args = editorService.add.mock.calls[0][0];
|
|
expect(args.type).toBe('page-fragment');
|
|
});
|
|
|
|
test('root 不存在抛错且 add 不会被调用', async () => {
|
|
editorService.get.mockReturnValue(null);
|
|
const errorHandler = vi.fn();
|
|
const wrapper = mount(AddButton, {
|
|
global: {
|
|
config: {
|
|
errorHandler,
|
|
},
|
|
},
|
|
});
|
|
await wrapper.findAll('.tool-btn')[0].trigger('click');
|
|
expect(errorHandler).toHaveBeenCalled();
|
|
expect(editorService.add).not.toHaveBeenCalled();
|
|
});
|
|
|
|
test('showAddPageButton 为 false 时不渲染按钮', () => {
|
|
uiService.get.mockReturnValue(false);
|
|
const wrapper = mount(AddButton);
|
|
expect(wrapper.find('.tool-btn').exists()).toBe(false);
|
|
});
|
|
});
|