mirror of
https://github.com/chartdb/chartdb.git
synced 2025-11-15 03:11:30 +00:00
206 lines
7.3 KiB
TypeScript
206 lines
7.3 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { generateDBMLFromDiagram } from '../dbml-export';
|
|
import { DatabaseType } from '@/lib/domain/database-type';
|
|
import type { Diagram } from '@/lib/domain/diagram';
|
|
import { generateId, generateDiagramId } from '@/lib/utils';
|
|
|
|
describe('DBML Export - Empty Tables', () => {
|
|
it('should filter out tables with no fields', () => {
|
|
const diagram: Diagram = {
|
|
id: generateDiagramId(),
|
|
name: 'Test Diagram',
|
|
databaseType: DatabaseType.POSTGRESQL,
|
|
tables: [
|
|
{
|
|
id: generateId(),
|
|
name: 'valid_table',
|
|
schema: 'public',
|
|
x: 0,
|
|
y: 0,
|
|
fields: [
|
|
{
|
|
id: generateId(),
|
|
name: 'id',
|
|
type: { id: 'integer', name: 'integer' },
|
|
primaryKey: true,
|
|
unique: true,
|
|
nullable: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
],
|
|
indexes: [],
|
|
color: '#8eb7ff',
|
|
isView: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
{
|
|
id: generateId(),
|
|
name: 'empty_table',
|
|
schema: 'public',
|
|
x: 0,
|
|
y: 0,
|
|
fields: [], // Empty fields array
|
|
indexes: [],
|
|
color: '#8eb7ff',
|
|
isView: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
{
|
|
id: generateId(),
|
|
name: 'another_valid_table',
|
|
schema: 'public',
|
|
x: 0,
|
|
y: 0,
|
|
fields: [
|
|
{
|
|
id: generateId(),
|
|
name: 'name',
|
|
type: { id: 'varchar', name: 'varchar' },
|
|
primaryKey: false,
|
|
unique: false,
|
|
nullable: true,
|
|
createdAt: Date.now(),
|
|
},
|
|
],
|
|
indexes: [],
|
|
color: '#8eb7ff',
|
|
isView: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
],
|
|
relationships: [],
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
};
|
|
|
|
const result = generateDBMLFromDiagram(diagram);
|
|
|
|
// Verify the DBML doesn't contain the empty table
|
|
expect(result.inlineDbml).not.toContain('empty_table');
|
|
expect(result.standardDbml).not.toContain('empty_table');
|
|
|
|
// Verify the valid tables are still present
|
|
expect(result.inlineDbml).toContain('valid_table');
|
|
expect(result.inlineDbml).toContain('another_valid_table');
|
|
});
|
|
|
|
it('should handle diagram with only empty tables', () => {
|
|
const diagram: Diagram = {
|
|
id: generateDiagramId(),
|
|
name: 'Test Diagram',
|
|
databaseType: DatabaseType.POSTGRESQL,
|
|
tables: [
|
|
{
|
|
id: generateId(),
|
|
name: 'empty_table_1',
|
|
schema: 'public',
|
|
x: 0,
|
|
y: 0,
|
|
fields: [],
|
|
indexes: [],
|
|
color: '#8eb7ff',
|
|
isView: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
{
|
|
id: generateId(),
|
|
name: 'empty_table_2',
|
|
schema: 'public',
|
|
x: 0,
|
|
y: 0,
|
|
fields: [],
|
|
indexes: [],
|
|
color: '#8eb7ff',
|
|
isView: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
],
|
|
relationships: [],
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
};
|
|
|
|
const result = generateDBMLFromDiagram(diagram);
|
|
|
|
// Should not error and should return empty DBML (or just enums if any)
|
|
expect(result.inlineDbml).toBeTruthy();
|
|
expect(result.standardDbml).toBeTruthy();
|
|
expect(result.error).toBeUndefined();
|
|
});
|
|
|
|
it('should filter out table that becomes empty after removing invalid fields', () => {
|
|
const diagram: Diagram = {
|
|
id: generateDiagramId(),
|
|
name: 'Test Diagram',
|
|
databaseType: DatabaseType.POSTGRESQL,
|
|
tables: [
|
|
{
|
|
id: generateId(),
|
|
name: 'table_with_only_empty_field_names',
|
|
schema: 'public',
|
|
x: 0,
|
|
y: 0,
|
|
fields: [
|
|
{
|
|
id: generateId(),
|
|
name: '', // Empty field name - will be filtered
|
|
type: { id: 'integer', name: 'integer' },
|
|
primaryKey: false,
|
|
unique: false,
|
|
nullable: true,
|
|
createdAt: Date.now(),
|
|
},
|
|
{
|
|
id: generateId(),
|
|
name: '', // Empty field name - will be filtered
|
|
type: { id: 'varchar', name: 'varchar' },
|
|
primaryKey: false,
|
|
unique: false,
|
|
nullable: true,
|
|
createdAt: Date.now(),
|
|
},
|
|
],
|
|
indexes: [],
|
|
color: '#8eb7ff',
|
|
isView: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
{
|
|
id: generateId(),
|
|
name: 'valid_table',
|
|
schema: 'public',
|
|
x: 0,
|
|
y: 0,
|
|
fields: [
|
|
{
|
|
id: generateId(),
|
|
name: 'id',
|
|
type: { id: 'integer', name: 'integer' },
|
|
primaryKey: true,
|
|
unique: true,
|
|
nullable: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
],
|
|
indexes: [],
|
|
color: '#8eb7ff',
|
|
isView: false,
|
|
createdAt: Date.now(),
|
|
},
|
|
],
|
|
relationships: [],
|
|
createdAt: new Date(),
|
|
updatedAt: new Date(),
|
|
};
|
|
|
|
const result = generateDBMLFromDiagram(diagram);
|
|
|
|
// Table with only empty field names should be filtered out
|
|
expect(result.inlineDbml).not.toContain(
|
|
'table_with_only_empty_field_names'
|
|
);
|
|
// Valid table should remain
|
|
expect(result.inlineDbml).toContain('valid_table');
|
|
});
|
|
});
|