diff --git a/Cargo.toml b/Cargo.toml index 4d2d2c5..864691a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,9 +7,6 @@ edition = "2024" default = [] log = ["dep:log", "dep:simple_logger"] -[dev-dependencies] -pretty_assertions = "1.4.1" - [dependencies] anyhow = "1.0.95" chrono = "0.4.41" diff --git a/src/comment.rs b/src/comment.rs index 1fa2e36..e042f63 100644 --- a/src/comment.rs +++ b/src/comment.rs @@ -208,21 +208,19 @@ impl Comment { #[cfg(test)] mod tests { use super::*; - use pretty_assertions::assert_eq; #[test] fn read_comment_0() { - let comment_dir = std::path::Path::new( - "test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347", - ); + let comment_dir = + std::path::Path::new("test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347"); let comment = Comment::new_from_dir(comment_dir).unwrap(); let expected = Comment { uuid: String::from("9055dac36045fe36545bed7ae7b49347"), author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T10:08:38-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-07T15:26:26-06:00") .unwrap() .with_timezone(&chrono::Local), - description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe\n\nIt has multiple lines\n"), + description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe95a31561\n\nIt has multiple lines\n"), dir: std::path::PathBuf::from(comment_dir), }; assert_eq!(comment, expected); diff --git a/src/entry.rs b/src/entry.rs new file mode 100644 index 0000000..51b495a --- /dev/null +++ b/src/entry.rs @@ -0,0 +1,151 @@ +use std::io::{Read, Write}; +use thiserror::Error; + +// TODO: i think this method of doing error handling probably has bad scoping +#[derive(Error, Debug)] +pub enum Error { + #[error(transparent)] + IoError(#[from] std::io::Error), + #[error(transparent)] + ParseError(#[from] chrono::ParseError), +} + +pub trait Enterable +where + Self: Sized, +{ + // load the type from a directory path + // TODO: return a result + fn fetch_from_fs(path: &std::path::Path) -> Result; + + // store self in the FS + // TODO: return a result + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error>; +} + +#[derive(PartialEq, Eq, Debug, Clone)] +pub struct Entry { + pub id: String, + pub author: String, + pub creation_time: chrono::DateTime, + pub entry: T, +} + +impl Enterable for Entry { + fn fetch_from_fs(path: &std::path::Path) -> Result { + let id_file_path = path.join("id"); + let mut id_file = std::fs::File::open(&id_file_path)?; + let mut id_buffer = String::new(); + id_file.read_to_string(&mut id_buffer)?; + + // author + let author_file_path = path.join("author"); + let mut author_file = std::fs::File::open(&author_file_path)?; + let mut author_buffer = String::new(); + author_file.read_to_string(&mut author_buffer)?; + + // creation_time + let creation_time_file_path = path.join("creation_time"); + let mut creation_time_file = std::fs::File::open(&creation_time_file_path)?; + let mut creation_time_buffer = String::new(); + creation_time_file.read_to_string(&mut creation_time_buffer)?; + + let entry_file_path_buf = path.join("entry"); + let entry_file_path = entry_file_path_buf.as_path(); + + Ok(Self { + id: id_buffer, + author: author_buffer, + creation_time: chrono::DateTime::<_>::parse_from_rfc3339(&creation_time_buffer)?.into(), + entry: ::fetch_from_fs(entry_file_path)?, + }) + } + + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error> { + // id + let id_file_path = path.join("id"); + let mut id_file = std::fs::File::create(&id_file_path)?; + write!(id_file, "{}", self.id)?; + + // author + let author_file_path = path.join("author"); + let mut author_file = std::fs::File::create(&author_file_path)?; + write!(author_file, "{}", self.author)?; + + // created + let creation_time_file_path = path.join("creation_time"); + let mut creation_time_file = std::fs::File::create(&creation_time_file_path)?; + write!(creation_time_file, "{}", self.creation_time.to_rfc3339())?; + + // entry + // TODO: probably need to figure out better naming than "entry" + // TODO: fix this pathbuf nonsense woooooof + let entry_file_path_buf = path.join("entry"); + let entry_file_path = entry_file_path_buf.as_path(); + self.entry.store_to_fs(entry_file_path)?; + Ok(()) + } +} + +mod test { + + use super::*; + impl Enterable for String { + fn fetch_from_fs(path: &std::path::Path) -> Result { + let mut file = std::fs::File::open(&path)?; + let mut buffer = String::new(); + file.read_to_string(&mut buffer)?; + Ok(buffer) + } + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error> { + let mut file = std::fs::File::create(&path)?; + write!(file, "{}", self)?; + Ok(()) + } + } + + impl Enterable for Vec { + fn fetch_from_fs(path: &std::path::Path) -> Result { + todo!("implement this"); + } + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error> { + todo!("implement this"); + } + } + + #[test] + fn store_load_string_entry() { + let test_path = std::path::Path::new("./test/entry/0000"); + let entry = Entry:: { + id: String::from("87fa3146b90db61c4ea0de182798a0e5"), + author: String::from("test"), + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-22T21:54:42-06:00") + .unwrap() + .with_timezone(&chrono::Local), + entry: String::from("entry string"), + }; + entry.clone().store_to_fs(test_path).unwrap(); + + let fs_entry = Entry::::fetch_from_fs(test_path).unwrap(); + + assert_eq!(entry, fs_entry); + } + + #[test] + fn store_load_vec_string_entry() { + let test_path = std::path::Path::new("./test/entry/0001"); + let entry = Entry::> { + id: String::from("87fa3146b90db61c4ea0de182798a0e5"), + author: String::from("test"), + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-22T21:54:42-06:00") + .unwrap() + .with_timezone(&chrono::Local), + entry: vec![String::from("string 1"), String::from("string 2")], + }; + entry.clone().store_to_fs(test_path).unwrap(); + + let fs_entry = Entry::>::fetch_from_fs(test_path).unwrap(); + + assert_eq!(entry, fs_entry); + } +} diff --git a/src/git.rs b/src/git.rs index 6e70fa8..3a03bac 100644 --- a/src/git.rs +++ b/src/git.rs @@ -502,7 +502,6 @@ fn create_orphan_branch_at_path( #[cfg(test)] mod tests { use super::*; - use pretty_assertions::assert_eq; #[test] fn test_worktree() { diff --git a/src/issue.rs b/src/issue.rs index 06f959f..e3bf9d3 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -143,7 +143,6 @@ impl Issue { .filter(|s| s.len() > 0) .map(|tag| String::from(tag.trim())) .collect(); - tags.sort(); } else if file_name == "comments" && direntry.metadata()?.is_dir() { Self::read_comments(&mut comments, &direntry.path())?; } else { @@ -549,23 +548,22 @@ impl Issue { #[cfg(test)] mod tests { use super::*; - use pretty_assertions::assert_eq; #[test] fn read_issue_0() { - let issue_dir = std::path::Path::new("test/0000/3943fc5c173fdf41c0a22251593cd476/"); + let issue_dir = std::path::Path::new("test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/"); let issue = Issue::new_from_dir(issue_dir).unwrap(); let expected = Issue { - id: String::from("3943fc5c173fdf41c0a22251593cd476"), + id: String::from("3943fc5c173fdf41c0a22251593cd476d96e6c9f"), author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:36:25-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, tags: Vec::::from([ + String::from("tag1"), String::from("TAG2"), String::from("i-am-also-a-tag"), - String::from("tag1"), ]), state: State::New, dependencies: None, @@ -581,12 +579,12 @@ mod tests { #[test] fn read_issue_1() { - let issue_dir = std::path::Path::new("test/0000/7792b063eef6d33e7da5dc1856750c14/"); + let issue_dir = std::path::Path::new("test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/"); let issue = Issue::new_from_dir(issue_dir).unwrap(); let expected = Issue { - id: String::from("7792b063eef6d33e7da5dc1856750c14"), + id: String::from("7792b063eef6d33e7da5dc1856750c149ba678c6"), author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:37:07-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/src/issues.rs b/src/issues.rs index d3c57c0..a01f41c 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -87,7 +87,6 @@ impl Issues { #[cfg(test)] mod tests { use super::*; - use pretty_assertions::assert_eq; #[test] fn read_issues_0000() { @@ -96,13 +95,13 @@ mod tests { let mut expected = Issues::new(); - let uuid = String::from("7792b063eef6d33e7da5dc1856750c14"); + let uuid = String::from("7792b063eef6d33e7da5dc1856750c149ba678c6"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue(crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:37:07-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, @@ -115,21 +114,21 @@ mod tests { dir, }); - let uuid = String::from("3943fc5c173fdf41c0a22251593cd476"); + let uuid = String::from("3943fc5c173fdf41c0a22251593cd476d96e6c9f"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue( crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:36:25-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, tags: Vec::::from([ - String::from("TAG2"), - String::from("i-am-also-a-tag"), String::from("tag1"), + String::from("TAG2"), + String::from("i-am-also-a-tag") ]), state: crate::issue::State::New, dependencies: None, @@ -149,13 +148,13 @@ mod tests { let mut expected = Issues::new(); - let uuid = String::from("3fa5bfd93317ad25772680071d5ac325"); + let uuid = String::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue(crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:37:46-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T11:59:44-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: Some( @@ -172,7 +171,7 @@ mod tests { dir, }); - let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe"); + let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); let mut comment_dir = dir.clone(); @@ -184,8 +183,8 @@ mod tests { crate::comment::Comment { uuid: comment_uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T10:08:38-06:00").unwrap().with_timezone(&chrono::Local), - description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe\n\nIt has multiple lines\n"), + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-07T15:26:26-06:00").unwrap().with_timezone(&chrono::Local), + description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe95a31561\n\nIt has multiple lines\n"), dir: std::path::PathBuf::from(comment_dir), } ); @@ -193,7 +192,7 @@ mod tests { crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T10:08:24-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T11:59:44-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, @@ -216,13 +215,13 @@ mod tests { let mut expected = Issues::new(); - let uuid = String::from("3fa5bfd93317ad25772680071d5ac325"); + let uuid = String::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue(crate::issue::Issue { id: uuid, author: String::from("sigil-03 "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:38:40-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-05T13:55:49-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, @@ -235,14 +234,14 @@ mod tests { dir, }); - let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe"); + let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue( crate::issue::Issue { id: uuid, author: String::from("sigil-03 "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:39:20-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-05T13:55:49-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, @@ -256,22 +255,22 @@ mod tests { }, ); - let uuid = String::from("a85f81fc5f14cb5d4851dd445dc9744c"); + let uuid = String::from("a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue( crate::issue::Issue { id: uuid, author: String::from("sigil-03 "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:39:02-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-05T13:55:49-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, tags: Vec::::new(), state: crate::issue::State::WontDo, dependencies: Some(vec![ - crate::issue::IssueHandle::from("3fa5bfd93317ad25772680071d5ac325"), - crate::issue::IssueHandle::from("dd79c8cfb8beeacd0460429944b4ecbe"), + crate::issue::IssueHandle::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"), + crate::issue::IssueHandle::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"), ]), assignee: None, description: String::from("issue with dependencies\n\na test has begun\nfor dependencies we seek\nintertwining life"), diff --git a/src/lib.rs b/src/lib.rs index b6245b9..740e431 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,6 +6,8 @@ pub mod git; pub mod issue; pub mod issues; +pub mod entry; + use crate::issue::State; #[derive(Debug, thiserror::Error)] diff --git a/test/0000/3943fc5c173fdf41c0a22251593cd476/description b/test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/description similarity index 100% rename from test/0000/3943fc5c173fdf41c0a22251593cd476/description rename to test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/description diff --git a/test/0000/3943fc5c173fdf41c0a22251593cd476/tags b/test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/tags similarity index 100% rename from test/0000/3943fc5c173fdf41c0a22251593cd476/tags rename to test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/tags diff --git a/test/0000/7792b063eef6d33e7da5dc1856750c14/assignee b/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/assignee similarity index 100% rename from test/0000/7792b063eef6d33e7da5dc1856750c14/assignee rename to test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/assignee diff --git a/test/0000/7792b063eef6d33e7da5dc1856750c14/description b/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/description similarity index 100% rename from test/0000/7792b063eef6d33e7da5dc1856750c14/description rename to test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/description diff --git a/test/0000/7792b063eef6d33e7da5dc1856750c14/state b/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/state similarity index 100% rename from test/0000/7792b063eef6d33e7da5dc1856750c14/state rename to test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/state diff --git a/test/0001/3fa5bfd93317ad25772680071d5ac325/description b/test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/description similarity index 100% rename from test/0001/3fa5bfd93317ad25772680071d5ac325/description rename to test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/description diff --git a/test/0001/3fa5bfd93317ad25772680071d5ac325/done_time b/test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/done_time similarity index 100% rename from test/0001/3fa5bfd93317ad25772680071d5ac325/done_time rename to test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/done_time diff --git a/test/0001/3fa5bfd93317ad25772680071d5ac325/state b/test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/state similarity index 100% rename from test/0001/3fa5bfd93317ad25772680071d5ac325/state rename to test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/state diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347/description b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347/description deleted file mode 100644 index daa3d62..0000000 --- a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347/description +++ /dev/null @@ -1,3 +0,0 @@ -This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe - -It has multiple lines diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347/description b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347/description new file mode 100644 index 0000000..f9de678 --- /dev/null +++ b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347/description @@ -0,0 +1,3 @@ +This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe95a31561 + +It has multiple lines diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/description b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description similarity index 100% rename from test/0001/dd79c8cfb8beeacd0460429944b4ecbe/description rename to test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/state b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state similarity index 100% rename from test/0001/dd79c8cfb8beeacd0460429944b4ecbe/state rename to test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state diff --git a/test/0002/3fa5bfd93317ad25772680071d5ac325/description b/test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/description similarity index 100% rename from test/0002/3fa5bfd93317ad25772680071d5ac325/description rename to test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/description diff --git a/test/0002/3fa5bfd93317ad25772680071d5ac325/state b/test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/state similarity index 100% rename from test/0002/3fa5bfd93317ad25772680071d5ac325/state rename to test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/state diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/3fa5bfd93317ad25772680071d5ac325 b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/3fa5bfd93317ad25772680071d5ac3259cd2384f similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/3fa5bfd93317ad25772680071d5ac325 rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/3fa5bfd93317ad25772680071d5ac3259cd2384f diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/dd79c8cfb8beeacd0460429944b4ecbe b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/dd79c8cfb8beeacd0460429944b4ecbe95a31561 similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/dd79c8cfb8beeacd0460429944b4ecbe rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/dd79c8cfb8beeacd0460429944b4ecbe95a31561 diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/description b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/description similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c/description rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/description diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/state b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/state similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c/state rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/state diff --git a/test/0002/dd79c8cfb8beeacd0460429944b4ecbe/description b/test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description similarity index 100% rename from test/0002/dd79c8cfb8beeacd0460429944b4ecbe/description rename to test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description diff --git a/test/0002/dd79c8cfb8beeacd0460429944b4ecbe/state b/test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state similarity index 100% rename from test/0002/dd79c8cfb8beeacd0460429944b4ecbe/state rename to test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state diff --git a/test/entry/0000/author b/test/entry/0000/author new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/test/entry/0000/author @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/test/entry/0000/creation_time b/test/entry/0000/creation_time new file mode 100644 index 0000000..380d475 --- /dev/null +++ b/test/entry/0000/creation_time @@ -0,0 +1 @@ +2025-07-22T21:54:42-06:00 \ No newline at end of file diff --git a/test/entry/0000/entry b/test/entry/0000/entry new file mode 100644 index 0000000..5db03ab --- /dev/null +++ b/test/entry/0000/entry @@ -0,0 +1 @@ +entry string \ No newline at end of file diff --git a/test/entry/0000/id b/test/entry/0000/id new file mode 100644 index 0000000..b209563 --- /dev/null +++ b/test/entry/0000/id @@ -0,0 +1 @@ +87fa3146b90db61c4ea0de182798a0e5 \ No newline at end of file diff --git a/test/entry/0001/author b/test/entry/0001/author new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/test/entry/0001/author @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/test/entry/0001/creation_time b/test/entry/0001/creation_time new file mode 100644 index 0000000..380d475 --- /dev/null +++ b/test/entry/0001/creation_time @@ -0,0 +1 @@ +2025-07-22T21:54:42-06:00 \ No newline at end of file diff --git a/test/entry/0001/id b/test/entry/0001/id new file mode 100644 index 0000000..b209563 --- /dev/null +++ b/test/entry/0001/id @@ -0,0 +1 @@ +87fa3146b90db61c4ea0de182798a0e5 \ No newline at end of file