@@ -122,6 +122,10 @@ mod tests {
122122 schedule : None ,
123123 } ) ;
124124 let result = generate_pr_trigger ( & triggers, true ) ;
125+ // PrTriggerConfig::default() has no branches/paths, so the native block is empty
126+ // (meaning "trigger on all PRs" in ADO). The schedule suppression ("pr: none") must
127+ // NOT be emitted because the explicit pr: key overrides it.
128+ assert ! ( result. is_empty( ) , "default PrTriggerConfig should produce empty string (trigger on all PRs)" ) ;
125129 assert ! ( !result. contains( "pr: none" ) , "triggers.pr should override schedule suppression" ) ;
126130 }
127131
@@ -138,6 +142,9 @@ mod tests {
138142 schedule : None ,
139143 } ) ;
140144 let result = generate_pr_trigger ( & triggers, false ) ;
145+ // Same as above: default PrTriggerConfig → empty (trigger on all PRs).
146+ // Pipeline-only suppression must NOT be emitted because pr: is explicit.
147+ assert ! ( result. is_empty( ) , "default PrTriggerConfig should produce empty string (trigger on all PRs)" ) ;
141148 assert ! ( !result. contains( "pr: none" ) , "triggers.pr should override pipeline trigger suppression" ) ;
142149 }
143150
@@ -346,6 +353,7 @@ mod tests {
346353 } ;
347354 let checks = lower_pr_filters ( & filters) ;
348355 let spec = build_gate_spec ( GateContext :: PullRequest , & checks) . unwrap ( ) ;
356+ assert ! ( spec. facts. iter( ) . any( |f| f. kind == "pr_title" ) , "should require pr_title fact for title filter" ) ;
349357 assert ! ( !spec. facts. iter( ) . any( |f| f. kind == "pr_metadata" ) , "should not require pr_metadata for title-only" ) ;
350358 }
351359
@@ -588,6 +596,8 @@ mod tests {
588596 false ,
589597 & [ "eq(variables['Custom.ShouldRun'], 'true')" ] ,
590598 ) ;
599+ // No setup steps, no PR filters → no dependsOn, but the expression produces a condition.
600+ assert ! ( !result. contains( "dependsOn" ) , "no dependsOn without setup/filters" ) ;
591601 assert ! ( result. contains( "condition:" ) , "should have condition" ) ;
592602 assert ! ( result. contains( "Custom.ShouldRun" ) , "should include expression" ) ;
593603 assert ! ( result. contains( "succeeded()" ) , "should still require succeeded" ) ;
@@ -606,19 +616,6 @@ mod tests {
606616 assert ! ( result. contains( "Build.Reason" ) , "should check build reason" ) ;
607617 }
608618
609- #[ test]
610- fn test_agentic_depends_on_expression_only_no_depends ( ) {
611- let result = generate_agentic_depends_on (
612- & [ ] ,
613- false ,
614- false ,
615- & [ "eq(variables['Run'], 'true')" ] ,
616- ) ;
617- // No setup steps, no PR filters — no dependsOn, but still a condition
618- assert ! ( !result. contains( "dependsOn" ) , "no dependsOn without setup/filters" ) ;
619- assert ! ( result. contains( "condition:" ) , "should have condition from expression" ) ;
620- }
621-
622619 #[ test]
623620 fn test_gate_step_change_count_includes_changed_files_fact ( ) {
624621 use crate :: compile:: filter_ir:: { build_gate_spec, lower_pr_filters, GateContext } ;
695692 let val: serde_yaml:: Value = serde_yaml:: from_str ( yaml) . unwrap ( ) ;
696693 let oc: OnConfig = serde_yaml:: from_value ( val[ "on" ] . clone ( ) ) . unwrap ( ) ;
697694 assert ! ( oc. schedule. is_some( ) , "should have schedule" ) ;
698- assert ! ( oc. pr. is_some( ) , "should have pr" ) ;
695+ assert_eq ! ( oc. schedule. unwrap( ) . expression( ) , "daily around 14:00" , "schedule expression should round-trip" ) ;
696+ let pr = oc. pr . expect ( "should have pr" ) ;
697+ let filters = pr. filters . expect ( "pr should have filters" ) ;
698+ assert_eq ! ( filters. title. unwrap( ) . pattern, "*[review]*" , "title pattern should round-trip" ) ;
699699 assert ! ( oc. pipeline. is_none( ) , "should not have pipeline" ) ;
700700 }
701701
0 commit comments