cartulary 0.3.0-alpha.1

The knowledge layer of your project — decisions, issues, docs, all in one place.
Documentation
//! One finding produced by a decision-record rule. Mirror of
//! `domain::model::issue::finding`.

use crate::domain::model::check::CheckViolation;
use crate::domain::model::decision_record::DecisionRecordEdit;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DecisionRecordFinding {
    pub violation: CheckViolation,
    pub fix: Option<DecisionRecordEdit>,
}

impl DecisionRecordFinding {
    pub fn report(violation: CheckViolation) -> Self {
        Self {
            violation,
            fix: None,
        }
    }
}

#[cfg(test)]
pub mod strategy {
    use super::DecisionRecordFinding;
    use crate::domain::model::check::check_violation::strategy::check_violation;
    use crate::domain::model::decision_record::edit::strategy::decision_record_edit;
    use proptest::prelude::*;

    prop_compose! {
        pub fn decision_record_finding()(
            violation in check_violation(),
            fix in proptest::option::of(decision_record_edit()),
        ) -> DecisionRecordFinding {
            DecisionRecordFinding { violation, fix }
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use proptest::prelude::*;

    proptest! {
        #[test]
        fn report_carries_no_fix(v in crate::domain::model::check::check_violation::strategy::check_violation()) {
            prop_assert!(DecisionRecordFinding::report(v).fix.is_none());
        }
    }
}