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