mod common;
use common::create_test_datastore;
#[test]
fn test_datastore_creation() {
let (datastore, _temp_dir) = create_test_datastore();
assert!(datastore.get_pods_dir().exists());
assert!(datastore.get_pointers_dir().exists());
assert!(datastore.get_scratchpads_dir().exists());
assert!(datastore.get_downloads_path().exists());
}
#[test]
fn test_pointer_operations() {
let (datastore, _temp_dir) = create_test_datastore();
let address = "test_pointer_address";
let target = "test_target_address";
datastore.create_pointer_file(address).unwrap();
assert!(datastore.address_is_pointer(address).unwrap());
datastore.update_pointer_target(address, target).unwrap();
let retrieved_target = datastore.get_pointer_target(address).unwrap();
assert_eq!(retrieved_target, target);
datastore.update_pointer_count(address, 5).unwrap();
let count = datastore.get_pointer_count(address).unwrap();
assert_eq!(count, 5);
}
#[test]
fn test_scratchpad_operations() {
let (datastore, _temp_dir) = create_test_datastore();
let address = "test_scratchpad_address";
let data = "test scratchpad data content";
datastore.create_scratchpad_file(address).unwrap();
assert!(datastore.address_is_scratchpad(address).unwrap());
datastore.update_scratchpad_data(address, data).unwrap();
let retrieved_data = datastore.get_scratchpad_data(address).unwrap();
assert_eq!(retrieved_data, data);
}
#[test]
fn test_update_list_operations() {
let (datastore, _temp_dir) = create_test_datastore();
let address1 = "address1";
let address2 = "address2";
datastore.append_update_list(address1).unwrap();
datastore.append_update_list(address2).unwrap();
let update_list_path = datastore.get_update_list_path();
assert!(update_list_path.exists());
assert!(update_list_path.extension().unwrap() == "json");
let update_list = datastore.get_update_list().unwrap();
assert!(update_list.pods.contains_key(address1));
assert!(update_list.pods.contains_key(address2));
}
#[test]
fn test_address_validation() {
let (datastore, _temp_dir) = create_test_datastore();
let non_existent_address = "non_existent_address";
assert!(!datastore.address_is_pointer(non_existent_address).unwrap());
assert!(
!datastore
.address_is_scratchpad(non_existent_address)
.unwrap()
);
}
#[test]
fn test_path_getters() {
let (datastore, temp_dir) = create_test_datastore();
assert!(datastore.get_pods_dir().starts_with(temp_dir.path()));
assert!(datastore.get_pointers_dir().starts_with(temp_dir.path()));
assert!(datastore.get_scratchpads_dir().starts_with(temp_dir.path()));
assert!(datastore.get_downloads_path().starts_with(temp_dir.path()));
assert!(datastore.get_data_path().starts_with(temp_dir.path()));
assert!(datastore.get_keystore_path().starts_with(temp_dir.path()));
assert!(datastore.get_graph_path().starts_with(temp_dir.path()));
assert!(
datastore
.get_update_list_path()
.starts_with(temp_dir.path())
);
}
#[test]
fn test_error_handling() {
let (datastore, _temp_dir) = create_test_datastore();
let non_existent_address = "non_existent_address";
assert!(datastore.get_pointer_target(non_existent_address).is_err());
assert!(datastore.get_pointer_count(non_existent_address).is_err());
assert!(datastore.get_scratchpad_data(non_existent_address).is_err());
}
#[test]
fn test_duplicate_update_list_entries() {
let (datastore, _temp_dir) = create_test_datastore();
let address = "duplicate_test_address";
datastore.append_update_list(address).unwrap();
datastore.append_update_list(address).unwrap();
datastore.append_update_list(address).unwrap();
let update_list = datastore.get_update_list().unwrap();
assert_eq!(update_list.pods.len(), 1);
assert!(update_list.pods.contains_key(address));
}