use cuengine::validation::{Limits, validate_output, validate_package_name, validate_path};
use std::fs;
use std::path::Path;
use tempfile::TempDir;
#[test]
fn test_validate_path_exists() {
let limits = Limits::default();
let temp_dir = TempDir::new().unwrap();
let result = validate_path(temp_dir.path(), &limits);
assert!(result.is_ok());
let non_existent = temp_dir.path().join("non_existent");
let result = validate_path(&non_existent, &limits);
assert!(result.is_err());
}
#[test]
fn test_validate_path_is_directory() {
let limits = Limits::default();
let temp_dir = TempDir::new().unwrap();
let file_path = temp_dir.path().join("test.txt");
fs::write(&file_path, "test").unwrap();
let result = validate_path(&file_path, &limits);
assert!(result.is_err());
}
#[test]
fn test_validate_path_length() {
let limits = Limits {
max_path_length: 10,
..Default::default()
};
let temp_dir = TempDir::new().unwrap();
let short_dir = temp_dir.path().join("a");
fs::create_dir(&short_dir).unwrap();
let result = validate_path(&short_dir, &limits);
if result.is_err() {
}
let limits_strict = Limits {
max_path_length: 1,
..Default::default()
};
let result = validate_path(temp_dir.path(), &limits_strict);
assert!(result.is_err());
}
#[test]
fn test_validate_path_traversal() {
let limits = Limits::default();
let path_with_traversal = Path::new("/tmp/../etc");
let result = validate_path(path_with_traversal, &limits);
assert!(result.is_err());
}
#[test]
fn test_validate_package_name_empty() {
let limits = Limits::default();
let result = validate_package_name("", &limits);
assert!(result.is_err());
}
#[test]
fn test_validate_package_name_length() {
let limits = Limits {
max_package_name_length: 10,
..Default::default()
};
let result = validate_package_name("short", &limits);
assert!(result.is_ok());
let result = validate_package_name("this_is_a_very_long_package_name", &limits);
assert!(result.is_err());
}
#[test]
fn test_validate_package_name_characters() {
let limits = Limits::default();
assert!(validate_package_name("valid_name", &limits).is_ok());
assert!(validate_package_name("valid-name", &limits).is_ok());
assert!(validate_package_name("validName123", &limits).is_ok());
let result = validate_package_name("invalid.name", &limits);
assert!(result.is_err());
let result = validate_package_name("invalid name", &limits);
assert!(result.is_err());
let result = validate_package_name("invalid@name", &limits);
assert!(result.is_err());
}
#[test]
fn test_validate_package_name_first_character() {
let limits = Limits::default();
let result = validate_package_name("1invalid", &limits);
assert!(result.is_err());
let result = validate_package_name("-invalid", &limits);
assert!(result.is_err());
assert!(validate_package_name("valid", &limits).is_ok());
assert!(validate_package_name("Valid", &limits).is_ok());
assert!(validate_package_name("_hidden", &limits).is_ok());
assert!(validate_package_name("examples", &limits).is_ok());
}
#[test]
fn test_validate_output_size() {
let limits = Limits {
max_output_size: 100,
..Default::default()
};
let small_output = "small output";
assert!(validate_output(small_output, &limits).is_ok());
let large_output = "x".repeat(101);
let result = validate_output(&large_output, &limits);
assert!(result.is_err());
let exact_output = "x".repeat(100);
assert!(validate_output(&exact_output, &limits).is_ok());
}
#[test]
fn test_validate_package_name_edge_cases() {
let limits = Limits::default();
assert!(validate_package_name("a", &limits).is_ok());
assert!(validate_package_name("A", &limits).is_ok());
assert!(validate_package_name("a1", &limits).is_ok());
assert!(validate_package_name("test123", &limits).is_ok());
assert!(validate_package_name("test_package", &limits).is_ok());
assert!(validate_package_name("test-package", &limits).is_ok());
assert!(validate_package_name("test_package-name", &limits).is_ok());
}
#[test]
fn test_validate_output_empty() {
let limits = Limits::default();
assert!(validate_output("", &limits).is_ok());
}