mirror of
https://github.com/danbulant/convex-macros
synced 2026-05-19 03:58:31 +00:00
167 lines
4.1 KiB
Rust
167 lines
4.1 KiB
Rust
use convex::Value;
|
|
use maplit::btreemap;
|
|
use ragkit_convex_macros::convex_model;
|
|
use serde_json::json;
|
|
|
|
#[test]
|
|
fn basic_string() {
|
|
convex_model!(Model { a: v.string() });
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::String("apple".into()),
|
|
});
|
|
let json_data = json!({
|
|
"a": "apple",
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
assert_eq!("apple", model.a);
|
|
assert_eq!(json_data, json!(model));
|
|
}
|
|
|
|
#[test]
|
|
fn basic_string_negative() {
|
|
convex_model!(Model { a: v.string() });
|
|
|
|
let model = Model::from_convex_value(&Value::Object(btreemap! {
|
|
"a".into() => Value::Int64(42),
|
|
}));
|
|
assert!(model.is_err());
|
|
|
|
let model = Model::from_convex_value(&Value::Object(btreemap! {
|
|
"b".into() => Value::String("apple".into()),
|
|
}));
|
|
assert!(model.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn basic_id() {
|
|
convex_model!(Model { a: v.id("apples") });
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::String("1234".into()),
|
|
});
|
|
let json_data = json!({
|
|
"a": "1234",
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
assert_eq!("1234", model.a);
|
|
assert_eq!(json_data, json!(model));
|
|
}
|
|
|
|
#[test]
|
|
fn basic_id_negative() {
|
|
convex_model!(Model { a: v.id("apples") });
|
|
|
|
let model = Model::from_convex_value(&Value::Object(btreemap! {
|
|
"a".into() => Value::Int64(42),
|
|
}));
|
|
assert!(model.is_err());
|
|
|
|
let model = Model::from_convex_value(&Value::Object(btreemap! {
|
|
"b".into() => Value::String("apple".into()),
|
|
}));
|
|
assert!(model.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn basic_string_literal() {
|
|
convex_model!(Model { a: v.literal("apples") });
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::String("apples".into()),
|
|
});
|
|
let json_data = json!({
|
|
"a": "apples",
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
assert_eq!("apples", model.a);
|
|
assert_eq!(json_data, json!(model));
|
|
}
|
|
|
|
#[test]
|
|
fn basic_string_literal_negative() {
|
|
convex_model!(Model { a: v.literal("apples") });
|
|
|
|
let model = Model::from_convex_value(&Value::Object(btreemap! {
|
|
"a".into() => Value::String("not-apple".into()),
|
|
}));
|
|
assert!(model.is_err());
|
|
|
|
let model = Model::from_convex_value(&Value::Object(btreemap! {
|
|
"a".into() => Value::Int64(42),
|
|
}));
|
|
assert!(model.is_err());
|
|
|
|
let model = Model::from_convex_value(&Value::Object(btreemap! {
|
|
"b".into() => Value::String("apple".into()),
|
|
}));
|
|
assert!(model.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn basic_optional_string() {
|
|
convex_model!(Model { a: v.optional(v.string()) });
|
|
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::String("apples".into()),
|
|
});
|
|
let json_data = json!({
|
|
"a": "apples",
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
assert_eq!(Some("apples".into()), model.a);
|
|
assert_eq!(json_data, json!(model));
|
|
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::Null,
|
|
});
|
|
let json_data = json!({
|
|
"a": null,
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
assert_eq!(None, model.a);
|
|
assert_eq!(json_data, json!(model));
|
|
}
|
|
|
|
#[test]
|
|
fn basic_string_union() {
|
|
convex_model!(Model { a: v.union(v.literal("apples"), v.literal("banana")) });
|
|
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::String("apples".into()),
|
|
});
|
|
let json_data = json!({
|
|
"a": "apples",
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
assert_eq!(ModelA::Variant1("apples".into()), model.a);
|
|
assert_eq!(json_data, json!(model));
|
|
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::String("banana".into()),
|
|
});
|
|
let json_data = json!({
|
|
"a": "banana",
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
assert_eq!(ModelA::Variant2("banana".into()), model.a);
|
|
assert_eq!(json_data, json!(model));
|
|
}
|