#[cfg(test)]
mod tests {
use crate::storage_id::*;
use crate::StorageId;
use color_eyre::Result;
#[test]
fn test_random_id() -> Result<()> {
let id1 = RandomId::new();
println!("Generated random ID: {}", id1);
let id_str = id1.to_string();
let id2 = RandomId::from_string(&id_str)?;
assert_eq!(id1, id2);
let id3 = RandomId::generate_new(None);
assert_ne!(id1, id3);
let id4 = RandomId::generate_new(Some(&id1));
assert_ne!(id1, id4);
assert!(RandomId::is_valid_format(&id_str));
Ok(())
}
#[test]
fn test_sequential_id() -> Result<()> {
let id1 = SequentialId::new(1);
println!("Initial sequential ID: {}", id1);
let id_str = id1.to_string();
let id2 = SequentialId::from_string(&id_str)?;
assert_eq!(id1, id2);
let id3 = SequentialId::generate_new(None);
assert_eq!(id3.value(), 1);
let id4 = SequentialId::generate_new(Some(&id1));
assert_eq!(id4.value(), 2);
assert!(SequentialId::is_valid_format("123"));
assert!(!SequentialId::is_valid_format("abc"));
Ok(())
}
#[test]
fn test_external_id() -> Result<()> {
let id1 = ExternalId::new("facebook", "12345678");
println!("External ID: {}", id1);
let id_str = id1.to_string();
let id2 = ExternalId::from_string(&id_str)?;
assert_eq!(id1, id2);
assert_eq!(id1.prefix(), "facebook");
assert_eq!(id1.id(), "12345678");
assert!(ExternalId::is_valid_format("facebook:12345678"));
assert!(!ExternalId::is_valid_format("facebook"));
assert!(!ExternalId::is_valid_format("facebook:"));
assert!(!ExternalId::is_valid_format(":12345678"));
assert!(ExternalId::from_string("invalid").is_err());
Ok(())
}
}