|
1 | | -import { CubeSchemaConverter } from '../../src'; |
| 1 | +import { CubePreAggregationConverter, CubeSchemaConverter } from '../../src'; |
2 | 2 | import { |
3 | 3 | createCubeSchema, |
4 | 4 | createCubeSchemaWithCustomGranularities, |
5 | 5 | createCubeSchemaYaml, createECommerceSchema, |
6 | 6 | createSchemaYaml |
7 | 7 | } from './utils'; |
8 | 8 |
|
| 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 | + |
9 | 23 | describe('CubeSchemaConverter', () => { |
10 | 24 | 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 | | - |
25 | 25 | const schemaConverter = new CubeSchemaConverter(repo, []); |
26 | 26 | await schemaConverter.generate(); |
27 | 27 | const regeneratedFiles = schemaConverter.getSourceFiles(); |
28 | 28 | regeneratedFiles.forEach((regeneratedFile) => { |
29 | 29 | expect(regeneratedFile.source).toMatchSnapshot(regeneratedFile.fileName); |
30 | 30 | }); |
31 | 31 | }); |
| 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 | + }); |
32 | 56 | }); |
0 commit comments