diff options
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/vcs/src/constants.rs | 3 | ||||
| -rw-r--r-- | crates/vcs/src/data/vault.rs | 20 | ||||
| -rw-r--r-- | crates/vcs/src/data/vault/sheets.rs | 25 | ||||
| -rw-r--r-- | crates/vcs/vcs_test/src/test_sheet_creation_management_and_persistence.rs | 31 |
4 files changed, 59 insertions, 20 deletions
diff --git a/crates/vcs/src/constants.rs b/crates/vcs/src/constants.rs index 05fcd1f..5e147c4 100644 --- a/crates/vcs/src/constants.rs +++ b/crates/vcs/src/constants.rs @@ -7,6 +7,9 @@ pub const PATH_TEMP: &str = "./.temp/"; // Default Port pub const PORT: u16 = 25331; +// Vault Host Name +pub const VAULT_HOST_NAME: &str = "host"; + // Server // Server - Vault (Main) pub const SERVER_FILE_VAULT: &str = "./vault.toml"; // crates::env::vault::vault_config diff --git a/crates/vcs/src/data/vault.rs b/crates/vcs/src/data/vault.rs index 152836e..5b34c6f 100644 --- a/crates/vcs/src/data/vault.rs +++ b/crates/vcs/src/data/vault.rs @@ -9,10 +9,10 @@ use cfg_file::config::ConfigFile; use crate::{ constants::{ SERVER_FILE_README, SERVER_FILE_VAULT, SERVER_PATH_MEMBER_PUB, SERVER_PATH_MEMBERS, - SERVER_PATH_SHEETS, SERVER_PATH_VF_ROOT, + SERVER_PATH_SHEETS, SERVER_PATH_VF_ROOT, VAULT_HOST_NAME, }, current::{current_vault_path, find_vault_path}, - data::vault::config::VaultConfig, + data::{member::Member, vault::config::VaultConfig}, }; pub mod config; @@ -71,6 +71,22 @@ impl Vault { // 5. Setup storage directory create_dir_all(vault_path.join(SERVER_PATH_VF_ROOT))?; + let Some(vault) = Vault::init(config, &vault_path) else { + return Err(std::io::Error::other( + "Failed to initialize vault", + )); + }; + + // 6. Create host member + vault + .register_member_to_vault(Member::new(VAULT_HOST_NAME)) + .await?; + + // 7. Setup reference sheet + vault + .create_sheet(&"ref".to_string(), &VAULT_HOST_NAME.to_string()) + .await?; + // Final, generate README.md let readme_content = format!( "\ diff --git a/crates/vcs/src/data/vault/sheets.rs b/crates/vcs/src/data/vault/sheets.rs index dfad862..bcd5779 100644 --- a/crates/vcs/src/data/vault/sheets.rs +++ b/crates/vcs/src/data/vault/sheets.rs @@ -53,11 +53,13 @@ impl Vault { let path = entry.path(); // Check if it's a YAML file - if path.is_file() && path.extension().is_some_and(|ext| ext == "yaml") - && let Some(file_stem) = path.file_stem().and_then(|s| s.to_str()) { - // Create a new SheetName and add it to the result list - sheet_names.push(file_stem.to_string()); - } + if path.is_file() + && path.extension().is_some_and(|ext| ext == "yaml") + && let Some(file_stem) = path.file_stem().and_then(|s| s.to_str()) + { + // Create a new SheetName and add it to the result list + sheet_names.push(file_stem.to_string()); + } } Ok(sheet_names) @@ -229,13 +231,14 @@ impl Vault { let path = entry.path(); if path.is_file() - && let Some(file_name) = path.file_stem().and_then(|s| s.to_str()) { - // Check if the filename starts with the sheet name - if file_name.starts_with(&sheet_name) { - found_path = Some(path); - break; - } + && let Some(file_name) = path.file_stem().and_then(|s| s.to_str()) + { + // Check if the filename starts with the sheet name + if file_name.starts_with(&sheet_name) { + found_path = Some(path); + break; } + } } let trash_path = found_path.ok_or_else(|| { diff --git a/crates/vcs/vcs_test/src/test_sheet_creation_management_and_persistence.rs b/crates/vcs/vcs_test/src/test_sheet_creation_management_and_persistence.rs index 7fe6955..1c7182b 100644 --- a/crates/vcs/vcs_test/src/test_sheet_creation_management_and_persistence.rs +++ b/crates/vcs/vcs_test/src/test_sheet_creation_management_and_persistence.rs @@ -111,19 +111,33 @@ async fn test_sheet_creation_management_and_persistence() -> Result<(), std::io: // Test 7: List all sheets in vault let sheet_names = vault.sheet_names()?; - assert_eq!(sheet_names.len(), 1); - assert_eq!(sheet_names[0], sheet_name); + assert_eq!(sheet_names.len(), 2); + assert!(sheet_names.contains(&sheet_name)); + assert!(sheet_names.contains(&"ref".to_string())); let all_sheets = vault.sheets().await?; - assert_eq!(all_sheets.len(), 1); - assert_eq!(all_sheets[0].holder(), &member_id); + assert_eq!(all_sheets.len(), 2); + // One sheet should be the test sheet, the other should be the ref sheet with host as holder + let test_sheet_holder = all_sheets + .iter() + .find(|s| s.holder() == &member_id) + .map(|s| s.holder()) + .unwrap(); + let ref_sheet_holder = all_sheets + .iter() + .find(|s| s.holder() == &"host".to_string()) + .map(|s| s.holder()) + .unwrap(); + assert_eq!(test_sheet_holder, &member_id); + assert_eq!(ref_sheet_holder, &"host".to_string()); // Test 8: Safe deletion (move to trash) vault.delete_sheet_safely(&sheet_name).await?; // Verify sheet is not in normal listing but can be restored let sheet_names_after_deletion = vault.sheet_names()?; - assert_eq!(sheet_names_after_deletion.len(), 0); + assert_eq!(sheet_names_after_deletion.len(), 1); + assert_eq!(sheet_names_after_deletion[0], "ref"); // Test 9: Restore sheet from trash let restored_sheet = vault.sheet(&sheet_name).await?; @@ -132,14 +146,17 @@ async fn test_sheet_creation_management_and_persistence() -> Result<(), std::io: // Verify sheet is back in normal listing let sheet_names_after_restore = vault.sheet_names()?; - assert_eq!(sheet_names_after_restore.len(), 1); + assert_eq!(sheet_names_after_restore.len(), 2); + assert!(sheet_names_after_restore.contains(&sheet_name)); + assert!(sheet_names_after_restore.contains(&"ref".to_string())); // Test 10: Permanent deletion vault.delete_sheet(&sheet_name).await?; // Verify sheet is permanently gone let sheet_names_final = vault.sheet_names()?; - assert_eq!(sheet_names_final.len(), 0); + assert_eq!(sheet_names_final.len(), 1); + assert_eq!(sheet_names_final[0], "ref"); // Attempt to access deleted sheet should fail let result = vault.sheet(&sheet_name).await; |
