Files
MyGoNavi/frontend/src/components/SidebarTableExportFeedback.i18n.test.ts
Syngnat 5b31ab7435 feat(export-workbench): 新增导出工作台与进度历史
- 新增表级导出工作台标签页,统一承载导出范围、格式和 XLSX sheet 行数配置
- 结果集、表概览、侧栏和右键菜单统一接入导出工作台与带进度的导出入口
- 导出进度改为事件驱动,未知总数时展示不定进度和实时已写入行数
- 持久化每张表的导出历史并复用同一导出标签,重启后仍可查看最近任务
- 调整导出页签标题、状态胶囊和历史列表,补充工作台与状态流测试覆盖
2026-06-17 14:40:49 +08:00

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([]);
});
});
});