use super::*;
use crate::e2e::codegen::presentation::PresentationOperation;
fn iterate_op(expression: &str, optional: bool) -> PresentationOperation {
PresentationOperation {
kind: "iterate",
expression: expression.to_string(),
item: "item".to_string(),
fields: Vec::new(),
optional,
display: false,
destructure_source: String::new(),
destructure_item: String::new(),
shown_optional: false,
field_optionals: Vec::new(),
field_displays: Vec::new(),
guard_binding: String::new(),
guard_source: String::new(),
guard_condition: String::new(),
}
}
fn show_op(expression: &str, optional: bool) -> PresentationOperation {
PresentationOperation {
kind: "show",
expression: expression.to_string(),
item: String::new(),
fields: Vec::new(),
optional,
display: false,
destructure_source: String::new(),
destructure_item: String::new(),
shown_optional: false,
field_optionals: Vec::new(),
field_displays: Vec::new(),
guard_binding: String::new(),
guard_source: String::new(),
guard_condition: String::new(),
}
}
#[test]
fn an_optional_iterate_collection_gets_the_null_forgiving_operator_on_its_expression() {
let operations = vec![iterate_op("result.Keywords", true)];
let out = dereference_optional_iterate_collections(operations);
assert_eq!(out[0].expression, "result.Keywords!");
}
#[test]
fn a_non_optional_iterate_collection_is_left_alone() {
let operations = vec![iterate_op("result.Keywords", false)];
let out = dereference_optional_iterate_collections(operations);
assert_eq!(out[0].expression, "result.Keywords");
}
#[test]
fn a_show_operations_expression_is_never_touched_regardless_of_optional() {
let operations = vec![show_op("result.Title", true)];
let out = dereference_optional_iterate_collections(operations);
assert_eq!(out[0].expression, "result.Title");
}
#[test]
fn an_expression_already_ending_in_null_forgiving_is_not_doubled_up() {
let operations = vec![iterate_op("result.Keywords!", true)];
let out = dereference_optional_iterate_collections(operations);
assert_eq!(out[0].expression, "result.Keywords!");
}