Skip to content

Commit 7e1d17f

Browse files
committed
test for yaml pre-agg gen
1 parent 7d0a773 commit 7e1d17f

File tree

2 files changed

+75
-15
lines changed

2 files changed

+75
-15
lines changed

packages/cubejs-schema-compiler/test/unit/__snapshots__/cube_schema_converter.test.ts.snap

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,41 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3+
exports[`CubeSchemaConverter adds a pre-aggregation to JS model using CubePreAggregationConverter: single_cube.yaml 1`] = `
4+
"# Useless comment for compilation, but is checked in
5+
# CubeSchemaConverter tests
6+
cubes:
7+
- name: yml_orders
8+
sql_table: yml_orders
9+
10+
measures:
11+
- name: count
12+
type: count
13+
- name: sum
14+
type: sum
15+
sql: amount
16+
- name: min
17+
sql: amount
18+
type: min
19+
- name: max
20+
sql: amount
21+
type: max
22+
dimensions:
23+
- name: id
24+
sql: id
25+
type: number
26+
primary_key: true
27+
- name: createdAt
28+
sql: created_at
29+
type: time
30+
pre_aggregations:
31+
- name: main
32+
measures:
33+
- yml_orders.count
34+
timeDimension: yml_orders.createdAt
35+
granularity: day
36+
"
37+
`;
38+
339
exports[`CubeSchemaConverter converts all schema repository models (no changes, without additional converters): multi_ecom.yaml 1`] = `
440
"cubes:
541
- name: orders
Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,56 @@
1-
import { CubeSchemaConverter } from '../../src';
1+
import { CubePreAggregationConverter, CubeSchemaConverter } from '../../src';
22
import {
33
createCubeSchema,
44
createCubeSchemaWithCustomGranularities,
55
createCubeSchemaYaml, createECommerceSchema,
66
createSchemaYaml
77
} from './utils';
88

9+
const repo = {
10+
localPath: () => __dirname,
11+
dataSchemaFiles: () => Promise.resolve([
12+
{ fileName: 'single_cube_no_preaggs.js', content: createCubeSchema({ name: 'single_cube' }) },
13+
{ fileName: 'orders_and_users.js', content: createCubeSchemaWithCustomGranularities('js_orders') },
14+
{ fileName: 'single_cube.yaml', content: createCubeSchemaYaml({ name: 'yml_orders', sqlTable: 'yml_orders' }) },
15+
{ fileName: 'multi_ecom.yaml', content: createSchemaYaml(createECommerceSchema()) },
16+
{ fileName: 'empty1.yaml', content: ' ' },
17+
{ fileName: 'empty2.yaml', content: 'string ' },
18+
{ fileName: 'empty3.yaml', content: 'cubes: string ' },
19+
{ fileName: 'empty4.yaml', content: '# just comment ' },
20+
])
21+
};
22+
923
describe('CubeSchemaConverter', () => {
1024
it('converts all schema repository models (no changes, without additional converters)', async () => {
11-
const repo = {
12-
localPath: () => __dirname,
13-
dataSchemaFiles: () => Promise.resolve([
14-
{ fileName: 'single_cube_no_preaggs.js', content: createCubeSchema({ name: 'single_cube' }) },
15-
{ fileName: 'orders_and_users.js', content: createCubeSchemaWithCustomGranularities('js_orders') },
16-
{ fileName: 'single_cube.yaml', content: createCubeSchemaYaml({ name: 'yml_orders', sqlTable: 'yml_orders' }) },
17-
{ fileName: 'multi_ecom.yaml', content: createSchemaYaml(createECommerceSchema()) },
18-
{ fileName: 'empty1.yaml', content: ' ' },
19-
{ fileName: 'empty2.yaml', content: 'string ' },
20-
{ fileName: 'empty3.yaml', content: 'cubes: string ' },
21-
{ fileName: 'empty4.yaml', content: '# just comment ' },
22-
])
23-
};
24-
2525
const schemaConverter = new CubeSchemaConverter(repo, []);
2626
await schemaConverter.generate();
2727
const regeneratedFiles = schemaConverter.getSourceFiles();
2828
regeneratedFiles.forEach((regeneratedFile) => {
2929
expect(regeneratedFile.source).toMatchSnapshot(regeneratedFile.fileName);
3030
});
3131
});
32+
33+
it('adds a pre-aggregation to JS model using CubePreAggregationConverter', async () => {
34+
const cubeName = 'yml_orders';
35+
const preAggregationName = 'yml_orders_main';
36+
const code = `
37+
name: main
38+
measures:
39+
- yml_orders.count
40+
timeDimension: yml_orders.createdAt
41+
granularity: day
42+
`;
43+
44+
const schemaConverter = new CubeSchemaConverter(repo, [new CubePreAggregationConverter({
45+
cubeName,
46+
preAggregationName,
47+
code
48+
})]);
49+
50+
await schemaConverter.generate(cubeName);
51+
const regeneratedFiles = schemaConverter.getSourceFiles();
52+
regeneratedFiles.forEach((regeneratedFile) => {
53+
expect(regeneratedFile.source).toMatchSnapshot(regeneratedFile.fileName);
54+
});
55+
});
3256
});

0 commit comments

Comments
 (0)