diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-01-05 20:52:26 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-01-05 20:52:26 +0100 |
| commit | 0fca7c5476099212ed1fa9ed812aa456ba004300 (patch) | |
| tree | 3acacb019691f56a510ddf21f929816e45d21d9a /src/metadata.rs | |
| parent | b17907faf8d9693cef94a6048d802bd4ced9102f (diff) | |
Add tests for utils and metadata
Diffstat (limited to 'src/metadata.rs')
| -rw-r--r-- | src/metadata.rs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/metadata.rs b/src/metadata.rs index fe657e4..d6b3d6a 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -13,6 +13,11 @@ pub struct Metadata { } impl Metadata { + /// Reads `Metadata` from a file or creates a new one. + /// + /// This method will create new metadata if it can't read the file, + /// whether it's because of malformed JSON, UTF-8 or because the file + /// is not readable. pub fn read_or_create(file_path: &PathBuf) -> Metadata { if let Some(metadata) = Metadata::read_metadata_file(file_path) { metadata @@ -28,6 +33,7 @@ impl Metadata { } } + /// Returns the metadata `created_on` as an RFC-2822 string. pub fn created_on_utc(&self) -> Option<String> { let date = OffsetDateTime::from_unix_timestamp_nanos((self.created_on * 1_000_000).into()).ok()?; @@ -41,3 +47,62 @@ impl Metadata { serde_json::from_str(&contents).ok() } } + +#[cfg(test)] +mod tests { + use std::fs::write; + + use super::*; + + use test_utilities::*; + + #[test] + fn test_reads_metadata_if_file_exists() { + let test_dir = setup_test_dir(); + create_test_file( + &test_dir.join("metadata.json"), + "\ +{ + \"id\": \"cool\", + \"created_on\": 1736105008957 +}", + ); + + let metadata = Metadata::read_or_create(&test_dir.join("metadata.json")); + + assert_eq!(metadata.id, "cool"); + assert_eq!(metadata.created_on, 1736105008957); + } + + #[test] + fn test_creates_metadata_if_file_does_not_exist() { + let test_dir = setup_test_dir(); + + assert!(!test_dir.join("metadata.json").exists()); + let metadata = Metadata::read_or_create(&test_dir.join("metadata.json")); + assert_eq!(metadata.created_on.to_string(), metadata.id); + } + + #[test] + fn test_creates_metadata_if_file_is_malformed() { + let test_dir = setup_test_dir(); + write(&test_dir.join("metadata.json"), vec![0xFF, 0xFF]).expect("Failed to write file"); + + let metadata = Metadata::read_or_create(&test_dir.join("metadata.json")); + assert_eq!(metadata.created_on.to_string(), metadata.id); + } + + #[test] + fn test_it_returns_created_on_as_rfc_2822_utc() { + let metadata = Metadata { + id: "cool".to_string(), + created_on: 1736035200000, + }; + + if let Some(created_on_utc) = metadata.created_on_utc() { + assert_eq!(created_on_utc, "Sun, 05 Jan 2025 00:00:00 +0000"); + } else { + panic!("Could not generate RFC-2822 string"); + } + } +} |