@@ -80,6 +80,46 @@ class Thing < GraphQL::Schema::Object
80
80
assert_equal "@secret.topSecret is required, but no value was given" , err2 . message
81
81
end
82
82
83
+ describe 'repeatable directives' do
84
+ module RepeatDirectiveTest
85
+ class Secret < GraphQL ::Schema ::Directive
86
+ argument :secret , String
87
+ locations OBJECT , INTERFACE
88
+ repeatable true
89
+ end
90
+
91
+ class OtherSecret < GraphQL ::Schema ::Directive
92
+ argument :secret , String
93
+ locations OBJECT , INTERFACE
94
+ repeatable false
95
+ end
96
+
97
+ class Thing < GraphQL ::Schema ::Object
98
+ directive ( Secret , secret : "my secret" )
99
+ directive ( Secret , secret : "my second secret" )
100
+
101
+ directive ( OtherSecret , secret : "other secret" )
102
+ directive ( OtherSecret , secret : "second other secret" )
103
+ end
104
+ end
105
+
106
+ it "allows repeatable directives twice" do
107
+ directives = RepeatDirectiveTest ::Thing . directives
108
+ secret_directives = directives . select { |x | x . is_a? ( RepeatDirectiveTest ::Secret ) }
109
+
110
+ assert_equal 2 , secret_directives . size
111
+ assert_equal [ "my secret" , "my second secret" ] , secret_directives . map { |d | d . arguments [ :secret ] }
112
+ end
113
+
114
+ it "overwrites non-repeatable directives" do
115
+ directives = RepeatDirectiveTest ::Thing . directives
116
+ other_directives = directives . select { |x | x . is_a? ( RepeatDirectiveTest ::OtherSecret ) }
117
+
118
+ assert_equal 1 , other_directives . size
119
+ assert_equal [ "second other secret" ] , other_directives . map { |d | d . arguments [ :secret ] }
120
+ end
121
+ end
122
+
83
123
module RuntimeDirectiveTest
84
124
class CountFields < GraphQL ::Schema ::Directive
85
125
locations ( FIELD , FRAGMENT_SPREAD , INLINE_FRAGMENT )
0 commit comments