()
| 599 | |
| 600 | #[test] |
| 601 | fn test_validators() { |
| 602 | let input = r#" |
| 603 | route / { |
| 604 | post / { |
| 605 | @json |
| 606 | body { |
| 607 | @string(max_len=10) |
| 608 | @not(@string(min_len=5)) |
| 609 | field: str, |
| 610 | @in(["a" ,"b", "c"]) |
| 611 | x: str = "a", |
| 612 | @in([1, 2, 3]) |
| 613 | y: int = 1, |
| 614 | @any(@in(["a", "b"]), @string(min_len=1)) |
| 615 | z: str |
| 616 | } |
| 617 | |
| 618 | return "hi"; |
| 619 | } |
| 620 | } |
| 621 | "#; |
| 622 | |
| 623 | let mut parser = Parser::new(input); |
| 624 | let result = parser.parse_route(); |
| 625 | assert!(result.is_ok()); |
| 626 | |
| 627 | let route = result.unwrap(); |
| 628 | let endpoint = &route.endpoints[0]; |
| 629 | |
| 630 | let field = &endpoint.body.fields[0]; |
| 631 | assert_eq!(field.name, "field"); |
| 632 | assert_eq!(field.validators.len(), 2); |
| 633 | assert_eq!(field.validators[0].name(), "@string"); |
| 634 | assert_eq!( |
| 635 | field.validators[0] |
| 636 | .downcast_ref::<StringValidator>() |
| 637 | .unwrap() |
| 638 | .max_len, |
| 639 | Some(10) |
| 640 | ); |
| 641 | assert_eq!( |
| 642 | field.validators[1] |
| 643 | .downcast_ref::<NotValidator<Box<dyn Validator>>>() |
| 644 | .unwrap() |
| 645 | .0 |
| 646 | .downcast_ref::<StringValidator>() |
| 647 | .unwrap() |
| 648 | .min_len, |
| 649 | Some(5) |
| 650 | ); |
| 651 | |
| 652 | let field = &endpoint.body.fields[1]; |
| 653 | assert_eq!(field.name, "x"); |
| 654 | assert_eq!(field.default, Some(Value::from("a"))); |
| 655 | assert_eq!(field.validators.len(), 1); |
| 656 | assert_eq!( |
| 657 | field.validators[0].downcast_ref::<InValidator>().unwrap().0, |
| 658 | vec![Value::from("a"), Value::from("b"), Value::from("c")] |
nothing calls this directly
no test coverage detected