feat(package): add archiver tests
This commit is contained in:
		
							parent
							
								
									c9e8f3e480
								
							
						
					
					
						commit
						2c955198ff
					
				| 
						 | 
				
			
			@ -105,5 +105,131 @@ impl Archiver for DefaultArchiver {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO: test
 | 
			
		||||
// TODO: test what happens with "legacy" packages
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
  use std::fs::{create_dir_all, write};
 | 
			
		||||
  use tempdir::TempDir;
 | 
			
		||||
 | 
			
		||||
  use crate::{manifest::Manifest, package::DefaultPackage, tests::run_with_temp_dir};
 | 
			
		||||
 | 
			
		||||
  use super::*;
 | 
			
		||||
 | 
			
		||||
  fn create_fake_package(dest_dir: &Path) -> Box<dyn Package> {
 | 
			
		||||
    let package_dir = dest_dir.join("package1");
 | 
			
		||||
    create_dir_all(&package_dir).unwrap();
 | 
			
		||||
 | 
			
		||||
    write(
 | 
			
		||||
      package_dir.join("_manifest.yml"),
 | 
			
		||||
      r#"
 | 
			
		||||
name: "package1"
 | 
			
		||||
title: "Dummy package"
 | 
			
		||||
description: A dummy package for testing
 | 
			
		||||
version: 0.1.0
 | 
			
		||||
author: Federico Terzi
 | 
			
		||||
    "#,
 | 
			
		||||
    )
 | 
			
		||||
    .unwrap();
 | 
			
		||||
 | 
			
		||||
    write(
 | 
			
		||||
      package_dir.join("package.yml"),
 | 
			
		||||
      r#"
 | 
			
		||||
matches:
 | 
			
		||||
  - trigger: ":hello"
 | 
			
		||||
    replace: "github"name: "package1"
 | 
			
		||||
    "#,
 | 
			
		||||
    )
 | 
			
		||||
    .unwrap();
 | 
			
		||||
 | 
			
		||||
    write(
 | 
			
		||||
      package_dir.join("README.md"),
 | 
			
		||||
      r#"
 | 
			
		||||
    A very dummy package
 | 
			
		||||
    "#,
 | 
			
		||||
    )
 | 
			
		||||
    .unwrap();
 | 
			
		||||
 | 
			
		||||
    let package = DefaultPackage::new(
 | 
			
		||||
      Manifest::parse(&package_dir.join("_manifest.yml")).unwrap(),
 | 
			
		||||
      TempDir::new("fake-package").unwrap(),
 | 
			
		||||
      package_dir,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    Box::new(package)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  fn run_with_two_temp_dirs(action: impl FnOnce(&Path, &Path)) {
 | 
			
		||||
    run_with_temp_dir(|base| {
 | 
			
		||||
      let dir1 = base.join("dir1");
 | 
			
		||||
      let dir2 = base.join("dir2");
 | 
			
		||||
      create_dir_all(&dir1).unwrap();
 | 
			
		||||
      create_dir_all(&dir2).unwrap();
 | 
			
		||||
      action(&dir1, &dir2);
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #[test]
 | 
			
		||||
  fn test_package_saved_correctly() {
 | 
			
		||||
    run_with_two_temp_dirs(|package_dir, dest_dir| {
 | 
			
		||||
      let package = create_fake_package(package_dir);
 | 
			
		||||
 | 
			
		||||
      let archiver = DefaultArchiver::new(dest_dir);
 | 
			
		||||
      let result = archiver.save(
 | 
			
		||||
        &*package,
 | 
			
		||||
        &PackageSpecifier {
 | 
			
		||||
          name: "package1".to_string(),
 | 
			
		||||
          git_repo_url: Some("https://github.com/espanso/dummy-package".to_string()),
 | 
			
		||||
          git_branch: Some("main".to_string()),
 | 
			
		||||
          ..Default::default()
 | 
			
		||||
        },
 | 
			
		||||
        &SaveOptions::default(),
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      assert!(result.is_ok());
 | 
			
		||||
 | 
			
		||||
      let package_out_dir = dest_dir.join("package1");
 | 
			
		||||
      assert!(package_out_dir.is_dir());
 | 
			
		||||
      assert!(package_out_dir.join("_manifest.yml").is_file());
 | 
			
		||||
      assert!(package_out_dir.join("README.md").is_file());
 | 
			
		||||
      assert!(package_out_dir.join("package.yml").is_file());
 | 
			
		||||
      assert!(package_out_dir.join("_pkgsource.yml").is_file());
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #[test]
 | 
			
		||||
  fn test_package_already_present() {
 | 
			
		||||
    run_with_two_temp_dirs(|package_dir, dest_dir| {
 | 
			
		||||
      let package = create_fake_package(package_dir);
 | 
			
		||||
 | 
			
		||||
      create_dir_all(dest_dir.join("package1")).unwrap();
 | 
			
		||||
 | 
			
		||||
      let archiver = DefaultArchiver::new(dest_dir);
 | 
			
		||||
      let result = archiver.save(
 | 
			
		||||
        &*package,
 | 
			
		||||
        &PackageSpecifier {
 | 
			
		||||
          name: "package1".to_string(),
 | 
			
		||||
          git_repo_url: Some("https://github.com/espanso/dummy-package".to_string()),
 | 
			
		||||
          git_branch: Some("main".to_string()),
 | 
			
		||||
          ..Default::default()
 | 
			
		||||
        },
 | 
			
		||||
        &SaveOptions::default(),
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      assert!(result.is_err());
 | 
			
		||||
 | 
			
		||||
      let result = archiver.save(
 | 
			
		||||
        &*package,
 | 
			
		||||
        &PackageSpecifier {
 | 
			
		||||
          name: "package1".to_string(),
 | 
			
		||||
          git_repo_url: Some("https://github.com/espanso/dummy-package".to_string()),
 | 
			
		||||
          git_branch: Some("main".to_string()),
 | 
			
		||||
          ..Default::default()
 | 
			
		||||
        },
 | 
			
		||||
        &SaveOptions {
 | 
			
		||||
          overwrite_existing: true,
 | 
			
		||||
        },
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      assert!(result.is_ok());
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,3 +82,16 @@ pub fn get_provider(package: &PackageSpecifier) -> Result<Box<dyn PackageProvide
 | 
			
		|||
pub fn get_archiver(package_dir: &Path) -> Result<Box<dyn Archiver>> {
 | 
			
		||||
  Ok(Box::new(archive::default::DefaultArchiver::new(package_dir)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
pub(crate) mod tests {
 | 
			
		||||
  use super::*;
 | 
			
		||||
  use tempdir::TempDir;
 | 
			
		||||
 | 
			
		||||
  pub(crate) fn run_with_temp_dir(action: impl FnOnce(&Path)) {
 | 
			
		||||
    let tmp_dir = TempDir::new("espanso-package").unwrap();
 | 
			
		||||
    let tmp_path = tmp_dir.path();
 | 
			
		||||
 | 
			
		||||
    action(&tmp_path);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -104,15 +104,9 @@ fn find_all_manifests(base_dir: &Path) -> Result<Vec<PathBuf>> {
 | 
			
		|||
mod tests {
 | 
			
		||||
  use std::fs::create_dir_all;
 | 
			
		||||
 | 
			
		||||
  use crate::tests::run_with_temp_dir;
 | 
			
		||||
 | 
			
		||||
  use super::*;
 | 
			
		||||
  use tempdir::TempDir;
 | 
			
		||||
 | 
			
		||||
  fn run_with_temp_dir(action: impl FnOnce(&Path)) {
 | 
			
		||||
    let tmp_dir = TempDir::new("espanso-package").unwrap();
 | 
			
		||||
    let tmp_path = tmp_dir.path();
 | 
			
		||||
 | 
			
		||||
    action(&tmp_path);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #[test]
 | 
			
		||||
  fn test_read_manifest_base_dir() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user