#![allow(clippy::unwrap_used)]
use crate::repl::purifier_transforms::*;
#[test]
fn test_PURIFIER_COV_011_format_report_single_determinism() {
let transformations = vec![TransformationExplanation::new(
TransformationCategory::Determinism,
"Remove $RANDOM",
"x=$RANDOM",
"x=0",
"Removed $RANDOM variable",
"Non-deterministic values are unpredictable.",
)];
let report = format_transformation_report(&transformations);
assert!(report.contains("Transformation Report"));
assert!(report.contains("DETERMINISM"));
assert!(report.contains("Remove $RANDOM"));
assert!(report.contains("Removed $RANDOM variable"));
}
#[test]
fn test_PURIFIER_COV_012_format_report_single_safety() {
let transformations = vec![TransformationExplanation::new(
TransformationCategory::Safety,
"Quote variables",
"echo $var",
"echo \"$var\"",
"Added quotes around variables",
"Prevents injection attacks.",
)];
let report = format_transformation_report(&transformations);
assert!(report.contains("Transformation Report"));
assert!(report.contains("SAFETY"));
assert!(report.contains("Quote variables"));
assert!(report.contains("injection attacks"));
}
#[test]
fn test_PURIFIER_COV_013_format_report_with_line_number() {
let transformations = vec![TransformationExplanation::new(
TransformationCategory::Idempotency,
"rm → rm -f",
"rm /tmp/file",
"rm -f /tmp/file",
"Added -f flag",
"Makes deletion safe to re-run.",
)
.with_line_number(7)];
let report = format_transformation_report(&transformations);
assert!(report.contains("Line: 7"));
}
#[test]
fn test_PURIFIER_COV_014_format_report_multiple_transformations() {
let transformations = vec![
TransformationExplanation::new(
TransformationCategory::Idempotency,
"mkdir → mkdir -p",
"mkdir /tmp/test",
"mkdir -p /tmp/test",
"Added -p flag",
"Safe to re-run.",
),
TransformationExplanation::new(
TransformationCategory::Determinism,
"Remove $RANDOM",
"x=$RANDOM",
"x=0",
"Removed $RANDOM",
"Reproducible output.",
),
TransformationExplanation::new(
TransformationCategory::Safety,
"Quote variables",
"echo $var",
"echo \"$var\"",
"Added quotes",
"Prevents injection.",
),
];
let report = format_transformation_report(&transformations);
assert!(report.contains("IDEMPOTENCY"));
assert!(report.contains("DETERMINISM"));
assert!(report.contains("SAFETY"));
assert!(report.contains("Transformation Report"));
assert!(report.contains("===================="));
}
#[test]
fn test_PURIFIER_COV_015_format_report_without_line_number() {
let transformations = vec![TransformationExplanation::new(
TransformationCategory::Determinism,
"Remove timestamps",
"elapsed=$SECONDS",
"elapsed=0",
"Removed time-based values",
"Non-reproducible across runs.",
)];
let report = format_transformation_report(&transformations);
assert!(
!report.contains("Line:"),
"Report should not contain Line: when no line number is set"
);
}
}