@@ -261,8 +261,62 @@ public void compileYamlPolicy_aggregate_macrosPreserved() throws Exception {
261261 String unparsed = CelUnparserFactory .newUnparser ().unparse (ast );
262262 assertThat (unparsed )
263263 .isEqualTo (
264- "(cond ? [payload.filter(x, x > 10, x).exists(y, y % 2 == 0)] : []) "
265- + "+ ([payload.all(x, x > 0)] + [])" );
264+ "(cond ? [payload.filter(x, x > 10).exists(y, y % 2 == 0)] : []) "
265+ + "+ [payload.all(x, x > 0)]" );
266+ }
267+
268+ @ Test
269+ public void compileYamlPolicy_aggregateSingleMatch_noSuperfluousConcatenation () throws Exception {
270+ String policySource =
271+ "name: aggregate_single_match\n "
272+ + "rule:\n "
273+ + " aggregate:\n "
274+ + " - condition: \" cond\" \n "
275+ + " output: \" payload.filter(x, x > 10).exists(y, y % 2 == 0)\" \n " ;
276+ Cel cel =
277+ newCel ()
278+ .toCelBuilder ()
279+ .addVar ("cond" , SimpleType .BOOL )
280+ .addVar ("payload" , ListType .create (SimpleType .INT ))
281+ .build ();
282+
283+ CelPolicy policy = POLICY_PARSER .parse (policySource );
284+
285+ CelAbstractSyntaxTree ast =
286+ CelPolicyCompilerFactory .newPolicyCompiler (cel ).build ().compile (policy );
287+
288+ String unparsed = CelUnparserFactory .newUnparser ().unparse (ast );
289+ assertThat (unparsed ).isEqualTo ("cond ? [payload.filter(x, x > 10).exists(y, y % 2 == 0)] : []" );
290+ }
291+
292+ @ Test
293+ public void compileYamlPolicy_aggregateMultipleConditionalMatches_noSuperfluousConcatenation ()
294+ throws Exception {
295+ String policySource =
296+ "name: aggregate_multiple_conditional\n "
297+ + "rule:\n "
298+ + " aggregate:\n "
299+ + " - condition: \" cond1\" \n "
300+ + " output: \" payload.all(x, x > 0)\" \n "
301+ + " - condition: \" cond2\" \n "
302+ + " output: \" payload.exists(x, x == 0)\" \n " ;
303+ Cel cel =
304+ newCel ()
305+ .toCelBuilder ()
306+ .addVar ("cond1" , SimpleType .BOOL )
307+ .addVar ("cond2" , SimpleType .BOOL )
308+ .addVar ("payload" , ListType .create (SimpleType .INT ))
309+ .build ();
310+
311+ CelPolicy policy = POLICY_PARSER .parse (policySource );
312+
313+ CelAbstractSyntaxTree ast =
314+ CelPolicyCompilerFactory .newPolicyCompiler (cel ).build ().compile (policy );
315+
316+ String unparsed = CelUnparserFactory .newUnparser ().unparse (ast );
317+ assertThat (unparsed )
318+ .isEqualTo (
319+ "(cond1 ? [payload.all(x, x > 0)] : []) + (cond2 ? [payload.exists(x, x == 0)] : [])" );
266320 }
267321
268322 @ Test
0 commit comments