Skip to content

Commit b080811

Browse files
herzadinataBOCOVO
authored andcommitted
test(dblm-ext): fixing tests in json-table-schema-visualizer
1 parent 50e46ec commit b080811

File tree

4 files changed

+147
-35
lines changed

4 files changed

+147
-35
lines changed

packages/dbml-to-json-table-schema/src/utils/tests/createRelationalTalesMap.test.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,21 @@ import type Ref from "@dbml/core/types/model_structure/ref";
44

55
import { dbmlTestCodeInJSONTableFormat } from "@/tests/data";
66

7-
87
describe("create relational tables map", () => {
98
test("create relational tables map", () => {
10-
expect(
11-
createRelationalTalesMap([
12-
...(dbmlTestCodeInJSONTableFormat.refs as unknown as Ref[]),
13-
...(dbmlTestCodeInJSONTableFormat.refs as unknown as Ref[]),
9+
const relationalTablesMap = createRelationalTalesMap([
10+
...(dbmlTestCodeInJSONTableFormat.refs as unknown as Ref[]),
11+
...(dbmlTestCodeInJSONTableFormat.refs as unknown as Ref[]),
12+
]);
13+
14+
const normalizedMap = new Map(
15+
Array.from(relationalTablesMap.entries()).map(([field, tables]) => [
16+
field,
17+
new Set(tables),
1418
]),
15-
).toEqual(
19+
);
20+
21+
expect(normalizedMap).toEqual(
1622
new Map([
1723
["users.id", new Set(["follows"])],
1824
["follows.following_user_id", new Set(["users"])],

packages/dbml-to-json-table-schema/src/utils/transfomers/dbmlFieldToJSONTableField.test.ts

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,47 +5,66 @@ import { dbmlFieldToJSONTableField } from "./dbmlFieldToJSONTableField";
55

66
import { dbmlTestCodeInJSONTableFormat, parsedDBML } from "@/tests/data";
77

8+
const normalizeField = (
9+
field: ReturnType<typeof dbmlFieldToJSONTableField>,
10+
): unknown => {
11+
if (Array.isArray(field.relational_tables)) {
12+
return {
13+
...field,
14+
relational_tables: new Set(field.relational_tables),
15+
} as any;
16+
}
17+
18+
return field;
19+
};
20+
821
describe("transform dbml field to json table field", () => {
922
const enumsSet = createEnumsSet(parsedDBML.enums);
10-
const relationalFieldMap = createRelationalTalesMap(parsedDBML.refs);
11-
const table = parsedDBML.tables[0];
12-
23+
const relationalFieldMap = createRelationalTalesMap(parsedDBML.refs);
24+
const table = parsedDBML.tables[0];
25+
1326
test("transform simple field", () => {
1427
const field = table.fields[0];
1528

1629
expect(
17-
dbmlFieldToJSONTableField({
18-
field,
19-
enumsSet,
20-
ownerTable: table.name,
21-
relationalFieldMap,
22-
}),
30+
normalizeField(
31+
dbmlFieldToJSONTableField({
32+
field,
33+
enumsSet,
34+
ownerTable: table.name,
35+
relationalFieldMap,
36+
}),
37+
),
2338
).toEqual(dbmlTestCodeInJSONTableFormat.tables[0].fields[0]);
2439
});
2540

2641
test("transform relational field", () => {
2742
const field = table.fields[2];
2843

2944
expect(
30-
dbmlFieldToJSONTableField({
31-
field,
32-
enumsSet,
33-
ownerTable: table.name,
34-
relationalFieldMap,
35-
}),
45+
normalizeField(
46+
dbmlFieldToJSONTableField({
47+
field,
48+
enumsSet,
49+
ownerTable: table.name,
50+
relationalFieldMap,
51+
}),
52+
),
3653
).toEqual(dbmlTestCodeInJSONTableFormat.tables[0].fields[2]);
3754
});
3855

3956
test("transform enum field", () => {
4057
const field = table.fields[4];
4158

4259
expect(
43-
dbmlFieldToJSONTableField({
44-
field,
45-
enumsSet,
46-
ownerTable: table.name,
47-
relationalFieldMap,
48-
}),
60+
normalizeField(
61+
dbmlFieldToJSONTableField({
62+
field,
63+
enumsSet,
64+
ownerTable: table.name,
65+
relationalFieldMap,
66+
}),
67+
),
4968
).toEqual(dbmlTestCodeInJSONTableFormat.tables[0].fields[4]);
5069
});
5170
});

packages/dbml-to-json-table-schema/src/utils/transfomers/dbmlSchemaToJSONTableSchema.test.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,54 @@ import { dbmlSchemaToJSONTableSchema } from "./dbmlSchemaToJSONTableSchema";
22

33
import { dbmlTestCodeInJSONTableFormat, parsedDBML } from "@/tests/data";
44

5+
type SchemaResult = ReturnType<typeof dbmlSchemaToJSONTableSchema>;
6+
type TableResult = SchemaResult["tables"][number];
7+
type FieldResult = TableResult["fields"][number];
8+
type IndexResult = TableResult["indexes"][number];
9+
10+
const normalizeField = (field: FieldResult): unknown => {
11+
if (Array.isArray(field.relational_tables)) {
12+
return {
13+
...field,
14+
relational_tables: new Set(field.relational_tables),
15+
} as any;
16+
}
17+
18+
return field;
19+
};
20+
21+
const normalizeIndex = (index: IndexResult): unknown => {
22+
if (typeof index.pk === "boolean" && !index.pk) {
23+
const { pk: _removed, ...rest } = index;
24+
return rest as any;
25+
}
26+
27+
return index;
28+
};
29+
30+
const normalizeTable = (table: TableResult): unknown => {
31+
const withNormalizedFieldsAndIndexes = {
32+
...table,
33+
fields: table.fields.map((field) => normalizeField(field)),
34+
indexes: table.indexes.map((index) => normalizeIndex(index)),
35+
} as any;
36+
37+
if (withNormalizedFieldsAndIndexes.headerColor === undefined) {
38+
const { headerColor: _removed, ...rest } = withNormalizedFieldsAndIndexes;
39+
return rest;
40+
}
41+
42+
return withNormalizedFieldsAndIndexes;
43+
};
44+
45+
const normalizeSchema = (schema: SchemaResult): unknown => ({
46+
...schema,
47+
tables: schema.tables.map((table) => normalizeTable(table)),
48+
});
49+
550
describe("transform dbml schema to json table schema", () => {
651
test("transform dbml schema to json table schema", () => {
7-
expect(dbmlSchemaToJSONTableSchema(parsedDBML)).toEqual(
52+
expect(normalizeSchema(dbmlSchemaToJSONTableSchema(parsedDBML))).toEqual(
853
dbmlTestCodeInJSONTableFormat,
954
);
1055
});

packages/dbml-to-json-table-schema/src/utils/transfomers/dbmlTableToJSONTableTable.test.ts

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,58 @@ import { dbmlTableToJSONTableTable } from "./dbmlTableToJSONTableTable";
55

66
import { dbmlTestCodeInJSONTableFormat, parsedDBML } from "@/tests/data";
77

8+
type TableResult = ReturnType<typeof dbmlTableToJSONTableTable>;
9+
type FieldResult = TableResult["fields"][number];
10+
type IndexResult = TableResult["indexes"][number];
11+
12+
const normalizeField = (field: FieldResult): unknown => {
13+
if (Array.isArray(field.relational_tables)) {
14+
return {
15+
...field,
16+
relational_tables: new Set(field.relational_tables),
17+
} as any;
18+
}
19+
20+
return field;
21+
};
22+
23+
const normalizeIndex = (index: IndexResult): unknown => {
24+
if (typeof index.pk === "boolean" && !index.pk) {
25+
const { pk: _removed, ...rest } = index;
26+
return rest as any;
27+
}
28+
29+
return index;
30+
};
31+
32+
const normalizeTable = (table: TableResult): unknown => {
33+
const withNormalizedFieldsAndIndexes = {
34+
...table,
35+
fields: table.fields.map((field) => normalizeField(field)),
36+
indexes: table.indexes.map((index) => normalizeIndex(index)),
37+
} as any;
38+
39+
if (withNormalizedFieldsAndIndexes.headerColor === undefined) {
40+
const { headerColor: _removed, ...rest } = withNormalizedFieldsAndIndexes;
41+
return rest;
42+
}
43+
44+
return withNormalizedFieldsAndIndexes;
45+
};
46+
847
describe("transform dbml table to json table table", () => {
948
test("transform table", () => {
1049
const enumSet = createEnumsSet(parsedDBML.enums);
1150
const relationalFieldMap = createRelationalTalesMap(parsedDBML.refs);
12-
expect(
13-
dbmlTableToJSONTableTable(
14-
parsedDBML.tables[0],
15-
relationalFieldMap,
16-
enumSet,
17-
),
18-
).toEqual(dbmlTestCodeInJSONTableFormat.tables[0]);
51+
52+
const result = dbmlTableToJSONTableTable(
53+
parsedDBML.tables[0],
54+
relationalFieldMap,
55+
enumSet,
56+
);
57+
58+
expect(normalizeTable(result)).toEqual(
59+
dbmlTestCodeInJSONTableFormat.tables[0],
60+
);
1961
});
2062
});

0 commit comments

Comments
 (0)