use nu_test_support::{nu, pipeline};

#[test]
fn chunk_by_on_empty_input_returns_empty_list() {
    let actual = nu!("[] | chunk-by {|it| $it} | to nuon");
    assert!(actual.err.is_empty());
    assert_eq!(actual.out, "[]");
}

#[test]
fn chunk_by_strings_works() {
    let sample = r#"
                [a a a b b b c c c a a a]
            "#;

    let actual = nu!(pipeline(&format!(
        r#"
                {sample}
                | chunk-by {{|it| $it}}
                | to nuon
            "#
    )));

    assert_eq!(actual.out, "[[a, a, a], [b, b, b], [c, c, c], [a, a, a]]");
}

#[test]
fn chunk_by_field_works() {
    let sample = r#"[
    {
        name: bob,
        age: 20,
        cool: false
    },
    {
        name: jane,
        age: 30,
        cool: false
    },
    {
        name: marie,
        age: 19,
        cool: true
    },
    {
        name: carl,
        age: 36,
        cool: true
    } ]"#;

    let actual = nu!(pipeline(&format!(
        r#"{sample}
           | chunk-by {{|it| $it.cool}}
           | length"#
    )));

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