med_core 0.6.4

A Rust Powered Core Engine for M.E.D. Masking, Encryption, and Decryption CSV/JSON
Documentation
use crate::app::core::App;
use crate::models::enums::{FileType, Mode};
use crate::models::params::Params;
use crate::utils::error::MedErrorType::ConfigError;
use crate::utils::error::{MedError, MedErrorType};

#[tokio::test]
async fn test_csv_mask_app() {
    let new_params = Params {
        conf_path: "../demo/conf/conf_csv.yaml".to_owned(),
        debug: true,
        ..Default::default()
    };

    let mut new_app = App::new(new_params.clone()).await.unwrap();
    assert_eq!(new_app.hostname, whoami::hostname());
    assert_eq!(new_app.params, new_params);
    assert_eq!(new_app.user, whoami::username());

    let metrics = new_app.process().await.unwrap();
    assert_eq!(metrics.total_files, 0);
}

#[tokio::test]
async fn test_load_job_config() {
    let new_params = Params {
        conf_path: "../demo/conf/conf_csv.yaml".to_owned(),
        debug: false,
        ..Default::default()
    };

    let new_app = App::new(new_params).await.unwrap();
    let conf = new_app.load_job_config().await.unwrap();
    assert_eq!(conf.mask_symbols, "#####".to_string());
}

#[tokio::test]
async fn test_load_job_config_failed() {
    let new_params = Params {
        conf_path: "".to_owned(),
        debug: false,
        ..Default::default()
    };

    let new_app = App::new(new_params).await.unwrap();
    match new_app.load_job_config().await {
        Ok(_) => {}
        Err(e) => {
            assert_eq!(
                e,
                MedError {
                    message: Some("No such file or directory (os error 2)".to_owned()),
                    cause: Some("load job configuration yaml file failed!".to_owned()),
                    error_type: ConfigError
                }
            )
        }
    }
}

#[tokio::test]
async fn test_file_processor_failed() {
    let new_params = Params {
        conf_path: "../demo/conf/conf_csv.yaml".to_owned(),
        file_path: "../demo/data/input/format_err/csv".to_owned(),
        output_path: "../demo/data/output/csv/format_err/processor_err".to_owned(),
        file_type: FileType::CSV,
        mode: Mode::MASK,
        ..Default::default()
    };

    match App::new(new_params).await {
        Ok(mut new_app) => {
            let metrics = new_app.process().await.unwrap();
            assert!(!metrics.metadata.record_failed_reason.is_empty());
        }
        Err(err) => {
            assert_eq!(err.error_type, MedErrorType::DatabaseError);
        }
    }
}

#[tokio::test]
async fn test_processor_run_encrypt() {
    let new_params = Params {
        conf_path: "../demo/conf/conf_csv.yaml".to_owned(),
        file_path: "../demo/data/input/csv".to_owned(),
        output_path: "../demo/data/output/csv/mask".to_owned(),
        file_type: FileType::CSV,
        mode: Mode::ENCRYPT,
        key: Some("123".to_owned()),
        ..Default::default()
    };

    let mut new_app = App::new(new_params).await.unwrap();
    let metrics = new_app.process().await.unwrap();
    assert_eq!(metrics.metadata.failed_records, 0);

    let new_params = Params {
        conf_path: "../demo/conf/conf_csv.yaml".to_owned(),
        output_path: "../demo/data/input/csv".to_owned(),
        file_path: "../demo/data/output/csv/demo/data/input/csv".to_owned(),
        file_type: FileType::CSV,
        mode: Mode::DECRYPT,
        key: Some("123".to_owned()),
        ..Default::default()
    };

    let mut new_app = App::new(new_params).await.unwrap();
    let metrics = new_app.process().await.unwrap();
    assert_eq!(metrics.metadata.failed_records, 0);
}

#[tokio::test]
async fn test_processor_run_encrypt_without_key() {
    let new_params = Params {
        conf_path: "../demo/conf/conf_csv.yaml".to_owned(),
        file_path: "../demo/data/input/csv".to_owned(),
        output_path: "../demo/data/output/csv/mask".to_owned(),
        file_type: FileType::CSV,
        mode: Mode::ENCRYPT,
        key: None,
        ..Default::default()
    };

    let mut new_app = App::new(new_params).await.unwrap();
    let metrics = new_app.process().await.unwrap();
    assert_eq!(metrics.metadata.total_records, 0);
}

#[tokio::test]
async fn test_processor_run_json_mask() {
    let new_params = Params {
        conf_path: "../demo/conf/conf_json.yaml".to_owned(),
        file_path: "../demo/data/input/json".to_owned(),
        output_path: "../demo/data/output/json/mask".to_owned(),
        file_type: FileType::JSON,
        mode: Mode::MASK,
        ..Default::default()
    };

    let mut new_app = App::new(new_params).await.unwrap();
    let metrics = new_app.process().await.unwrap();
    assert_eq!(metrics.metadata.failed_records, 0);
}