entrust-core 0.6.0

En-/decryption and password store management for entrust
Documentation
use std::fs::File;
use std::{fs, io};
use tempfile::{TempDir, tempdir};

fn setup_test_store() -> io::Result<TempDir> {
    let temp_dir = tempdir()?;
    File::create(temp_dir.path().join("file1"))?;
    File::create(temp_dir.path().join("file2"))?;
    let dir1 = temp_dir.path().join("dir1");
    fs::create_dir_all(&dir1)?;
    File::create(dir1.join("file1"))?;
    File::create(dir1.join("file2"))?;
    let dir2 = temp_dir.path().join("dir2");
    fs::create_dir_all(&dir2)?;
    File::create(dir2.join("pass"))?;
    println!("test_store: {}", temp_dir.path().display());
    Ok(temp_dir)
}

#[test]
fn test_get_all() -> anyhow::Result<()> {
    let test_store = setup_test_store()?;
    let mut existing = entrust_core::get_existing_locations(test_store.path())?;
    existing.files.sort();
    assert_eq!(
        vec!["dir1/file1", "dir1/file2", "dir2/pass", "file1", "file2"],
        existing.files
    );
    existing.dirs.sort();
    assert_eq!(vec!["dir1/", "dir2/"], existing.dirs);
    Ok(())
}

#[test]
fn test_resolve_existing() -> anyhow::Result<()> {
    let test_store = setup_test_store()?;
    let file1 = entrust_core::resolve_existing_location(test_store.path(), "file1", false)?;
    assert_eq!(test_store.path().join("file1"), file1);

    let dir1 = entrust_core::resolve_existing_location(test_store.path(), "dir1", true)?;
    assert_eq!(test_store.path().join("dir1"), dir1);
    assert!(entrust_core::resolve_existing_location(test_store.path(), "dir1", false).is_err());

    let dir1_file1 =
        entrust_core::resolve_existing_location(test_store.path(), "dir1/file1", false)?;
    assert_eq!(test_store.path().join("dir1/file1"), dir1_file1);

    let dir2 = entrust_core::resolve_existing_location(test_store.path(), "dir2", true)?;
    assert_eq!(test_store.path().join("dir2"), dir2);
    let dir2_pass = entrust_core::resolve_existing_location(test_store.path(), "dir2", false)?;
    assert_eq!(test_store.path().join("dir2/pass"), dir2_pass);

    assert!(
        entrust_core::resolve_existing_location(test_store.path(), "no such file", true).is_err()
    );

    Ok(())
}

#[test]
fn test_resolve_new() -> anyhow::Result<()> {
    let test_store = setup_test_store()?;

    let new = entrust_core::resolve_new_location(test_store.path(), "new")?;
    assert_eq!(test_store.path().join("new"), new);

    let new_in_new_dir = entrust_core::resolve_new_location(test_store.path(), "new_dir/new")?;
    assert_eq!(test_store.path().join("new_dir/new"), new_in_new_dir);

    assert!(entrust_core::resolve_new_location(test_store.path(), "file1").is_err());

    Ok(())
}