use runx_contracts::maturity::{MaturitySignals, MaturityTier};
#[must_use]
pub fn compute_maturity(signals: &MaturitySignals) -> MaturityTier {
if signals.declared_case_count == 0 || !signals.all_declared_cases_passed {
return MaturityTier::Alpha;
}
if signals.has_passing_graph_case {
MaturityTier::Stable
} else {
MaturityTier::Beta
}
}
#[cfg(test)]
mod tests {
use super::compute_maturity;
use runx_contracts::maturity::{MaturitySignals, MaturityTier};
#[test]
fn no_declared_cases_is_alpha() {
let tier = compute_maturity(&MaturitySignals {
declared_case_count: 0,
all_declared_cases_passed: true,
has_passing_graph_case: true,
});
assert_eq!(tier, MaturityTier::Alpha);
}
#[test]
fn any_failing_case_is_alpha() {
let tier = compute_maturity(&MaturitySignals {
declared_case_count: 3,
all_declared_cases_passed: false,
has_passing_graph_case: true,
});
assert_eq!(tier, MaturityTier::Alpha);
}
#[test]
fn all_passing_without_graph_case_is_beta() {
let tier = compute_maturity(&MaturitySignals {
declared_case_count: 3,
all_declared_cases_passed: true,
has_passing_graph_case: false,
});
assert_eq!(tier, MaturityTier::Beta);
}
#[test]
fn all_passing_with_graph_case_is_stable() {
let tier = compute_maturity(&MaturitySignals {
declared_case_count: 3,
all_declared_cases_passed: true,
has_passing_graph_case: true,
});
assert_eq!(tier, MaturityTier::Stable);
}
#[test]
fn graph_case_without_all_passing_is_not_stable() {
let tier = compute_maturity(&MaturitySignals {
declared_case_count: 2,
all_declared_cases_passed: false,
has_passing_graph_case: true,
});
assert_eq!(tier, MaturityTier::Alpha);
}
}