graphql_query/validate/rules/
mod.rs1use crate::visit::ComposedVisitor;
2
3mod known_fragment_names;
4mod lone_anonymous_operation;
5mod no_fragment_cycles;
6mod no_undefined_variables;
7mod no_unused_fragments;
8mod unique_argument_names;
9mod unique_fragment_names;
10mod unique_operation_names;
11mod unique_variable_names;
12
13pub use super::context::ValidationContext;
14pub use known_fragment_names::*;
15pub use lone_anonymous_operation::*;
16pub use no_fragment_cycles::*;
17pub use no_undefined_variables::*;
18pub use no_unused_fragments::*;
19pub use unique_argument_names::*;
20pub use unique_fragment_names::*;
21pub use unique_operation_names::*;
22pub use unique_variable_names::*;
23
24pub type DefaultRules<'a> = ComposedVisitor<
29 'a,
30 ValidationContext<'a>,
31 ComposedVisitor<
32 'a,
33 ValidationContext<'a>,
34 ComposedVisitor<'a, ValidationContext<'a>, LoneAnonymousOperation, UniqueVariableNames<'a>>,
35 ComposedVisitor<
36 'a,
37 ValidationContext<'a>,
38 UniqueFragmentNames<'a>,
39 UniqueOperationNames<'a>,
40 >,
41 >,
42 ComposedVisitor<
43 'a,
44 ValidationContext<'a>,
45 ComposedVisitor<'a, ValidationContext<'a>, NoUnusedFragments<'a>, UniqueArgumentNames<'a>>,
46 ComposedVisitor<
47 'a,
48 ValidationContext<'a>,
49 KnownFragmentNames<'a>,
50 ComposedVisitor<
51 'a,
52 ValidationContext<'a>,
53 NoFragmentCycles<'a>,
54 NoUndefinedVariables<'a>,
55 >,
56 >,
57 >,
58>;
59
60#[cfg(test)]
61mod tests {
62 use super::super::*;
63 use super::*;
64 use crate::ast::*;
65
66 #[test]
67 fn passes() {
68 let ctx = ASTContext::new();
69 let document = Document::parse(
70 &ctx,
71 "query A { __typename } query B { ...Test } fragment Test on Query { __typename }",
72 )
73 .unwrap();
74 DefaultRules::validate(&ctx, document).unwrap();
75 }
76
77 #[test]
78 fn fails() {
79 let ctx = ASTContext::new();
80
81 let document = Document::parse(
82 &ctx,
83 "query A { __typename } query B { __typename } fragment Test on Query { __typename }",
84 )
85 .unwrap();
86 DefaultRules::validate(&ctx, document).unwrap_err();
87
88 let document = Document::parse(
89 &ctx,
90 "query { __typename } query { ...Test } fragment Test on Query { __typename }",
91 )
92 .unwrap();
93 DefaultRules::validate(&ctx, document).unwrap_err();
94 }
95}