pub use a11y_report::Severity;
pub trait SeverityExt {
fn label(&self) -> &'static str;
fn label_en(&self) -> &'static str;
fn from_legacy_wcag(old: &str) -> Severity;
fn from_legacy_security(old: &str) -> Severity;
fn from_legacy_module(old: &str) -> Severity;
}
impl SeverityExt for Severity {
fn label(&self) -> &'static str {
match self {
Severity::Critical => "Kritisch",
Severity::High => "Hoch",
Severity::Medium => "Mittel",
Severity::Low => "Niedrig",
}
}
fn label_en(&self) -> &'static str {
match self {
Severity::Critical => "CRITICAL",
Severity::High => "HIGH",
Severity::Medium => "MEDIUM",
Severity::Low => "LOW",
}
}
fn from_legacy_wcag(old: &str) -> Severity {
match old {
"critical" => Severity::Critical,
"serious" => Severity::High,
"moderate" => Severity::Medium,
"minor" => Severity::Low,
_ => Severity::Medium,
}
}
fn from_legacy_security(old: &str) -> Severity {
match old {
"critical" => Severity::Critical,
"high" => Severity::High,
"medium" => Severity::Medium,
"low" => Severity::Low,
_ => Severity::Medium,
}
}
fn from_legacy_module(old: &str) -> Severity {
match old {
"error" => Severity::High,
"warning" => Severity::Medium,
"info" => Severity::Low,
_ => Severity::Medium,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_severity_ordering() {
assert!(Severity::Critical > Severity::High);
assert!(Severity::High > Severity::Medium);
assert!(Severity::Medium > Severity::Low);
}
#[test]
fn test_legacy_wcag_mapping() {
assert_eq!(Severity::from_legacy_wcag("critical"), Severity::Critical);
assert_eq!(Severity::from_legacy_wcag("serious"), Severity::High);
assert_eq!(Severity::from_legacy_wcag("moderate"), Severity::Medium);
assert_eq!(Severity::from_legacy_wcag("minor"), Severity::Low);
}
#[test]
fn test_legacy_module_mapping() {
assert_eq!(Severity::from_legacy_module("error"), Severity::High);
assert_eq!(Severity::from_legacy_module("warning"), Severity::Medium);
assert_eq!(Severity::from_legacy_module("info"), Severity::Low);
}
#[test]
fn serialisiert_wie_zuvor() {
for (sev, erwartet) in [
(Severity::Low, "\"low\""),
(Severity::Medium, "\"medium\""),
(Severity::High, "\"high\""),
(Severity::Critical, "\"critical\""),
] {
assert_eq!(serde_json::to_string(&sev).unwrap(), erwartet);
}
}
#[test]
fn as_str_entspricht_altem_display() {
assert_eq!(Severity::Critical.as_str(), "critical");
assert_eq!(Severity::High.as_str(), "high");
assert_eq!(Severity::Medium.as_str(), "medium");
assert_eq!(Severity::Low.as_str(), "low");
}
}