rulemorph 0.3.4

YAML-based declarative data transformation engine for CSV/JSON to JSON
Documentation
use serde_json::json;

use crate::run_ok;

#[test]
fn v2_collection_missing_pipe_semantics_are_characterized() {
    let yaml = r#"
version: 2
input:
  format: json
mappings:
  - target: "map_default"
    expr:
      - "@input.missing"
      - map: ["@item.value"]
    default: ["default"]
  - target: "filter_empty"
    expr:
      - "@input.missing"
      - filter: ["@item.active"]
  - target: "flat_map_empty"
    expr:
      - "@input.missing"
      - flat_map: ["@item.tags"]
  - target: "group_by_empty"
    expr:
      - "@input.missing"
      - group_by: ["@item.role"]
  - target: "key_by_empty"
    expr:
      - "@input.missing"
      - key_by: ["@item.id"]
  - target: "partition_empty"
    expr:
      - "@input.missing"
      - partition: ["@item.active"]
  - target: "distinct_by_empty"
    expr:
      - "@input.missing"
      - distinct_by: ["@item.role"]
  - target: "sort_by_empty"
    expr:
      - "@input.missing"
      - sort_by: ["@item.score"]
  - target: "find_null"
    expr:
      - "@input.missing"
      - find: ["@item.active"]
  - target: "find_index_minus_one"
    expr:
      - "@input.missing"
      - find_index: ["@item.active"]
  - target: "reduce_null"
    expr:
      - "@input.missing"
      - reduce: [["@acc", { "+": "@item" }]]
  - target: "fold_initial"
    expr:
      - "@input.missing"
      - fold:
          - 10
          - ["@acc", { "+": "@item" }]
  - target: "zip_with_empty"
    expr:
      - "@input.missing"
      - zip_with:
          - "@input.other"
          - "@item"
"#;
    assert_eq!(
        run_ok(yaml, r#"[{"other":[1,2]}]"#),
        json!([{
            "map_default": ["default"],
            "filter_empty": [],
            "flat_map_empty": [],
            "group_by_empty": {},
            "key_by_empty": {},
            "partition_empty": [[], []],
            "distinct_by_empty": [],
            "sort_by_empty": [],
            "find_null": null,
            "find_index_minus_one": -1,
            "reduce_null": null,
            "fold_initial": 10,
            "zip_with_empty": []
        }])
    );
}