1package graphql_test
2
3import (
4	"testing"
5
6	"github.com/dennwc/graphql"
7	"github.com/dennwc/graphql/gqlerrors"
8	"github.com/dennwc/graphql/testutil"
9)
10
11func TestValidate_UniqueFragmentNames_NoFragments(t *testing.T) {
12	testutil.ExpectPassesRule(t, graphql.UniqueFragmentNamesRule, `
13      {
14        field
15      }
16    `)
17}
18func TestValidate_UniqueFragmentNames_OneFragment(t *testing.T) {
19	testutil.ExpectPassesRule(t, graphql.UniqueFragmentNamesRule, `
20      {
21        ...fragA
22      }
23
24      fragment fragA on Type {
25        field
26      }
27    `)
28}
29func TestValidate_UniqueFragmentNames_ManyFragments(t *testing.T) {
30	testutil.ExpectPassesRule(t, graphql.UniqueFragmentNamesRule, `
31      {
32        ...fragA
33        ...fragB
34        ...fragC
35      }
36      fragment fragA on Type {
37        fieldA
38      }
39      fragment fragB on Type {
40        fieldB
41      }
42      fragment fragC on Type {
43        fieldC
44      }
45    `)
46}
47func TestValidate_UniqueFragmentNames_InlineFragmentsAreAlwaysUnique(t *testing.T) {
48	testutil.ExpectPassesRule(t, graphql.UniqueFragmentNamesRule, `
49      {
50        ...on Type {
51          fieldA
52        }
53        ...on Type {
54          fieldB
55        }
56      }
57    `)
58}
59func TestValidate_UniqueFragmentNames_FragmentAndOperationNamedTheSame(t *testing.T) {
60	testutil.ExpectPassesRule(t, graphql.UniqueFragmentNamesRule, `
61      query Foo {
62        ...Foo
63      }
64      fragment Foo on Type {
65        field
66      }
67    `)
68}
69func TestValidate_UniqueFragmentNames_FragmentsNamedTheSame(t *testing.T) {
70	testutil.ExpectFailsRule(t, graphql.UniqueFragmentNamesRule, `
71      {
72        ...fragA
73      }
74      fragment fragA on Type {
75        fieldA
76      }
77      fragment fragA on Type {
78        fieldB
79      }
80    `, []gqlerrors.FormattedError{
81		testutil.RuleError(`There can only be one fragment named "fragA".`, 5, 16, 8, 16),
82	})
83}
84func TestValidate_UniqueFragmentNames_FragmentsNamedTheSameWithoutBeingReferenced(t *testing.T) {
85	testutil.ExpectFailsRule(t, graphql.UniqueFragmentNamesRule, `
86      fragment fragA on Type {
87        fieldA
88      }
89      fragment fragA on Type {
90        fieldB
91      }
92    `, []gqlerrors.FormattedError{
93		testutil.RuleError(`There can only be one fragment named "fragA".`, 2, 16, 5, 16),
94	})
95}
96