mod helpers;

use helpers as h;

#[test]
fn pipeline_helper() {
    let actual = h::pipeline(
        r#"
            open los_tres_amigos.txt
            | from-csv
            | get rusty_luck
            | str --to-int
            | sum
            | echo "$it"
        "#,
    );

    assert_eq!(
        actual,
        r#"open los_tres_amigos.txt | from-csv | get rusty_luck | str --to-int | sum | echo "$it""#
    );
}

#[test]
fn external_num() {
    let actual = nu!(
        cwd: "tests/fixtures/formats",
        "open sgml_description.json | get glossary.GlossDiv.GlossList.GlossEntry.Height | echo $it"
    );

    assert_eq!(actual, "10");
}

#[test]
fn external_has_correct_quotes() {
    let actual = nu!(
        cwd: ".",
        r#"echo "hello world""#
    );

    assert_eq!(actual, r#"hello world"#);
}

#[test]
fn insert_plugin() {
    let actual = nu!(
        cwd: "tests/fixtures/formats", h::pipeline(
        r#"
            open cargo_sample.toml
            | insert dev-dependencies.newdep "1"
            | get dev-dependencies.newdep
            | echo $it
        "#
    ));

    assert_eq!(actual, "1");
}

#[test]
fn parse_plugin() {
    let actual = nu!(
        cwd: "tests/fixtures/formats", h::pipeline(
        r#"
            open fileA.txt
            | parse "{Name}={Value}"
            | nth 1
            | get Value
            | echo $it
        "#
    ));

    assert_eq!(actual, "StupidLongName");
}

#[test]
fn format_plugin() {
    let actual = nu!(
        cwd: "tests/fixtures/formats", h::pipeline(
        r#"
        open cargo_sample.toml
            | get package
            | format "{name} has license {license}"
            | echo $it
        "#
    ));

    assert_eq!(actual, "nu has license ISC");
}

#[test]
fn prepend_plugin() {
    let actual = nu!(
        cwd: "tests/fixtures/formats", h::pipeline(
        r#"
            open fileA.txt
            | lines
            | prepend "testme"
            | nth 0
            | echo $it
        "#
    ));

    assert_eq!(actual, "testme");
}

#[test]
fn append_plugin() {
    let actual = nu!(
        cwd: "tests/fixtures/formats", h::pipeline(
        r#"
            open fileA.txt
            | lines
            | append "testme"
            | nth 3
            | echo $it
        "#
    ));

    assert_eq!(actual, "testme");
}

#[test]
fn edit_plugin() {
    let actual = nu!(
        cwd: "tests/fixtures/formats", h::pipeline(
        r#"
            open cargo_sample.toml
            | edit dev-dependencies.pretty_assertions "7"
            | get dev-dependencies.pretty_assertions
            | echo $it
        "#
    ));

    assert_eq!(actual, "7");
}
