#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CompanionKind {
Plan,
ImplementationNotes,
DesignDecision,
Other,
}
impl CompanionKind {
pub fn is_managed(&self) -> bool {
!matches!(self, CompanionKind::Other)
}
}
#[cfg(test)]
pub mod strategy {
use super::CompanionKind;
use proptest::prelude::*;
pub fn companion_kind() -> impl Strategy<Value = CompanionKind> {
prop_oneof![
Just(CompanionKind::Plan),
Just(CompanionKind::ImplementationNotes),
Just(CompanionKind::DesignDecision),
Just(CompanionKind::Other),
]
}
}
#[cfg(test)]
mod tests {
use super::*;
use proptest::prelude::*;
proptest! {
#[test]
fn is_managed_is_false_only_for_other(kind in strategy::companion_kind()) {
prop_assert_eq!(kind.is_managed(), !matches!(kind, CompanionKind::Other));
}
}
#[test]
fn standardised_variants_are_managed() {
assert!(CompanionKind::Plan.is_managed());
assert!(CompanionKind::ImplementationNotes.is_managed());
assert!(CompanionKind::DesignDecision.is_managed());
}
#[test]
fn other_is_not_managed() {
assert!(!CompanionKind::Other.is_managed());
}
}