aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/shirabe/tests/downloader/fossil_downloader_test.rs58
-rw-r--r--crates/shirabe/tests/downloader/hg_downloader_test.rs55
2 files changed, 89 insertions, 24 deletions
diff --git a/crates/shirabe/tests/downloader/fossil_downloader_test.rs b/crates/shirabe/tests/downloader/fossil_downloader_test.rs
index e403229..2c47ac9 100644
--- a/crates/shirabe/tests/downloader/fossil_downloader_test.rs
+++ b/crates/shirabe/tests/downloader/fossil_downloader_test.rs
@@ -9,7 +9,7 @@ use shirabe::downloader::fossil_downloader::FossilDownloader;
use shirabe::io::IOInterface;
use shirabe::package::handle::{CompletePackageHandle, PackageInterfaceHandle};
use shirabe::util::ProcessExecutor;
-use shirabe::util::filesystem::Filesystem;
+use shirabe::util::filesystem::{Filesystem, FilesystemMock};
use shirabe_php_shim::PhpMixed;
use shirabe_semver::VersionParser;
use tempfile::TempDir;
@@ -72,6 +72,7 @@ fn get_downloader_mock(
io: Option<Rc<RefCell<dyn IOInterface>>>,
config: Option<Config>,
process: Rc<RefCell<ProcessExecutor>>,
+ filesystem: Option<Rc<RefCell<Filesystem>>>,
) -> FossilDownloader {
let io =
io.unwrap_or_else(|| Rc::new(RefCell::new(IOStub::new())) as Rc<RefCell<dyn IOInterface>>);
@@ -81,7 +82,7 @@ fn get_downloader_mock(
.with("secure-http", PhpMixed::Bool(false))
.build()
})));
- let fs = Rc::new(RefCell::new(Filesystem::new(None)));
+ let fs = filesystem.unwrap_or_else(|| Rc::new(RefCell::new(Filesystem::new(None))));
FossilDownloader::new(io, config, process, fs)
}
@@ -93,7 +94,7 @@ fn test_install_for_package_without_source_reference() {
let package = get_package(None, None);
let (process, _guard) = get_process_executor_mock(vec![], false, Default::default());
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
let path = format!("{}/path", working_dir.path().to_string_lossy());
let result = run(downloader.install(package, &path));
@@ -127,7 +128,7 @@ fn test_install() {
Default::default(),
);
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
run(downloader.install(package, &working_dir_str)).unwrap();
}
@@ -140,7 +141,7 @@ fn test_updatefor_package_without_source_reference() {
let source_package = get_package(None, None);
let (process, _guard) = get_process_executor_mock(vec![], false, Default::default());
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
let result = run(async {
downloader
@@ -188,7 +189,7 @@ fn test_update() {
Default::default(),
);
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
run(async {
downloader
.prepare(
@@ -210,15 +211,48 @@ fn test_update() {
});
}
-#[ignore = "PHP mocks Filesystem::removeDirectoryAsync; with a real Filesystem the actual \
- removeDirectoryAsync drives its own ProcessExecutor for `rm -rf` through the \
- unported execute_async mock seam"]
#[test]
fn test_remove() {
let working_dir = set_up();
let _tear_down = TearDown::new(working_dir.path().to_path_buf());
- let _ = &working_dir;
- todo!()
+ let working_dir_str = working_dir.path().to_string_lossy().into_owned();
+
+ // Ensure file exists
+ let file = format!("{}/.fslckout", working_dir_str);
+ std::fs::File::create(&file).unwrap();
+
+ let package = get_package(None, None);
+
+ let (process, _guard) = get_process_executor_mock(
+ vec![crate::process_executor_mock::cmd(vec!["fossil", "changes"])],
+ true,
+ Default::default(),
+ );
+
+ let mut filesystem = Filesystem::new(None);
+ filesystem.__set_mock(FilesystemMock {
+ remove_directory_async_result: Some(true),
+ ..Default::default()
+ });
+ let filesystem = Rc::new(RefCell::new(filesystem));
+
+ let mut downloader = get_downloader_mock(None, None, process, Some(filesystem.clone()));
+ run(async {
+ downloader
+ .prepare("uninstall", package.clone(), &working_dir_str, None)
+ .await
+ .unwrap();
+ downloader
+ .remove(package.clone(), &working_dir_str)
+ .await
+ .unwrap();
+ downloader
+ .cleanup("uninstall", package, &working_dir_str, None)
+ .await
+ .unwrap();
+ });
+
+ assert_eq!(filesystem.borrow().__remove_directory_async_calls(), 1);
}
#[test]
@@ -228,7 +262,7 @@ fn test_get_installation_source() {
let _ = &working_dir;
let (process, _guard) = get_process_executor_mock(vec![], false, Default::default());
- let downloader = get_downloader_mock(None, None, process);
+ let downloader = get_downloader_mock(None, None, process, None);
assert_eq!("source", downloader.get_installation_source());
}
diff --git a/crates/shirabe/tests/downloader/hg_downloader_test.rs b/crates/shirabe/tests/downloader/hg_downloader_test.rs
index c331533..28483f5 100644
--- a/crates/shirabe/tests/downloader/hg_downloader_test.rs
+++ b/crates/shirabe/tests/downloader/hg_downloader_test.rs
@@ -9,7 +9,7 @@ use shirabe::downloader::hg_downloader::HgDownloader;
use shirabe::io::IOInterface;
use shirabe::package::handle::{CompletePackageHandle, PackageInterfaceHandle};
use shirabe::util::ProcessExecutor;
-use shirabe::util::filesystem::Filesystem;
+use shirabe::util::filesystem::{Filesystem, FilesystemMock};
use shirabe_semver::VersionParser;
use tempfile::TempDir;
@@ -74,13 +74,14 @@ fn get_downloader_mock(
io: Option<Rc<RefCell<dyn IOInterface>>>,
config: Option<Config>,
process: Rc<RefCell<ProcessExecutor>>,
+ filesystem: Option<Rc<RefCell<Filesystem>>>,
) -> HgDownloader {
let io =
io.unwrap_or_else(|| Rc::new(RefCell::new(IOStub::new())) as Rc<RefCell<dyn IOInterface>>);
let config = Rc::new(RefCell::new(
config.unwrap_or_else(|| Config::new(false, None)),
));
- let fs = Rc::new(RefCell::new(Filesystem::new(None)));
+ let fs = filesystem.unwrap_or_else(|| Rc::new(RefCell::new(Filesystem::new(None))));
HgDownloader::new(io, config, process, fs)
}
@@ -93,7 +94,7 @@ fn test_download_for_package_without_source_reference() {
let package = get_package(None, None);
let (process, _guard) = get_process_executor_mock(vec![], false, Default::default());
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
let result = run(downloader.install(package, "/path"));
let e = result.expect_err("missing source reference should throw");
@@ -123,7 +124,7 @@ fn test_download() {
Default::default(),
);
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
run(downloader.install(package, &working_dir_str)).unwrap();
}
@@ -137,7 +138,7 @@ fn test_updatefor_package_without_source_reference() {
let source_package = get_package(None, None);
let (process, _guard) = get_process_executor_mock(vec![], false, Default::default());
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
let result = run(async {
downloader
@@ -183,7 +184,7 @@ fn test_update() {
Default::default(),
);
- let mut downloader = get_downloader_mock(None, None, process);
+ let mut downloader = get_downloader_mock(None, None, process, None);
run(async {
downloader
.prepare(
@@ -205,15 +206,45 @@ fn test_update() {
});
}
-#[ignore = "PHP mocks Filesystem::removeDirectoryAsync; with a real Filesystem the actual \
- removeDirectoryAsync drives its own ProcessExecutor for `rm -rf` through the \
- unported execute_async mock seam"]
#[test]
fn test_remove() {
let working_dir = set_up();
let _tear_down = TearDown::new(working_dir.path().to_path_buf());
- let _ = &working_dir;
- todo!()
+ let working_dir_str = working_dir.path().to_string_lossy().into_owned();
+
+ let mut fs = Filesystem::new(None);
+ fs.ensure_directory_exists(&format!("{}/.hg", working_dir_str))
+ .unwrap();
+
+ let package = get_package(None, None);
+
+ let (process, _guard) =
+ get_process_executor_mock(vec![cmd(vec!["hg", "st"])], true, Default::default());
+
+ let mut filesystem = Filesystem::new(None);
+ filesystem.__set_mock(FilesystemMock {
+ remove_directory_async_result: Some(true),
+ ..Default::default()
+ });
+ let filesystem = Rc::new(RefCell::new(filesystem));
+
+ let mut downloader = get_downloader_mock(None, None, process, Some(filesystem.clone()));
+ run(async {
+ downloader
+ .prepare("uninstall", package.clone(), &working_dir_str, None)
+ .await
+ .unwrap();
+ downloader
+ .remove(package.clone(), &working_dir_str)
+ .await
+ .unwrap();
+ downloader
+ .cleanup("uninstall", package, &working_dir_str, None)
+ .await
+ .unwrap();
+ });
+
+ assert_eq!(filesystem.borrow().__remove_directory_async_calls(), 1);
}
#[test]
@@ -223,7 +254,7 @@ fn test_get_installation_source() {
let _ = &working_dir;
let (process, _guard) = get_process_executor_mock(vec![], false, Default::default());
- let downloader = get_downloader_mock(None, None, process);
+ let downloader = get_downloader_mock(None, None, process, None);
assert_eq!("source", downloader.get_installation_source());
}