cratestack-sqlx 0.3.6

Rust-native schema-first framework for typed HTTP APIs, generated clients, and backend services.
Documentation
#![cfg(test)]

use cratestack_sql::{FilterValue, OrderTarget};

use crate::{FieldRef, SortDirection, SqlValue};

#[test]
fn field_ref_builds_filter_and_order() {
    let filter = FieldRef::<(), bool>::new("published").is_true();
    let order = FieldRef::<(), String>::new("title").desc();
    let contains = FieldRef::<(), String>::new("title").contains("hel");
    let maybe_null = FieldRef::<(), Option<String>>::new("subtitle").is_null();
    let in_filter = FieldRef::<(), i64>::new("id").in_([1_i64, 2_i64]);

    assert_eq!(filter.column, "published");
    assert_eq!(filter.value, FilterValue::Single(SqlValue::Bool(true)));
    assert_eq!(order.direction, SortDirection::Desc);
    assert!(matches!(order.target, OrderTarget::Column("title")));
    assert_eq!(
        contains.value,
        FilterValue::Single(SqlValue::String("%hel%".to_owned()))
    );
    assert_eq!(maybe_null.column, "subtitle");
    assert_eq!(
        in_filter.value,
        FilterValue::Many(vec![SqlValue::Int(1), SqlValue::Int(2)])
    );
}