Skip to content

Commit e8fbed8

Browse files
committed
more tests
1 parent 96ef308 commit e8fbed8

File tree

1 file changed

+81
-3
lines changed

1 file changed

+81
-3
lines changed

packages/cubejs-schema-compiler/test/unit/base-query.test.ts

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2108,15 +2108,93 @@ describe('SQL Generation', () => {
21082108
const queryString = queryAndParams[0];
21092109

21102110
expect(queryString).toContain('select * from products where (category = $1) and (status = $2)');
2111-
// Test that the view query contains the expected structure
21122111
expect(queryString).toMatch(/SELECT\s+"product"\.name/);
21132112
expect(queryString).toMatch(/count\(\*\)/);
21142113
expect(queryString).toMatch(/sum\("product"\.price\)/);
2115-
// Test that view filters are properly applied
21162114
expect(queryString).toContain('WHERE ("product".category = $3) AND ("product".status = $4)');
2117-
// Test parameter values
21182115
expect(queryAndParams[1]).toEqual(['electronics', 'active', 'electronics', 'active']);
21192116
});
2117+
2118+
it('cube with FILTER_PARAMS in measure filters - triggers backAlias collection', async () => {
2119+
/** @type {Compilers} */
2120+
const filterParamsCompiler = prepareYamlCompiler(
2121+
createSchemaYaml({
2122+
cubes: [{
2123+
name: 'Sales',
2124+
sql: 'select * from sales',
2125+
measures: [
2126+
{
2127+
name: 'count',
2128+
type: 'count',
2129+
},
2130+
{
2131+
name: 'filtered_revenue',
2132+
sql: 'amount',
2133+
type: 'sum',
2134+
// This measure filter with FILTER_PARAMS should trigger backAlias collection
2135+
// when evaluating symbols
2136+
filters: [
2137+
{ sql: '{FILTER_PARAMS.Sales.category.filter(\'category\')}' }
2138+
]
2139+
}
2140+
],
2141+
dimensions: [
2142+
{
2143+
name: 'id',
2144+
sql: 'id',
2145+
type: 'number',
2146+
primaryKey: true
2147+
},
2148+
{
2149+
name: 'category',
2150+
sql: 'category',
2151+
type: 'string'
2152+
},
2153+
{
2154+
name: 'region',
2155+
sql: 'region',
2156+
type: 'string'
2157+
}
2158+
]
2159+
}],
2160+
views: [{
2161+
name: 'sales_analytics',
2162+
cubes: [{
2163+
join_path: 'Sales',
2164+
prefix: true,
2165+
includes: [
2166+
'count',
2167+
'filtered_revenue',
2168+
'category',
2169+
'region'
2170+
]
2171+
}]
2172+
}]
2173+
})
2174+
);
2175+
2176+
await filterParamsCompiler.compiler.compile();
2177+
2178+
const query = new PostgresQuery(filterParamsCompiler, {
2179+
measures: ['sales_analytics.Sales_filtered_revenue'],
2180+
dimensions: ['sales_analytics.Sales_region'],
2181+
filters: [
2182+
{
2183+
member: 'sales_analytics.Sales_category',
2184+
operator: 'equals',
2185+
values: ['electronics'],
2186+
},
2187+
],
2188+
});
2189+
2190+
const queryAndParams = query.buildSqlAndParams();
2191+
const queryString = queryAndParams[0];
2192+
2193+
expect(queryString).toContain('CASE WHEN (((category = $1)))');
2194+
expect(queryString).toMatch(/sum.*CASE WHEN/);
2195+
expect(queryString).toContain('WHERE ("sales".category = $2)');
2196+
expect(queryAndParams[1]).toEqual(['electronics', 'electronics']);
2197+
});
21202198
});
21212199

21222200
describe('FILTER_GROUP', () => {

0 commit comments

Comments
 (0)