@@ -170,30 +170,92 @@ func TestEditFeatureFlag(t *testing.T) {
170170 assertResponseWithStatusAndMessage (t , res , http .StatusBadRequest , "invalid_feature" , "Percentage must be between 0 and 100" )
171171}
172172
173- func TestAccessFeatureFlag (t * testing.T ) {
173+ func TestAccessFeatureFlags (t * testing.T ) {
174+ var features m.FeatureFlags
174175 onStart ()
175176 defer onFinish ()
176177
178+ url := fmt .Sprintf ("%s/access" , base )
179+
177180 // Add the default dummy feature
178181 createDummyFeatureFlag ()
179182
183+ // Invalid JSON payload
184+ reader = strings .NewReader (`{foo:bar}` )
185+ request , _ := http .NewRequest ("POST" , url , reader )
186+ res , _ := http .DefaultClient .Do (request )
187+ assert422Response (t , res )
188+
180189 // Access thanks to the user ID
181190 reader = strings .NewReader (`{"user":2}` )
182- request , _ := http .NewRequest ("POST" , fmt .Sprintf ("%s/%s/access" , base , "homepage_v2" ), reader )
191+ request , _ = http .NewRequest ("POST" , url , reader )
192+ res , _ = http .DefaultClient .Do (request )
193+
194+ json .NewDecoder (res .Body ).Decode (& features )
195+ assert .Equal (t , 1 , len (features ))
196+ assert .Equal (t , "homepage_v2" , features [0 ].Key )
197+
198+ // No access because of the user ID
199+ reader = strings .NewReader (`{"user":0}` )
200+ request , _ = http .NewRequest ("POST" , url , reader )
201+ res , _ = http .DefaultClient .Do (request )
202+
203+ json .NewDecoder (res .Body ).Decode (& features )
204+ assert .Equal (t , 0 , len (features ))
205+
206+ // Add a feature enabled for everybody
207+ payload := `{
208+ "key":"testflag",
209+ "enabled":true,
210+ "users":[],
211+ "groups":[],
212+ "percentage":0
213+ }`
214+ createFeatureWithPayload (payload )
215+
216+ // Access thanks to the group
217+ reader = strings .NewReader (`{"groups":["dev"]}` )
218+ request , _ = http .NewRequest ("POST" , url , reader )
219+ res , _ = http .DefaultClient .Do (request )
220+
221+ json .NewDecoder (res .Body ).Decode (& features )
222+ assert .Equal (t , 2 , len (features ))
223+ assert .Equal (t , "homepage_v2" , features [0 ].Key )
224+ assert .Equal (t , "testflag" , features [1 ].Key )
225+ }
226+
227+ func TestAccessFeatureFlag (t * testing.T ) {
228+ onStart ()
229+ defer onFinish ()
230+
231+ url := fmt .Sprintf ("%s/%s/access" , base , "homepage_v2" )
232+
233+ // Add the default dummy feature
234+ createDummyFeatureFlag ()
235+
236+ // Invalid JSON payload
237+ reader = strings .NewReader (`{foo:bar}` )
238+ request , _ := http .NewRequest ("POST" , url , reader )
183239 res , _ := http .DefaultClient .Do (request )
240+ assert422Response (t , res )
241+
242+ // Access thanks to the user ID
243+ reader = strings .NewReader (`{"user":2}` )
244+ request , _ = http .NewRequest ("POST" , url , reader )
245+ res , _ = http .DefaultClient .Do (request )
184246
185247 assertAccessToTheFeature (t , res )
186248
187249 // No access because of the user ID
188250 reader = strings .NewReader (`{"user":3}` )
189- request , _ = http .NewRequest ("POST" , fmt . Sprintf ( "%s/%s/access" , base , "homepage_v2" ) , reader )
251+ request , _ = http .NewRequest ("POST" , url , reader )
190252 res , _ = http .DefaultClient .Do (request )
191253
192254 assertNoAccessToTheFeature (t , res )
193255
194256 // Access thanks to the group
195257 reader = strings .NewReader (`{"user":3, "groups":["dev", "foo"]}` )
196- request , _ = http .NewRequest ("POST" , fmt . Sprintf ( "%s/%s/access" , base , "homepage_v2" ) , reader )
258+ request , _ = http .NewRequest ("POST" , url , reader )
197259 res , _ = http .DefaultClient .Do (request )
198260
199261 assertAccessToTheFeature (t , res )
@@ -229,8 +291,8 @@ func assertNoAccessToTheFeature(t *testing.T, res *http.Response) {
229291 assertResponseWithStatusAndMessage (t , res , http .StatusOK , "not_access" , "The user does not have access to the feature" )
230292}
231293
232- func createDummyFeatureFlag ( ) * http.Response {
233- reader = strings .NewReader (getDummyFeaturePayload () )
294+ func createFeatureWithPayload ( payload string ) * http.Response {
295+ reader = strings .NewReader (payload )
234296 postRequest , _ := http .NewRequest ("POST" , base , reader )
235297 res , err := http .DefaultClient .Do (postRequest )
236298 if err != nil {
@@ -240,6 +302,10 @@ func createDummyFeatureFlag() *http.Response {
240302 return res
241303}
242304
305+ func createDummyFeatureFlag () * http.Response {
306+ return createFeatureWithPayload (getDummyFeaturePayload ())
307+ }
308+
243309func assert422Response (t * testing.T , res * http.Response ) {
244310 assertResponseWithStatusAndMessage (t , res , 422 , "invalid_json" , "Cannot decode the given JSON payload" )
245311}
0 commit comments