valitron 0.5.6

Valitron is an ergonomics, functional and configurable validator
Documentation
use super::{FieldNames, Validator, ValidatorError};

#[test]
fn test_validator_error_serialize() {
    let mut error = ValidatorError::<String>::new();
    error.push(
        FieldNames::new("field1".into()),
        vec!["message1".into(), "message2".into()],
    );

    let json = serde_json::to_string(&error).unwrap();
    assert_eq!(json, r#"{"field1":["message1","message2"]}"#);
}

#[cfg(feature = "full")]
#[test]
fn repeat_insert_rules() {
    use crate::{
        available::{Range, Required, Trim},
        RuleExt,
    };

    let validate = Validator::new()
        .rule("foo", Required)
        .rule("foo", Range::new(1..2));

    let vec = validate.rules.get(&FieldNames::new("foo".into())).unwrap();
    assert_eq!(vec.len(), 2);
    assert!(vec.is_bail() == false);

    let validate = Validator::new()
        .rule("foo", Required.and(Trim).bail())
        .rule("foo", Range::new(1..2));

    let vec = validate.rules.get(&FieldNames::new("foo".into())).unwrap();
    assert_eq!(vec.len(), 3);
    assert!(vec.is_bail() == true);

    let validate = Validator::new()
        .rule("foo", Required)
        .rule("foo", Range::new(1..2).and(Trim).bail());

    let vec = validate.rules.get(&FieldNames::new("foo".into())).unwrap();
    assert_eq!(vec.len(), 3);
    assert!(vec.is_bail() == true);

    let validate = Validator::new()
        .rule("foo", Required.and(Trim).bail())
        .rule("foo", Range::new(1..2).and(Trim).bail());

    let vec = validate.rules.get(&FieldNames::new("foo".into())).unwrap();
    assert_eq!(vec.len(), 3);
    assert!(vec.is_bail() == true);

    let validate = Validator::new()
        .rule("foo", Required.and(Trim).and(Required).bail())
        .rule("foo", Range::new(1..2).and(Trim).and(Required).bail());

    let vec = validate.rules.get(&FieldNames::new("foo".into())).unwrap();
    assert_eq!(vec.len(), 3);
    assert!(vec.is_bail() == true);

    let validate = Validator::new()
        .rule("foo", Required.and(Trim).and(Required).bail())
        .rule("bar", Required.and(Trim).and(Required).bail())
        .rule("foo", Range::new(1..2).and(Trim).and(Required).bail())
        .rule("bar", Range::new(1..2).and(Trim).and(Required).bail());

    let vec = validate.rules.get(&FieldNames::new("foo".into())).unwrap();
    assert_eq!(vec.len(), 3);
    assert!(vec.is_bail() == true);

    let vec = validate.rules.get(&FieldNames::new("bar".into())).unwrap();
    assert_eq!(vec.len(), 3);
    assert!(vec.is_bail() == true);
}

#[cfg(feature = "full")]
#[test]
fn multi_messages() {
    use crate::{
        available::{Message, Required},
        RuleExt,
    };
    let mut vali = Validator::new()
        .rule("field1", Required)
        .rule("field2", Required)
        .message([("field1.required", "bar")]);
    vali = vali.message([("field2.required", "bar2")]);
    assert_eq!(vali.message.len(), 2);
}

#[test]
fn test_total() {
    let mut msg = ValidatorError::<&str>::new();
    msg.push("foo".into(), vec!["foo", "bar"]);
    msg.push("foo2".into(), vec!["foo2"]);

    assert_eq!(msg.total(), 3);
}

#[cfg(feature = "full")]
#[test]
#[should_panic = "field `field3` is not found"]
fn test_check_field() {
    use serde::{Deserialize, Serialize};

    use crate::{available::Required, Validatable};

    #[derive(Debug, Serialize, Deserialize)]
    struct Foo {
        field1: String,
        field2: String,
    }

    let value = Foo {
        field1: "foo1".into(),
        field2: "foo2".into(),
    };

    let _ = value.validate(Validator::new().rule("field3", Required));
}

#[cfg(feature = "full")]
#[test]
#[should_panic = "field `field3` is not found"]
fn test_check_field_mut() {
    use serde::{Deserialize, Serialize};

    use crate::{available::Required, Validatable};

    #[derive(Debug, Serialize, Deserialize)]
    struct Foo {
        field1: String,
        field2: String,
    }

    let value = Foo {
        field1: "foo1".into(),
        field2: "foo2".into(),
    };

    let _ = value.validate_mut(Validator::new().rule("field3", Required));
}