Files
MyGoNavi/frontend/src/components/DataSyncWorkbench.test.tsx
Syngnat 21e0921b3b feat(data-sync/export): 支持同步与备份后台工作台
- 将数据同步及各级 SQL 备份统一迁入稳定工作区
- 全局保留任务状态、进度和结构化日志,关闭后可重新接回
- 支持从当前任务及历史记录打开 SQL 恢复工作台
- 锁定运行中配置并禁止后台任务分离到独立窗口
2026-07-20 13:43:58 +08:00

60 lines
1.8 KiB
TypeScript

import React from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import TestRenderer, { act } from 'react-test-renderer';
import { describe, expect, it, vi } from 'vitest';
import type { TabData } from '../types';
import DataSyncWorkbench from './DataSyncWorkbench';
const closeTab = vi.fn();
vi.mock('../store', () => ({
useStore: (selector: (state: { closeTab: typeof closeTab }) => unknown) =>
selector({ closeTab }),
}));
vi.mock('./DataSyncModal', () => ({
default: ({ embedded, entryMode, taskKey, onClose }: {
embedded?: boolean;
entryMode?: string;
taskKey?: string;
onClose: () => void;
}) => (
<button
type="button"
data-data-sync-modal="true"
data-embedded={embedded ? 'true' : 'false'}
data-entry-mode={entryMode}
data-task-key={taskKey}
onClick={onClose}
/>
),
}));
const tab: TabData = {
id: 'data-sync-workbench-schema-compare',
title: '表结构比对',
type: 'data-sync',
connectionId: '',
dataSyncEntryMode: 'schemaCompare',
};
describe('DataSyncWorkbench', () => {
it('renders the selected workflow as an embedded workbench and closes its tab', () => {
closeTab.mockReset();
const markup = renderToStaticMarkup(<DataSyncWorkbench tab={tab} />);
expect(markup).toContain('data-data-sync-workbench="true"');
expect(markup).toContain('data-embedded="true"');
expect(markup).toContain('data-entry-mode="schemaCompare"');
expect(markup).toContain('data-task-key="data-sync-workbench-schema-compare"');
const renderer = TestRenderer.create(<DataSyncWorkbench tab={tab} />);
act(() => {
renderer.root.findByProps({ 'data-data-sync-modal': 'true' }).props.onClick();
});
expect(closeTab).toHaveBeenCalledWith(tab.id);
});
});