use grpctestify::parser::ternary::process_extract_value;
#[test]
fn test_string_concatenation() {
let input = ".first + \" \" + .last";
let result = process_extract_value(input);
assert!(result.contains("first"));
assert!(result.contains("last"));
}
#[test]
fn test_string_uppercase() {
let input = ".name | ascii_upcase";
let result = process_extract_value(input);
assert!(result.contains("ascii_upcase"));
}
#[test]
fn test_string_lowercase() {
let input = ".name | ascii_downcase";
let result = process_extract_value(input);
assert!(result.contains("ascii_downcase"));
}
#[test]
fn test_string_length() {
let input = ".name | length";
let result = process_extract_value(input);
assert!(result.contains("length"));
}
#[test]
fn test_string_split() {
let input = ".tags | split(\",\")";
let result = process_extract_value(input);
assert!(result.contains("split"));
}
#[test]
fn test_string_join() {
let input = ".items | join(\", \")";
let result = process_extract_value(input);
assert!(result.contains("join"));
}
#[test]
fn test_string_substring() {
let input = ".name[0:3]";
let result = process_extract_value(input);
assert!(result.contains("[0:3]"));
}
#[test]
fn test_string_replace() {
let input = ".text | gsub(\"old\"; \"new\")";
let result = process_extract_value(input);
assert!(result.contains("gsub"));
}
#[test]
fn test_math_addition() {
let input = ".a + .b";
let result = process_extract_value(input);
assert!(result.contains(".a"));
assert!(result.contains(".b"));
}
#[test]
fn test_math_subtraction() {
let input = ".a - .b";
let result = process_extract_value(input);
assert!(result.contains(".a"));
assert!(result.contains(".b"));
}
#[test]
fn test_math_multiplication() {
let input = ".price * .quantity";
let result = process_extract_value(input);
assert!(result.contains("price"));
assert!(result.contains("quantity"));
}
#[test]
fn test_math_division() {
let input = ".total / .count";
let result = process_extract_value(input);
assert!(result.contains("total"));
assert!(result.contains("count"));
}
#[test]
fn test_math_modulo() {
let input = "5 % 3";
let result = process_extract_value(input);
assert!(result.contains("%"));
}
#[test]
fn test_math_min() {
let input = ".numbers | min";
let result = process_extract_value(input);
assert!(result.contains("min"));
}
#[test]
fn test_math_max() {
let input = ".numbers | max";
let result = process_extract_value(input);
assert!(result.contains("max"));
}
#[test]
fn test_math_sum() {
let input = ".numbers | add";
let result = process_extract_value(input);
assert!(result.contains("add"));
}
#[test]
fn test_math_round() {
let input = ".value | round";
let result = process_extract_value(input);
assert!(result.contains("round"));
}
#[test]
fn test_math_floor() {
let input = ".value | floor";
let result = process_extract_value(input);
assert!(result.contains("floor"));
}
#[test]
fn test_math_ceil() {
let input = ".value | ceil";
let result = process_extract_value(input);
assert!(result.contains("ceil"));
}
#[test]
fn test_math_sort() {
let input = ".numbers | sort";
let result = process_extract_value(input);
assert!(result.contains("sort"));
}
#[test]
fn test_conditional_string() {
let input = "if .name == \"Admin\" then \"Hello Admin\" else \"Hello \" + .name end";
let result = process_extract_value(input);
assert!(result.contains("if"));
assert!(result.contains("then"));
assert!(result.contains("else"));
assert!(result.contains("end"));
}
#[test]
fn test_conditional_math() {
let input = "if .price > 100 then \"expensive\" else \"cheap\" end";
let result = process_extract_value(input);
assert!(result.contains("if"));
assert!(result.contains("then"));
assert!(result.contains("else"));
assert!(result.contains("end"));
}
#[test]
fn test_combined_operations() {
let input = "(.first + \" \" + .last) | ascii_upcase";
let result = process_extract_value(input);
assert!(result.contains("ascii_upcase"));
}
#[test]
fn test_array_map() {
let input = ".items | map(.price * .qty)";
let result = process_extract_value(input);
assert!(result.contains("map"));
}
#[test]
fn test_array_filter() {
let input = ".items | map(select(.price > 50))";
let result = process_extract_value(input);
assert!(result.contains("select"));
}