use camel_integration_test::Tier;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TierFilter {
Unit,
Integration,
}
impl TierFilter {
pub(crate) fn selects(&self, tier: Tier) -> bool {
match self {
Self::Unit => tier == Tier::Lean,
Self::Integration => tier == Tier::Full,
}
}
pub(crate) fn flag_name(&self) -> &'static str {
match self {
Self::Unit => "--unit",
Self::Integration => "--integration",
}
}
pub(crate) fn tier_name(&self) -> &'static str {
match self {
Self::Unit => "lean",
Self::Integration => "full",
}
}
}
pub(crate) fn both_flags_message() -> String {
"--unit and --integration are mutually exclusive tier filters; give at most one".to_string()
}
pub(crate) fn collision_message(filter: TierFilter, derived: &str) -> String {
format!(
"tier-filter-collision: document derives {derived}, {} selects {}",
filter.flag_name(),
filter.tier_name()
)
}
#[cfg(test)]
mod tests {
use super::{TierFilter, both_flags_message, collision_message};
use camel_integration_test::Tier;
#[test]
fn filters_select_their_own_tier_only() {
assert!(TierFilter::Unit.selects(Tier::Lean));
assert!(!TierFilter::Unit.selects(Tier::Full));
assert!(TierFilter::Integration.selects(Tier::Full));
assert!(!TierFilter::Integration.selects(Tier::Lean));
}
#[test]
fn collision_message_names_class_flag_and_tiers() {
let message = collision_message(TierFilter::Unit, "full");
assert!(message.starts_with("tier-filter-collision"), "{message}");
assert!(message.contains("--unit"), "{message}");
assert!(message.contains("full"), "{message}");
assert!(message.contains("lean"), "{message}");
}
#[test]
fn both_flags_message_names_both_flags() {
let message = both_flags_message();
assert!(
message.contains("--unit") && message.contains("--integration"),
"{message}"
);
}
}