#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod coverage_tests {
use super::*;
#[test]
fn test_template_category_debug() {
let categories = [
TemplateCategory::Makefile,
TemplateCategory::Readme,
TemplateCategory::Gitignore,
TemplateCategory::Context,
];
for cat in &categories {
let debug_str = format!("{:?}", cat);
assert!(!debug_str.is_empty());
}
}
#[test]
fn test_parameter_type_debug() {
let types = [
ParameterType::ProjectName,
ParameterType::SemVer,
ParameterType::GitHubUsername,
ParameterType::LicenseIdentifier,
ParameterType::Boolean,
ParameterType::String,
];
for pt in &types {
let debug_str = format!("{:?}", pt);
assert!(!debug_str.is_empty());
}
}
#[test]
fn test_toolchain_debug() {
let toolchains = [
Toolchain::RustCli {
cargo_features: vec!["serde".to_string()],
},
Toolchain::DenoTypescript {
deno_version: "1.38".to_string(),
},
Toolchain::PythonUv {
python_version: "3.11".to_string(),
},
];
for tc in &toolchains {
let debug_str = format!("{:?}", tc);
assert!(!debug_str.is_empty());
}
}
#[test]
fn test_parameter_spec_debug() {
let spec = ParameterSpec {
name: "test".to_string(),
param_type: ParameterType::String,
required: true,
default_value: None,
validation_pattern: None,
description: "A test parameter".to_string(),
};
let debug_str = format!("{:?}", spec);
assert!(debug_str.contains("test"));
assert!(debug_str.contains("String"));
}
#[test]
fn test_template_resource_debug() {
let resource = TemplateResource {
uri: "test://uri".to_string(),
name: "Test Template".to_string(),
description: "A test".to_string(),
toolchain: Toolchain::RustCli {
cargo_features: vec![],
},
category: TemplateCategory::Makefile,
parameters: vec![],
s3_object_key: "key".to_string(),
content_hash: "hash".to_string(),
semantic_version: Version::new(1, 0, 0),
dependency_graph: vec![],
};
let debug_str = format!("{:?}", resource);
assert!(debug_str.contains("Test Template"));
}
#[test]
fn test_generated_template_debug() {
let template = GeneratedTemplate {
content: "content".to_string(),
filename: "file.txt".to_string(),
checksum: "abc123".to_string(),
toolchain: Toolchain::RustCli {
cargo_features: vec![],
},
};
let debug_str = format!("{:?}", template);
assert!(debug_str.contains("file.txt"));
}
#[test]
fn test_template_response_debug() {
let response = TemplateResponse {
content: "response content".to_string(),
};
let debug_str = format!("{:?}", response);
assert!(debug_str.contains("response content"));
}
#[test]
fn test_invalid_json_deserialization() {
let invalid_json = r#"{"type": "invalid_toolchain"}"#;
let result: Result<Toolchain, _> = serde_json::from_str(invalid_json);
assert!(result.is_err());
}
#[test]
fn test_missing_field_deserialization() {
let incomplete_json = r#"{"type": "rust"}"#;
let result: Result<Toolchain, _> = serde_json::from_str(incomplete_json);
assert!(result.is_err());
}
#[test]
fn test_template_category_invalid_deserialization() {
let invalid = r#""invalid_category""#;
let result: Result<TemplateCategory, _> = serde_json::from_str(invalid);
assert!(result.is_err());
}
#[test]
fn test_parameter_type_invalid_deserialization() {
let invalid = r#""unknown_type""#;
let result: Result<ParameterType, _> = serde_json::from_str(invalid);
assert!(result.is_err());
}
#[test]
fn test_complex_nested_serialization() {
let resource = TemplateResource {
uri: "template://complex".to_string(),
name: "Complex Template".to_string(),
description: "A complex template with nested structures".to_string(),
toolchain: Toolchain::RustCli {
cargo_features: vec![
"serde".to_string(),
"tokio".to_string(),
"async-trait".to_string(),
],
},
category: TemplateCategory::Makefile,
parameters: vec![
ParameterSpec {
name: "param1".to_string(),
param_type: ParameterType::ProjectName,
required: true,
default_value: None,
validation_pattern: Some(r"^[a-z]+$".to_string()),
description: "First parameter".to_string(),
},
ParameterSpec {
name: "param2".to_string(),
param_type: ParameterType::SemVer,
required: false,
default_value: Some("1.0.0".to_string()),
validation_pattern: None,
description: "Second parameter".to_string(),
},
],
s3_object_key: "templates/complex.tpl".to_string(),
content_hash: "sha256:complex_hash".to_string(),
semantic_version: Version::new(2, 3, 4),
dependency_graph: vec!["dep1".to_string(), "dep2".to_string()],
};
let json = serde_json::to_string_pretty(&resource).unwrap();
let roundtrip: TemplateResource = serde_json::from_str(&json).unwrap();
assert_eq!(roundtrip.uri, resource.uri);
assert_eq!(roundtrip.parameters.len(), 2);
assert_eq!(roundtrip.dependency_graph.len(), 2);
assert_eq!(roundtrip.semantic_version, Version::new(2, 3, 4));
}
}