mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-22 13:17:10 +08:00
# Conflicts: # frontend/package.json.md5 # frontend/src/App.tsx # frontend/src/components/AIChatPanel.message-boundary.test.tsx # frontend/src/components/AIChatPanel.tsx # frontend/src/components/AISettingsModal.tsx # frontend/src/components/ConnectionModal.tsx # frontend/src/components/DataGrid.ddl.test.tsx # frontend/src/components/DataGrid.layout.test.tsx # frontend/src/components/DataGrid.tsx # frontend/src/components/DataGridColumnTitle.test.tsx # frontend/src/components/DataGridLegacyCellContextMenu.tsx # frontend/src/components/DataGridSecondaryActions.tsx # frontend/src/components/DataGridToolbarFrame.tsx # frontend/src/components/DataSyncModal.tsx # frontend/src/components/DataViewer.tsx # frontend/src/components/DefinitionViewer.tsx # frontend/src/components/DriverManagerModal.tsx # frontend/src/components/QueryEditor.external-sql-save.test.tsx # frontend/src/components/QueryEditor.tsx # frontend/src/components/RedisViewer.tsx # frontend/src/components/Sidebar.locate-toolbar.test.tsx # frontend/src/components/Sidebar.tsx # frontend/src/components/TabManager.hover.test.tsx # frontend/src/components/TabManager.tsx # frontend/src/components/TableDesigner.tsx # frontend/src/components/V2TableContextMenu.tsx # frontend/src/components/ai/AIChatHeader.tsx # frontend/src/components/ai/AIHistoryDrawer.tsx # frontend/src/main.tsx # frontend/src/store.ts # frontend/src/utils/aiComposerNotice.test.ts # frontend/src/utils/aiComposerNotice.ts # frontend/src/utils/connectionModalPresentation.ts # frontend/src/utils/driverImportGuidance.ts # frontend/src/utils/externalSqlTree.test.ts # frontend/src/utils/externalSqlTree.ts # frontend/src/utils/sqlDialect.ts # internal/ai/service/service.go
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { buildDataSyncRequest, validateDataSyncSelection } from './dataSyncRequest';
|
|
|
|
describe('validateDataSyncSelection', () => {
|
|
it('requires source query and single target table in query mode', () => {
|
|
expect(validateDataSyncSelection({
|
|
sourceDatasetMode: 'query',
|
|
selectedTables: [],
|
|
sourceQuery: '',
|
|
syncContent: 'data',
|
|
})).toBe('data_sync.validation.source_query_required');
|
|
|
|
expect(validateDataSyncSelection({
|
|
sourceDatasetMode: 'query',
|
|
selectedTables: [],
|
|
sourceQuery: 'select 1',
|
|
syncContent: 'data',
|
|
})).toBe('data_sync.validation.single_target_table_required');
|
|
|
|
expect(validateDataSyncSelection({
|
|
sourceDatasetMode: 'query',
|
|
selectedTables: ['users', 'orders'],
|
|
sourceQuery: 'select 1',
|
|
syncContent: 'data',
|
|
})).toBe('data_sync.validation.single_target_table_required');
|
|
});
|
|
|
|
it('forces data-only in query mode', () => {
|
|
expect(validateDataSyncSelection({
|
|
sourceDatasetMode: 'query',
|
|
selectedTables: ['users'],
|
|
sourceQuery: 'select 1',
|
|
syncContent: 'both',
|
|
})).toBe('data_sync.validation.query_mode_data_only');
|
|
});
|
|
});
|
|
|
|
describe('buildDataSyncRequest', () => {
|
|
it('normalizes query mode payload for backend', () => {
|
|
const payload = buildDataSyncRequest({
|
|
sourceConfig: { type: 'mysql' },
|
|
targetConfig: { type: 'mysql' },
|
|
sourceDatabase: ' app ',
|
|
targetDatabase: ' warehouse ',
|
|
selectedTables: ['users'],
|
|
sourceDatasetMode: 'query',
|
|
sourceQuery: ' SELECT id, name FROM active_users ',
|
|
syncContent: 'both',
|
|
syncMode: 'insert_update',
|
|
autoAddColumns: true,
|
|
targetTableStrategy: 'smart',
|
|
createIndexes: true,
|
|
mongoCollectionName: ' ',
|
|
jobId: 'job-1',
|
|
tableOptions: { users: { insert: true, update: true, delete: false } },
|
|
});
|
|
|
|
expect(payload).toMatchObject({
|
|
tables: ['users'],
|
|
sourceQuery: 'SELECT id, name FROM active_users',
|
|
content: 'data',
|
|
mode: 'insert_update',
|
|
autoAddColumns: false,
|
|
targetTableStrategy: 'existing_only',
|
|
createIndexes: false,
|
|
sourceDatabase: 'app',
|
|
targetDatabase: 'warehouse',
|
|
jobId: 'job-1',
|
|
});
|
|
});
|
|
});
|