use prikk_object::{ObjectEnvelope, ObjectType};
use crate::{FileObjectStore, MemoryObjectStore, ObjectReader, ObjectWriter, RepositoryLayout};
use crate::test_support::{dummy_signature, unique_temp_dir};
#[test]
fn memory_store_roundtrips_object() {
let mut store = MemoryObjectStore::new();
let envelope = ObjectEnvelope::unsigned(ObjectType::Blob, 1, b"payload".to_vec());
let id = store.write_object(&envelope);
assert!(id.is_ok());
if let Ok(id) = id {
let read = store.read_object(id);
assert_eq!(read, Ok(Some(envelope)));
}
}
#[test]
fn repository_init_creates_required_directories() {
let root = unique_temp_dir("layout");
let layout = RepositoryLayout::init(root.clone());
assert!(layout.is_ok());
if let Ok(layout) = layout {
for dir in layout.required_directories() {
assert!(dir.is_dir(), "missing directory: {}", dir.display());
}
assert!(layout.default_queue_wal_path().parent().is_some());
}
let _ = std::fs::remove_dir_all(root);
}
#[test]
fn file_store_roundtrips_signed_object() {
let root = unique_temp_dir("filestore");
let layout = RepositoryLayout::init(root.clone());
assert!(layout.is_ok());
if let Ok(layout) = layout {
let mut envelope = ObjectEnvelope::unsigned(ObjectType::Blob, 1, b"payload".to_vec());
assert!(envelope.add_signature(dummy_signature()).is_ok());
let mut store = FileObjectStore::new(layout);
let id = store.write_object(&envelope);
assert!(id.is_ok());
if let Ok(id) = id {
let read = store.read_object(id);
assert_eq!(read, Ok(Some(envelope)));
}
}
let _ = std::fs::remove_dir_all(root);
}