Skip to content

Commit e1daed0

Browse files
committed
add tests
1 parent 577aa38 commit e1daed0

File tree

1 file changed

+84
-9
lines changed

1 file changed

+84
-9
lines changed

packages/cubejs-schema-compiler/test/unit/pre-aggregations.test.ts

Lines changed: 84 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,36 @@ describe('pre-aggregations', () => {
99
`
1010
cube(\`Users\`, {
1111
sql: \`SELECT * FROM public.users\`,
12-
12+
1313
preAggregations: {
1414
usersRollup: {
1515
dimensions: [CUBE.id],
1616
},
1717
},
18-
18+
1919
measures: {
2020
count: {
2121
type: \`count\`,
2222
},
2323
},
24-
24+
2525
dimensions: {
2626
id: {
2727
sql: \`id\`,
2828
type: \`string\`,
2929
primaryKey: true,
3030
},
31-
31+
3232
name: {
3333
sql: \`name\`,
3434
type: \`string\`,
3535
},
3636
},
3737
});
38-
38+
3939
cube('Orders', {
4040
sql: \`SELECT * FROM orders\`,
41-
41+
4242
preAggregations: {
4343
ordersRollup: {
4444
measures: [CUBE.count],
@@ -52,20 +52,20 @@ describe('pre-aggregations', () => {
5252
rollups: [Users.usersRollup, CUBE.ordersRollup],
5353
},
5454
},
55-
55+
5656
joins: {
5757
Users: {
5858
relationship: \`belongsTo\`,
5959
sql: \`\${CUBE.userId} = \${Users.id}\`,
6060
},
6161
},
62-
62+
6363
measures: {
6464
count: {
6565
type: \`count\`,
6666
},
6767
},
68-
68+
6969
dimensions: {
7070
id: {
7171
sql: \`id\`,
@@ -232,4 +232,79 @@ describe('pre-aggregations', () => {
232232
expect(indexesSql[0].indexName).toEqual('orders_indexes_orders_by_day_with_day_by_status_regular_index');
233233
expect(indexesSql[1].indexName).toEqual('orders_indexes_orders_by_day_with_day_by_status_agg_index');
234234
});
235+
236+
it('pre-aggregation with FILTER_PARAMS', async () => {
237+
const { compiler, cubeEvaluator, joinGraph } = prepareYamlCompiler(
238+
createSchemaYaml({
239+
cubes: [
240+
{
241+
name: 'orders',
242+
sql_table: 'orders',
243+
measures: [{
244+
name: 'count',
245+
type: 'count',
246+
}],
247+
dimensions: [
248+
{
249+
name: 'created_at',
250+
sql: 'created_at',
251+
type: 'time',
252+
},
253+
{
254+
name: 'updated_at',
255+
sql: '{created_at}',
256+
type: 'time',
257+
},
258+
{
259+
name: 'status',
260+
sql: 'status',
261+
type: 'string',
262+
}
263+
],
264+
preAggregations: [
265+
{
266+
name: 'orders_by_day_with_day',
267+
measures: ['count'],
268+
dimensions: ['status'],
269+
timeDimension: 'created_at',
270+
granularity: 'day',
271+
partition_granularity: 'day',
272+
build_range_start: {
273+
sql: 'SELECT \'2022-01-01\'::timestamp',
274+
},
275+
build_range_end: {
276+
sql: 'SELECT \'2024-01-01\'::timestamp'
277+
},
278+
refresh_key: {
279+
every: '4 hours',
280+
sql: `
281+
SELECT max(created_at) as max_created_at
282+
FROM orders
283+
WHERE {FILTER_PARAMS.orders.created_at.filter('date(created_at)')}`,
284+
},
285+
},
286+
]
287+
}
288+
]
289+
})
290+
);
291+
292+
await compiler.compile();
293+
294+
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
295+
measures: [
296+
'orders.count'
297+
],
298+
timeDimensions: [{
299+
dimension: 'orders.created_at',
300+
granularity: 'day',
301+
dateRange: ['2023-01-01', '2023-01-10']
302+
}],
303+
dimensions: ['orders.status']
304+
});
305+
306+
const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription();
307+
expect(preAggregationsDescription[0].loadSql[0].includes('WHERE ("orders".created_at >= $1::timestamptz AND "orders".created_at <= $2::timestamptz)')).toBeTruthy();
308+
expect(preAggregationsDescription[0].loadSql[1]).toEqual(['__FROM_PARTITION_RANGE', '__TO_PARTITION_RANGE']);
309+
});
235310
});

0 commit comments

Comments
 (0)