convex-macros/tests/strings.rs
Kyle Davis cdf14a9a14
feat: improve tests, docs, as_1 fns (#4)
* feat: update tests and docs, add as_1 fns

* docs: add metadata to cargo package
2024-03-19 10:10:39 -07:00

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));
}