use crate::workdir::Workdir;

#[test]
fn shuffle() {
    let wrk = Workdir::new("shuffle");
    wrk.create(
        "data.csv",
        vec![
            svec!["number"],
            svec!["1"],
            svec!["2"],
            svec!["3"],
            svec!["4"],
        ],
    );
    let mut cmd = wrk.command("shuffle");
    cmd.arg("data.csv").args(["--seed", "123"]);

    let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
    let expected = vec![
        svec!["number"],
        svec!["2"],
        svec!["1"],
        svec!["3"],
        svec!["4"],
    ];
    assert_eq!(got, expected);
}

#[test]
fn shuffle_external() {
    let wrk = Workdir::new("shuffle_external");
    wrk.create(
        "data.csv",
        vec![
            svec!["number"],
            svec!["2"],
            svec!["1"],
            svec!["3"],
            svec!["4"],
        ],
    );
    let mut cmd = wrk.command("shuffle");
    cmd.arg("data.csv")
        .args(["--seed", "321"])
        .arg("--external");

    let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
    let expected = vec![
        svec!["number"],
        svec!["3"],
        svec!["2"],
        svec!["1"],
        svec!["4"],
    ];
    assert_eq!(got, expected);
}

#[test]
fn shuffle_no_headers() {
    let wrk = Workdir::new("shuffle_no_headers");
    wrk.create(
        "data.csv",
        vec![svec!["1"], svec!["2"], svec!["3"], svec!["4"]],
    );
    let mut cmd = wrk.command("shuffle");
    cmd.arg("data.csv")
        .args(["--seed", "123"])
        .arg("--no-headers");

    let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
    let expected = vec![svec!["2"], svec!["1"], svec!["3"], svec!["4"]];
    assert_eq!(got, expected);
}

#[test]
fn shuffle_external_no_headers() {
    let wrk = Workdir::new("shuffle_external_no_headers");
    wrk.create(
        "data.csv",
        vec![svec!["1"], svec!["2"], svec!["3"], svec!["4"]],
    );
    let mut cmd = wrk.command("shuffle");
    cmd.arg("data.csv")
        .args(["--seed", "123"])
        .arg("--no-headers")
        .arg("--external");

    let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
    let expected = vec![svec!["2"], svec!["1"], svec!["3"], svec!["4"]];
    assert_eq!(got, expected);
}