rooster 2.14.1

A simple password manager
mod helpers;

use crate::helpers::prelude::*;
use std::fs::File;
use std::io::Write;

#[test]
fn test_command_import_json() {
    let rooster_file = tempfile();
    assert_eq!(
        0,
        main_with_args(
            &["rooster", "init", "--force-for-tests"],
            &mut CursorInputOutput::new("", "\nxxxx\n"),
            &rooster_file
        )
    );

    let import_file_json = tempfile();
    File::create(import_file_json.clone()).unwrap().write_all(
        "{\"passwords\":[{\"name\":\"Youtube\",\"username\":\"yt@example.com\",\"password\":\"abcd\",\"created_at\":1605554169,\"updated_at\":1605554169}]}".as_bytes()
    ).unwrap();

    assert_eq!(
        0,
        main_with_args(
            &[
                "rooster",
                "import",
                "json",
                import_file_json.as_path().to_str().unwrap()
            ],
            &mut CursorInputOutput::new("", "xxxx\n"),
            &rooster_file
        )
    );

    let mut io = CursorInputOutput::new("", "xxxx\n");
    assert_eq!(
        0,
        main_with_args(&["rooster", "get", "-s", "youtube"], &mut io, &rooster_file)
    );
    let output_as_vecu8 = io.stdout_cursor.into_inner();
    let output_as_string = String::from_utf8_lossy(output_as_vecu8.as_slice());
    assert!(output_as_string.contains("abcd"));
    assert!(output_as_string.contains("yt@example.com"));
    assert!(output_as_string.contains("Youtube"));

    let import_file_csv = tempfile();
    File::create(import_file_csv.clone())
        .unwrap()
        .write_all("Youtube,yt@example.com,abcd".as_bytes())
        .unwrap();

    assert_eq!(
        0,
        main_with_args(
            &[
                "rooster",
                "import",
                "csv",
                import_file_csv.as_path().to_str().unwrap()
            ],
            &mut CursorInputOutput::new("", "xxxx\n"),
            &rooster_file
        )
    );

    let mut io = CursorInputOutput::new("", "xxxx\n");
    assert_eq!(
        0,
        main_with_args(&["rooster", "get", "-s", "youtube"], &mut io, &rooster_file)
    );
    let output_as_vecu8 = io.stdout_cursor.into_inner();
    let output_as_string = String::from_utf8_lossy(output_as_vecu8.as_slice());
    assert!(output_as_string.contains("abcd"));
    assert!(output_as_string.contains("yt@example.com"));
    assert!(output_as_string.contains("Youtube"));

    let import_file_1password = tempfile();
    File::create(import_file_1password.clone())
        .unwrap()
        .write_all("Note,abcd,Youtube,Login,youtube.com,yt@example.com".as_bytes())
        .unwrap();

    assert_eq!(
        0,
        main_with_args(
            &[
                "rooster",
                "import",
                "1password",
                import_file_1password.as_path().to_str().unwrap()
            ],
            &mut CursorInputOutput::new("", "xxxx\n"),
            &rooster_file
        )
    );

    let mut io = CursorInputOutput::new("", "xxxx\n");
    assert_eq!(
        0,
        main_with_args(&["rooster", "get", "-s", "youtube"], &mut io, &rooster_file)
    );
    let output_as_vecu8 = io.stdout_cursor.into_inner();
    let output_as_string = String::from_utf8_lossy(output_as_vecu8.as_slice());
    assert!(output_as_string.contains("abcd"));
    assert!(output_as_string.contains("yt@example.com"));
    assert!(output_as_string.contains("Youtube"));
}

#[test]
fn test_command_import_csv() {
    let rooster_file = tempfile();
    assert_eq!(
        0,
        main_with_args(
            &["rooster", "init", "--force-for-tests"],
            &mut CursorInputOutput::new("", "\nxxxx\n"),
            &rooster_file
        )
    );

    let import_file_csv = tempfile();
    File::create(import_file_csv.clone())
        .unwrap()
        .write_all("Youtube,yt@example.com,abcd".as_bytes())
        .unwrap();

    assert_eq!(
        0,
        main_with_args(
            &[
                "rooster",
                "import",
                "csv",
                import_file_csv.as_path().to_str().unwrap()
            ],
            &mut CursorInputOutput::new("", "xxxx\n"),
            &rooster_file
        )
    );

    let mut io = CursorInputOutput::new("", "xxxx\n");
    assert_eq!(
        0,
        main_with_args(&["rooster", "get", "-s", "youtube"], &mut io, &rooster_file)
    );
    let output_as_vecu8 = io.stdout_cursor.into_inner();
    let output_as_string = String::from_utf8_lossy(output_as_vecu8.as_slice());
    assert!(output_as_string.contains("abcd"));
    assert!(output_as_string.contains("yt@example.com"));
    assert!(output_as_string.contains("Youtube"));
}

#[test]
fn test_command_import_1password() {
    let rooster_file = tempfile();
    assert_eq!(
        0,
        main_with_args(
            &["rooster", "init", "--force-for-tests"],
            &mut CursorInputOutput::new("", "\nxxxx\n"),
            &rooster_file
        )
    );

    let import_file_1password = tempfile();
    File::create(import_file_1password.clone())
        .unwrap()
        .write_all("Note,abcd,Youtube,Login,youtube.com,yt@example.com".as_bytes())
        .unwrap();

    assert_eq!(
        0,
        main_with_args(
            &[
                "rooster",
                "import",
                "1password",
                import_file_1password.as_path().to_str().unwrap()
            ],
            &mut CursorInputOutput::new("", "xxxx\n"),
            &rooster_file
        )
    );

    let mut io = CursorInputOutput::new("", "xxxx\n");
    assert_eq!(
        0,
        main_with_args(&["rooster", "get", "-s", "youtube"], &mut io, &rooster_file)
    );
    let output_as_vecu8 = io.stdout_cursor.into_inner();
    let output_as_string = String::from_utf8_lossy(output_as_vecu8.as_slice());
    assert!(output_as_string.contains("abcd"));
    assert!(output_as_string.contains("yt@example.com"));
    assert!(output_as_string.contains("Youtube"));
}