From 41b2924ad751ee6717eb669a564636c6895ed218 Mon Sep 17 00:00:00 2001 From: qwjyh Date: Thu, 14 Mar 2024 06:35:11 +0900 Subject: [PATCH] add test for storage add - failure due to name duplication - success with online & subdirectory with two devices - used local git to write test (TODO?: use only git2) --- README.md | 8 +++- tests/cli.rs | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 107 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 19b9410..019e846 100644 --- a/README.md +++ b/README.md @@ -7,14 +7,20 @@ - [x] specify key - [ ] write test for storage subcommand - [x] storage add online - - [ ] storage add directory + - [x] storage add directory - [ ] storage list - [x] update storage bind command - [ ] add storage remove command - [ ] add sync subcommand - [ ] add check subcommand + - [ ] check that all parents exist - [x] reorganize cmd option for storage - [x] use subcommand +- [ ] backup subcommands + - [ ] backup add + - [ ] test for backup add + - [ ] backup list + - [ ] backup done - [ ] no commit option diff --git a/tests/cli.rs b/tests/cli.rs index daf1cad..809fbe1 100644 --- a/tests/cli.rs +++ b/tests/cli.rs @@ -1,6 +1,8 @@ mod cmd_init { - use anyhow::{Ok, Result}; - use assert_cmd::Command; + use std::fs::DirBuilder; + + use anyhow::{anyhow, Ok, Result}; + use assert_cmd::{assert::OutputAssertExt, cargo::CommandCargoExt, Command}; use git2::Repository; use log::trace; use predicates::prelude::predicate; @@ -60,6 +62,38 @@ mod cmd_init { Ok(()) } + #[test] + fn directory_without_parent() -> Result<()> { + // 1st device + let config_dir_1 = assert_fs::TempDir::new()?; + let mut cmd1 = Command::cargo_bin("xdbm")?; + cmd1.arg("-c") + .arg(config_dir_1.path()) + .arg("init") + .arg("first"); + cmd1.assert().success().stdout(predicate::str::contains("")); + + // add storage + let sample_storage = assert_fs::TempDir::new()?; + let mut cmd_add_storage = Command::cargo_bin("xdbm")?; + cmd_add_storage + .arg("-c") + .arg(config_dir_1.path()) + .arg("storage") + .arg("add") + .arg("directory") + .arg("--alias") + .arg("gdrive") + .arg("gdrive") + .arg(sample_storage.path()); + cmd_add_storage + .assert() + .failure() + .stderr(predicate::str::contains("No storages found")); + + Ok(()) + } + #[test] fn two_devices() -> Result<()> { // 1st device @@ -107,6 +141,23 @@ mod cmd_init { assert!( std::fs::read_to_string(config_dir_2.path().join("devices.yml"))?.contains("second") ); + assert!(config_dir_2.join("backups").join("first.yml").exists()); + assert!(config_dir_2.join("backups").join("second.yml").exists()); + + std::process::Command::new("git") + .arg("push") + .current_dir(&config_dir_2) + .assert() + .success(); + // let repo_2 = Repository::open(config_dir_2)?; + // // return Err(anyhow!("{:?}", repo_2.remotes()?.iter().collect::>())); + // let mut repo_2_remote = repo_2.find_remote(repo_2.remotes()?.get(0).unwrap())?; + // repo_2_remote.push(&[] as &[&str], None)?; + std::process::Command::new("git") + .arg("pull") + .current_dir(&config_dir_1) + .assert() + .success(); // Add storage let sample_storage = assert_fs::TempDir::new()?; @@ -129,6 +180,53 @@ mod cmd_init { .assert() .success() .stdout(predicate::str::contains("")); + // Add storage (directory) + let sample_directory = sample_storage.join("foo").join("bar"); + DirBuilder::new() + .recursive(true) + .create(&sample_directory)?; + Command::cargo_bin("xdbm")? + .arg("-c") + .arg(config_dir_1.path()) + .arg("storage") + .arg("add") + .arg("directory") + .arg("--alias") + .arg("docs") + .arg("gdrive_docs") + .arg(&sample_directory) + .assert() + .success() + .stdout(predicate::str::contains("")); + assert!( + std::fs::read_to_string(config_dir_1.join("storages.yml"))?.contains("parent: gdrive1") + ); + + std::process::Command::new("git") + .arg("push") + .current_dir(&config_dir_1) + .assert() + .success(); + std::process::Command::new("git") + .arg("pull") + .current_dir(&config_dir_2) + .assert() + .success(); + + // bind + Command::cargo_bin("xdbm")? + .arg("-c") + .arg(config_dir_2.path()) + .arg("storage") + .arg("bind") + .arg("--alias") + .arg("gdocs") + .arg("--path") + .arg(&sample_directory) + .arg("gdrive_docs") + .assert() + .success() + .stdout(predicate::str::contains("")); Ok(()) }