1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
from functools import partial
from graphql.validation import NoUnusedFragmentsRule
from .harness import assert_validation_errors
assert_errors = partial(assert_validation_errors, NoUnusedFragmentsRule)
assert_valid = partial(assert_errors, errors=[])
def describe_validate_no_unused_fragments():
def all_fragment_names_are_used():
assert_valid(
"""
{
human(id: 4) {
...HumanFields1
... on Human {
...HumanFields2
}
}
}
fragment HumanFields1 on Human {
name
...HumanFields3
}
fragment HumanFields2 on Human {
name
}
fragment HumanFields3 on Human {
name
}
"""
)
def all_fragment_names_are_used_by_multiple_operations():
assert_valid(
"""
query Foo {
human(id: 4) {
...HumanFields1
}
}
query Bar {
human(id: 4) {
...HumanFields2
}
}
fragment HumanFields1 on Human {
name
...HumanFields3
}
fragment HumanFields2 on Human {
name
}
fragment HumanFields3 on Human {
name
}
"""
)
def contains_unknown_fragments():
assert_errors(
"""
query Foo {
human(id: 4) {
...HumanFields1
}
}
query Bar {
human(id: 4) {
...HumanFields2
}
}
fragment HumanFields1 on Human {
name
...HumanFields3
}
fragment HumanFields2 on Human {
name
}
fragment HumanFields3 on Human {
name
}
fragment Unused1 on Human {
name
}
fragment Unused2 on Human {
name
}
""",
[
{
"message": "Fragment 'Unused1' is never used.",
"locations": [(22, 13)],
},
{
"message": "Fragment 'Unused2' is never used.",
"locations": [(25, 13)],
},
],
)
def contains_unknown_fragments_with_ref_cycle():
assert_errors(
"""
query Foo {
human(id: 4) {
...HumanFields1
}
}
query Bar {
human(id: 4) {
...HumanFields2
}
}
fragment HumanFields1 on Human {
name
...HumanFields3
}
fragment HumanFields2 on Human {
name
}
fragment HumanFields3 on Human {
name
}
fragment Unused1 on Human {
name
...Unused2
}
fragment Unused2 on Human {
name
...Unused1
}
""",
[
{
"message": "Fragment 'Unused1' is never used.",
"locations": [(22, 13)],
},
{
"message": "Fragment 'Unused2' is never used.",
"locations": [(26, 13)],
},
],
)
def contains_unknown_and_undefined_fragments():
assert_errors(
"""
query Foo {
human(id: 4) {
...bar
}
}
fragment foo on Human {
name
}
""",
[{"message": "Fragment 'foo' is never used.", "locations": [(7, 13)]}],
)
|