@@ -263,6 +263,69 @@ fn modify_multiple_owners() {
263
263
assert_eq ! ( app. db( |conn| krate. owners( conn) . unwrap( ) ) . len( ) , 3 ) ;
264
264
}
265
265
266
+ #[ test]
267
+ fn owner_change_via_cookie ( ) {
268
+ let ( app, _, cookie) = TestApp :: full ( ) . with_user ( ) ;
269
+
270
+ let user2 = app. db_new_user ( "user-2" ) ;
271
+ let user2 = user2. as_model ( ) ;
272
+
273
+ let krate =
274
+ app. db ( |conn| CrateBuilder :: new ( "foo_crate" , cookie. as_model ( ) . id ) . expect_build ( conn) ) ;
275
+
276
+ let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
277
+ let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
278
+ let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
279
+ let response = cookie. put :: < ( ) > ( & url, & body) ;
280
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
281
+ assert_eq ! (
282
+ response. into_json( ) ,
283
+ json!( { "ok" : true , "msg" : "user user-2 has been invited to be an owner of crate foo_crate" } )
284
+ ) ;
285
+ }
286
+
287
+ #[ test]
288
+ fn owner_change_via_token ( ) {
289
+ let ( app, _, _, token) = TestApp :: full ( ) . with_token ( ) ;
290
+
291
+ let user2 = app. db_new_user ( "user-2" ) ;
292
+ let user2 = user2. as_model ( ) ;
293
+
294
+ let krate =
295
+ app. db ( |conn| CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( conn) ) ;
296
+
297
+ let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
298
+ let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
299
+ let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
300
+ let response = token. put :: < ( ) > ( & url, & body) ;
301
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
302
+ assert_eq ! (
303
+ response. into_json( ) ,
304
+ json!( { "ok" : true , "msg" : "user user-2 has been invited to be an owner of crate foo_crate" } )
305
+ ) ;
306
+ }
307
+
308
+ #[ test]
309
+ fn owner_change_without_auth ( ) {
310
+ let ( app, anon, cookie) = TestApp :: full ( ) . with_user ( ) ;
311
+
312
+ let user2 = app. db_new_user ( "user-2" ) ;
313
+ let user2 = user2. as_model ( ) ;
314
+
315
+ let krate =
316
+ app. db ( |conn| CrateBuilder :: new ( "foo_crate" , cookie. as_model ( ) . id ) . expect_build ( conn) ) ;
317
+
318
+ let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
319
+ let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
320
+ let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
321
+ let response = anon. put :: < ( ) > ( & url, & body) ;
322
+ assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
323
+ assert_eq ! (
324
+ response. into_json( ) ,
325
+ json!( { "errors" : [ { "detail" : "must be logged in to perform that action" } ] } )
326
+ ) ;
327
+ }
328
+
266
329
#[ test]
267
330
fn invite_already_invited_user ( ) {
268
331
let ( app, _, _, owner) = TestApp :: init ( ) . with_token ( ) ;
0 commit comments