Skip to content

Commit 663dcb8

Browse files
test: reduce and improve tests in src/compile/pr_filters.rs (#675)
1 parent 80012db commit 663dcb8

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

src/compile/pr_filters.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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};
@@ -695,7 +692,10 @@ on:
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

Comments
 (0)