mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-22 21:27:11 +08:00
- 新增表级导出工作台标签页,统一承载导出范围、格式和 XLSX sheet 行数配置 - 结果集、表概览、侧栏和右键菜单统一接入导出工作台与带进度的导出入口 - 导出进度改为事件驱动,未知总数时展示不定进度和实时已写入行数 - 持久化每张表的导出历史并复用同一导出标签,重启后仍可查看最近任务 - 调整导出页签标题、状态胶囊和历史列表,补充工作台与状态流测试覆盖
38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
import { readFileSync } from 'node:fs';
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
const source = readFileSync(new URL('./Sidebar.tsx', import.meta.url), 'utf8');
|
|
const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP', 'de-DE', 'ru-RU'] as const;
|
|
const extractHandleExportBlock = (): string => {
|
|
const start = source.indexOf('const handleExport = async');
|
|
const end = source.indexOf('const handleCopyTableAsInsert', start);
|
|
expect(start).toBeGreaterThanOrEqual(0);
|
|
expect(end).toBeGreaterThan(start);
|
|
return source.slice(start, end);
|
|
};
|
|
|
|
const placeholders = (value: string): string[] => [...value.matchAll(/\{\{(\w+)\}\}/g)]
|
|
.map((match) => match[1])
|
|
.sort();
|
|
|
|
describe('Sidebar table export feedback i18n', () => {
|
|
it('routes handleExport through the progress runner and option-based backend export', () => {
|
|
const block = extractHandleExportBlock();
|
|
|
|
expect(block).not.toContain('ExportTable(');
|
|
expect(block).toContain('runExportWithProgress({');
|
|
expect(block).toContain('ExportTableWithOptions(');
|
|
expect(block).toContain('jobId');
|
|
expect(block).toContain('totalRowsHint');
|
|
expect(block).toContain('totalRowsKnown');
|
|
});
|
|
|
|
it('keeps the export workbench entry key available across locales', () => {
|
|
locales.forEach((locale) => {
|
|
const catalog = JSON.parse(readFileSync(new URL(`../../../shared/i18n/${locale}.json`, import.meta.url), 'utf8')) as Record<string, string>;
|
|
expect(catalog['sidebar.v2_table_menu.open_export_workbench'], `${locale}:sidebar.v2_table_menu.open_export_workbench`).toBeTruthy();
|
|
expect(placeholders(catalog['sidebar.v2_table_menu.open_export_workbench'])).toEqual([]);
|
|
});
|
|
});
|
|
});
|