nu-command 0.115.0

Nushell's built-in commands
Documentation
use nu_test_support::prelude::*;
use pretty_assertions::assert_matches;
use rstest::rstest;

#[test]
fn headers_uses_first_row_as_header() -> Result {
    let code = "
        open sample_headers.xlsx --raw
        | from xlsx --noheaders
        | get Sheet1
        | headers
        | get header0
    ";

    test()
        .cwd("tests/fixtures/formats")
        .run(code)
        .expect_value_eq(["r1c0", "r2c0"])
}

#[test]
fn headers_adds_missing_column_name() -> Result {
    let code = "
        open sample_headers.xlsx --raw
        | from xlsx --noheaders
        | get Sheet1
        | headers
        | get column1
    ";

    test()
        .cwd("tests/fixtures/formats")
        .run(code)
        .expect_value_eq(["r1c1", "r2c1"])
}

#[test]
fn headers_handles_missing_values() -> Result {
    let code = "
        [{x: a, y: b}, {x: 1, y: 2}, {x: 1, z: 3}]
        | headers
    ";

    test().run(code).expect_value_eq(test_value!([
        { a: 1, b: 2 },
        { a: 1 },
    ]))
}

#[rstest]
#[case::empty_record("[[a b]; [{}, 2], [3, 4]] | headers")]
#[case::record("[[a b]; [1 (scope aliases)] [2 2]] | headers")]
#[case::array("[[a b]; [[f, g], 2], [3, 4]] | headers")]
#[case::range("[[a b]; [(1..5), 2], [3, 4]] | headers")]
#[case::duration("[[a b]; [((date now) - (date now)), 2], [3, 4]] | headers")]
#[case::binary(r#"[[a b]; [("aa" | into binary), 2], [3, 4]] | headers"#)]
fn headers_invalid_column_type(#[case] code: &str) -> Result {
    let err = test().run(code).expect_shell_error()?;

    assert_matches!(
        err,
        ShellError::TypeMismatch { err_message, .. }
            if err_message == "needs compatible type: Null, String, Bool, Float, Int"
    );
    Ok(())
}