Skip to content

Commit c405c2d

Browse files
committed
Add tests for constaints trait
1 parent 9edb69a commit c405c2d

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
use validator::{
2+
Constraints, LengthConstraint, Validate, ValidationConstraint, ValidationConstraintsKind,
3+
};
4+
5+
#[derive(Debug, Validate)]
6+
struct A {
7+
#[validate(length(max = 10, code = "a_length"))]
8+
value: String,
9+
10+
#[validate(nested)]
11+
b: B,
12+
}
13+
14+
#[derive(Debug, Validate)]
15+
struct B {
16+
#[validate(length(min = 1, code = "b_length"))]
17+
value: String,
18+
}
19+
20+
#[test]
21+
fn a_constraints_correct() {
22+
let a_constraints = <A as Constraints>::constraints();
23+
24+
let mut keys = a_constraints.0.keys().collect::<Vec<_>>();
25+
keys.sort();
26+
assert_eq!(keys, &[&"b", &"value"]);
27+
28+
{
29+
let value_constraints = &a_constraints.0["value"];
30+
assert_eq!(value_constraints.len(), 1);
31+
32+
let struct_constraints = match &value_constraints[0] {
33+
ValidationConstraintsKind::Field(constraints) => constraints,
34+
_ => panic!("Expected a constraint kind of Field, found {:?}", &value_constraints[0]),
35+
};
36+
37+
assert_eq!(struct_constraints.len(), 1);
38+
39+
assert_eq!(
40+
struct_constraints[0],
41+
ValidationConstraint::Length {
42+
length: LengthConstraint::Range { min: None, max: Some(10) },
43+
code: "a_length".into(),
44+
}
45+
);
46+
}
47+
48+
{
49+
let b_constraints = &a_constraints.0["b"];
50+
assert_eq!(b_constraints.len(), 1);
51+
52+
let struct_constraints = match &b_constraints[0] {
53+
ValidationConstraintsKind::Struct(constraints) => constraints.as_ref(),
54+
_ => panic!("Expected a constraint kind of Field, found {:?}", &b_constraints[0]),
55+
};
56+
57+
assert_eq!(struct_constraints, &<B as Constraints>::constraints());
58+
}
59+
}
60+
61+
#[test]
62+
fn b_constraints_correct() {
63+
let b_constraints = <B as Constraints>::constraints();
64+
assert_eq!(b_constraints.0.keys().collect::<Vec<_>>(), &[&"value"]);
65+
66+
let constraint_kinds = &b_constraints.0["value"];
67+
assert_eq!(constraint_kinds.len(), 1);
68+
69+
let struct_constraints = match &constraint_kinds[0] {
70+
ValidationConstraintsKind::Field(constraints) => constraints,
71+
_ => panic!("Expected a constraint kind of Field, found {:?}", &constraint_kinds[0]),
72+
};
73+
74+
assert_eq!(struct_constraints.len(), 1);
75+
76+
assert_eq!(
77+
struct_constraints[0],
78+
ValidationConstraint::Length {
79+
length: LengthConstraint::Range { min: Some(1), max: None },
80+
code: "b_length".into(),
81+
}
82+
);
83+
}

0 commit comments

Comments
 (0)