#[cfg(feature = "serde")]
mod serde_tests {
use acton_ern::{Account, Category, Domain, EntityRoot, Ern, Part, Parts, SHA1Name};
#[test]
fn test_domain_serialization() {
let domain = Domain::new("test-domain").unwrap();
let json = serde_json::to_string(&domain).unwrap();
assert_eq!(json, "\"test-domain\"");
let deserialized: Domain = serde_json::from_str(&json).unwrap();
assert_eq!(domain, deserialized);
let yaml = serde_yaml::to_string(&domain).unwrap();
assert_eq!(yaml.trim(), "test-domain");
let deserialized: Domain = serde_yaml::from_str(&yaml).unwrap();
assert_eq!(domain, deserialized);
}
#[test]
fn test_category_serialization() {
let category = Category::new("test-category").unwrap();
let json = serde_json::to_string(&category).unwrap();
assert_eq!(json, "\"test-category\"");
let deserialized: Category = serde_json::from_str(&json).unwrap();
assert_eq!(category, deserialized);
let yaml = serde_yaml::to_string(&category).unwrap();
assert_eq!(yaml.trim(), "test-category");
let deserialized: Category = serde_yaml::from_str(&yaml).unwrap();
assert_eq!(category, deserialized);
}
#[test]
fn test_account_serialization() {
let account = Account::new("test-account").unwrap();
let json = serde_json::to_string(&account).unwrap();
assert_eq!(json, "\"test-account\"");
let deserialized: Account = serde_json::from_str(&json).unwrap();
assert_eq!(account, deserialized);
let yaml = serde_yaml::to_string(&account).unwrap();
assert_eq!(yaml.trim(), "test-account");
let deserialized: Account = serde_yaml::from_str(&yaml).unwrap();
assert_eq!(account, deserialized);
}
#[test]
fn test_entity_root_serialization() {
let root = EntityRoot::new("test-root".to_string()).unwrap();
let json = serde_json::to_string(&root).unwrap();
let _deserialized: EntityRoot = serde_json::from_str(&json).unwrap();
let yaml = serde_yaml::to_string(&root).unwrap();
let _deserialized: EntityRoot = serde_yaml::from_str(&yaml).unwrap();
}
#[test]
fn test_part_serialization() {
let part = Part::new("test-part").unwrap();
let json = serde_json::to_string(&part).unwrap();
assert_eq!(json, "\"test-part\"");
let deserialized: Part = serde_json::from_str(&json).unwrap();
assert_eq!(part, deserialized);
let yaml = serde_yaml::to_string(&part).unwrap();
assert_eq!(yaml.trim(), "test-part");
let deserialized: Part = serde_yaml::from_str(&yaml).unwrap();
assert_eq!(part, deserialized);
}
#[test]
fn test_parts_serialization() {
let parts = Parts::new(vec![
Part::new("part1").unwrap(),
Part::new("part2").unwrap(),
Part::new("part3").unwrap(),
]);
let json = serde_json::to_string(&parts).unwrap();
let deserialized: Parts = serde_json::from_str(&json).unwrap();
assert_eq!(parts, deserialized);
let yaml = serde_yaml::to_string(&parts).unwrap();
let deserialized: Parts = serde_yaml::from_str(&yaml).unwrap();
assert_eq!(parts, deserialized);
}
#[test]
fn test_sha1name_serialization() {
let sha1name = SHA1Name::new("test-content".to_string()).unwrap();
let json = serde_json::to_string(&sha1name).unwrap();
let _deserialized: SHA1Name = serde_json::from_str(&json).unwrap();
let yaml = serde_yaml::to_string(&sha1name).unwrap();
let _deserialized: SHA1Name = serde_yaml::from_str(&yaml).unwrap();
}
#[test]
fn test_ern_serialization() {
let ern = Ern::new(
Domain::new("test-domain").unwrap(),
Category::new("test-category").unwrap(),
Account::new("test-account").unwrap(),
EntityRoot::new("test-root".to_string()).unwrap(),
Parts::new(vec![
Part::new("part1").unwrap(),
Part::new("part2").unwrap(),
]),
);
let json = serde_json::to_string(&ern).unwrap();
let _deserialized: Ern = serde_json::from_str(&json).unwrap();
let yaml = serde_yaml::to_string(&ern).unwrap();
let _deserialized: Ern = serde_yaml::from_str(&yaml).unwrap();
}
#[test]
fn test_ern_pretty_json_format() {
let ern = Ern::new(
Domain::new("test-domain").unwrap(),
Category::new("test-category").unwrap(),
Account::new("test-account").unwrap(),
EntityRoot::new("test-root".to_string()).unwrap(),
Parts::new(vec![
Part::new("part1").unwrap(),
Part::new("part2").unwrap(),
]),
);
let pretty_json = serde_json::to_string_pretty(&ern).unwrap();
assert!(pretty_json.contains("\"domain\""));
assert!(pretty_json.contains("\"category\""));
assert!(pretty_json.contains("\"account\""));
assert!(pretty_json.contains("\"root\""));
assert!(pretty_json.contains("\"parts\""));
let _deserialized: Ern = serde_json::from_str(&pretty_json).unwrap();
}
#[test]
fn test_ern_round_trip_json() {
let original_ern = Ern::new(
Domain::new("test-domain").unwrap(),
Category::new("test-category").unwrap(),
Account::new("test-account").unwrap(),
EntityRoot::new("test-root".to_string()).unwrap(),
Parts::new(vec![
Part::new("part1").unwrap(),
Part::new("part2").unwrap(),
]),
);
let json = serde_json::to_string(&original_ern).unwrap();
let deserialized: Ern = serde_json::from_str(&json).unwrap();
assert_eq!(original_ern.domain(), deserialized.domain());
assert_eq!(original_ern.category(), deserialized.category());
assert_eq!(original_ern.account(), deserialized.account());
assert_eq!(original_ern.parts(), deserialized.parts());
}
#[test]
fn test_ern_round_trip_yaml() {
let original_ern = Ern::new(
Domain::new("test-domain").unwrap(),
Category::new("test-category").unwrap(),
Account::new("test-account").unwrap(),
EntityRoot::new("test-root".to_string()).unwrap(),
Parts::new(vec![
Part::new("part1").unwrap(),
Part::new("part2").unwrap(),
]),
);
let yaml = serde_yaml::to_string(&original_ern).unwrap();
let deserialized: Ern = serde_yaml::from_str(&yaml).unwrap();
assert_eq!(original_ern.domain(), deserialized.domain());
assert_eq!(original_ern.category(), deserialized.category());
assert_eq!(original_ern.account(), deserialized.account());
assert_eq!(original_ern.parts(), deserialized.parts());
}
#[test]
fn test_invalid_json_deserialization() {
let invalid_json =
r#"{"domain": "test-domain", "category": "test-category", "invalid": true}"#;
let result: Result<Ern, _> = serde_json::from_str(invalid_json);
assert!(result.is_err());
}
#[test]
fn test_invalid_yaml_deserialization() {
let invalid_yaml = r#"
domain: test-domain
category: test-category
invalid: true
"#;
let result: Result<Ern, _> = serde_yaml::from_str(invalid_yaml);
assert!(result.is_err());
}
}