Files
MyGoNavi/frontend/src/components/SidebarObjectGroups.i18n.test.ts
Syngnat 322d0a7cb8 feat(sidebar): 支持 Oracle 序列和存储包对象树
- 新增 Oracle/Dameng 序列与存储包元数据加载

- 同步对象树节点、V2 筛选、搜索、复制和拖拽支持

- 补充多语言文案和侧边栏回归测试
2026-06-24 22:26:39 +08:00

60 lines
2.4 KiB
TypeScript

import { readFileSync } from 'node:fs';
import { describe, expect, it } from 'vitest';
const source = [
readFileSync(new URL('./Sidebar.tsx', import.meta.url), 'utf8'),
readFileSync(new URL('./sidebar/useSidebarTreeLoaders.tsx', import.meta.url), 'utf8'),
].join('\n');
const locales = ['zh-CN', 'zh-TW', 'en-US', 'ja-JP', 'de-DE', 'ru-RU'] as const;
const requiredKeys = [
'sidebar.tree.default_schema',
'sidebar.object_group.tables',
'sidebar.object_group.views',
'sidebar.object_group.materialized_views',
'sidebar.object_group.sequences',
'sidebar.object_group.routines',
'sidebar.object_group.packages',
'sidebar.object_group.triggers',
'sidebar.object_group.events',
];
describe('Sidebar object group i18n', () => {
it('localizes database object group titles and default schema fallback', () => {
[
"const schemaTitle = bucket.schemaName || '默认模式'",
"buildObjectGroup(schemaNodeKey, 'tables', '表'",
"buildObjectGroup(schemaNodeKey, 'views', '视图'",
"buildObjectGroup(schemaNodeKey, 'materializedViews', '物化视图'",
"buildObjectGroup(schemaNodeKey, 'sequences', '序列'",
"buildObjectGroup(schemaNodeKey, 'routines', '函数'",
"buildObjectGroup(schemaNodeKey, 'packages', '存储包'",
"buildObjectGroup(schemaNodeKey, 'triggers', '触发器'",
"buildObjectGroup(schemaNodeKey, 'events', '事件'",
"buildObjectGroup(key as string, 'tables', '表'",
"buildObjectGroup(key as string, 'views', '视图'",
"buildObjectGroup(key as string, 'materializedViews', '物化视图'",
"buildObjectGroup(key as string, 'sequences', '序列'",
"buildObjectGroup(key as string, 'routines', '函数'",
"buildObjectGroup(key as string, 'packages', '存储包'",
"buildObjectGroup(key as string, 'triggers', '触发器'",
"buildObjectGroup(key as string, 'events', '事件'",
].forEach((snippet) => {
expect(source).not.toContain(snippet);
});
requiredKeys.forEach((key) => {
expect(source).toContain(`t('${key}'`);
});
});
it('keeps database object group keys available in every locale', () => {
locales.forEach((locale) => {
const catalog = JSON.parse(readFileSync(new URL(`../../../shared/i18n/${locale}.json`, import.meta.url), 'utf8')) as Record<string, string>;
requiredKeys.forEach((key) => {
expect(catalog[key], `${locale}:${key}`).toBeTruthy();
});
});
});
});