use nu_test_support::{nu, pipeline};

#[test]
fn changes_the_column_name() {
    let sample = r#"
            [["Andrés N. Robalino"],
             ["JT Turner"],
             ["Yehuda Katz"],
             ["Jason Gedge"]]
            "#;

    let actual = nu!(pipeline(&format!(
        "         {sample}
                | wrap name
                | rename mosqueteros
                | get mosqueteros
                | length
                "
    )));

    assert_eq!(actual.out, "4");
}

#[test]
fn keeps_remaining_original_names_given_less_new_names_than_total_original_names() {
    let sample = r#"
            [["Andrés N. Robalino"],
             ["JT Turner"],
             ["Yehuda Katz"],
             ["Jason Gedge"]]
            "#;

    let actual = nu!(pipeline(&format!(
        r#"
                {sample}
                | wrap name
                | default "arepa!" hit
                | rename mosqueteros
                | get hit
                | length
                "#
    )));

    assert_eq!(actual.out, "4");
}

#[test]
fn errors_if_no_columns_present() {
    let sample = r#"
            [["Andrés N. Robalino"],
             ["JT Turner"],
             ["Yehuda Katz"],
             ["Jason Gedge"]]
            "#;

    let actual = nu!(pipeline(&format!(
        "
                {sample}
                | rename mosqueteros
                "
    )));

    assert!(actual.err.contains("command doesn't support"));
}

#[test]
fn errors_if_columns_param_is_empty() {
    let sample = r#"
            [["Andrés N. Robalino"],
             ["JT Turner"],
             ["Yehuda Katz"],
             ["Jason Gedge"]]
            "#;

    let actual = nu!(pipeline(&format!(
        r#"
                {sample}
                | wrap name
                | default "arepa!" hit
                | rename --column {{}}
                "#
    )));

    assert!(actual.err.contains("The column info cannot be empty"));
}