use super::Kind;
use crate::asks::Asks;
use crate::harness::Choice;
#[derive(Debug, Default, Clone, PartialEq, Eq)]
pub struct ChildAsks {
pub harness: Choice,
pub security_review_harness: Option<Choice>,
pub security_fix: bool,
pub security_review: bool,
}
impl ChildAsks {
pub fn of(asks: &Asks) -> ChildAsks {
ChildAsks {
harness: asks.harness.clone(),
security_review_harness: asks.security_review_harness.clone(),
security_fix: asks.security_fix,
security_review: asks.security_review,
}
}
pub fn runs_security_review(&self, child: Option<&Kind>) -> bool {
self.security_review && !matches!(child, Some(Kind::Ticket { .. }))
}
}
#[cfg(test)]
mod tests {
use super::*;
fn asked(security_review: bool) -> ChildAsks {
ChildAsks {
security_review,
..ChildAsks::default()
}
}
#[test]
fn only_a_ticket_s_run_skips_the_security_review_the_command_asked_for() {
let ticket = Kind::Ticket {
spec_branch: "issue-20".to_string(),
};
let base_fix = Kind::BaseFix {
base: "main".to_string(),
};
for (child, when_asked) in [
(None, true),
(Some(&ticket), false),
(Some(&base_fix), true),
] {
assert_eq!(
asked(true).runs_security_review(child),
when_asked,
"{child:?}"
);
assert!(!asked(false).runs_security_review(child), "{child:?}");
}
}
}