@@ -16,22 +16,8 @@ async fn test_cargo_invite_owners() {
1616 let new_user = app. db_new_user ( "cilantro" ) ;
1717 CrateBuilder :: new ( "guacamole" , owner. as_model ( ) . id ) . expect_build ( & mut conn) ;
1818
19- #[ derive( Serialize ) ]
20- struct OwnerReq {
21- owners : Option < Vec < String > > ,
22- }
23- #[ derive( Deserialize , Debug ) ]
24- struct OwnerResp {
25- // server must include `ok: true` to support old cargo clients
26- ok : bool ,
27- msg : String ,
28- }
29-
30- let body = serde_json:: to_string ( & OwnerReq {
31- owners : Some ( vec ! [ new_user. as_model( ) . gh_login. clone( ) ] ) ,
32- } ) ;
33- let json: OwnerResp = owner
34- . put ( "/api/v1/crates/guacamole/owners" , body. unwrap ( ) )
19+ let json = owner
20+ . add_named_owner ( "guacamole" , & new_user. as_model ( ) . gh_login )
3521 . await
3622 . good ( ) ;
3723
@@ -57,10 +43,7 @@ async fn owner_change_via_cookie() {
5743
5844 let krate = CrateBuilder :: new ( "foo_crate" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
5945
60- let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
61- let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
62- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
63- let response = cookie. put :: < ( ) > ( & url, body) . await ;
46+ let response = cookie. add_named_owner ( & krate. name , & user2. gh_login ) . await ;
6447 assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
6548 assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
6649}
@@ -75,10 +58,7 @@ async fn owner_change_via_token() {
7558
7659 let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
7760
78- let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
79- let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
80- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
81- let response = token. put :: < ( ) > ( & url, body) . await ;
61+ let response = token. add_named_owner ( & krate. name , & user2. gh_login ) . await ;
8262 assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
8363 assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
8464}
@@ -95,10 +75,7 @@ async fn owner_change_via_change_owner_token() {
9575
9676 let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
9777
98- let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
99- let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
100- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
101- let response = token. put :: < ( ) > ( & url, body) . await ;
78+ let response = token. add_named_owner ( & krate. name , & user2. gh_login ) . await ;
10279 assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
10380 assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
10481}
@@ -115,10 +92,7 @@ async fn owner_change_via_change_owner_token_with_matching_crate_scope() {
11592
11693 let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
11794
118- let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
119- let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
120- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
121- let response = token. put :: < ( ) > ( & url, body) . await ;
95+ let response = token. add_named_owner ( & krate. name , & user2. gh_login ) . await ;
12296 assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
12397 assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
12498}
@@ -135,10 +109,7 @@ async fn owner_change_via_change_owner_token_with_wrong_crate_scope() {
135109
136110 let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
137111
138- let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
139- let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
140- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
141- let response = token. put :: < ( ) > ( & url, body) . await ;
112+ let response = token. add_named_owner ( & krate. name , & user2. gh_login ) . await ;
142113 assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
143114 assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"this token does not have the required permissions to perform this action"}]}"# ) ;
144115}
@@ -155,10 +126,7 @@ async fn owner_change_via_publish_token() {
155126
156127 let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
157128
158- let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
159- let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
160- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
161- let response = token. put :: < ( ) > ( & url, body) . await ;
129+ let response = token. add_named_owner ( & krate. name , & user2. gh_login ) . await ;
162130 assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
163131 assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"this token does not have the required permissions to perform this action"}]}"# ) ;
164132}
@@ -173,10 +141,7 @@ async fn owner_change_without_auth() {
173141
174142 let krate = CrateBuilder :: new ( "foo_crate" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
175143
176- let url = format ! ( "/api/v1/crates/{}/owners" , krate. name) ;
177- let body = json ! ( { "owners" : [ user2. gh_login] } ) ;
178- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
179- let response = anon. put :: < ( ) > ( & url, body) . await ;
144+ let response = anon. add_named_owner ( & krate. name , & user2. gh_login ) . await ;
180145 assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
181146 assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"this action requires authentication"}]}"# ) ;
182147}
@@ -294,10 +259,7 @@ async fn test_unknown_crate() {
294259 let ( app, _, user) = TestApp :: full ( ) . with_user ( ) ;
295260 app. db_new_user ( "bar" ) ;
296261
297- let body = json ! ( { "owners" : [ "bar" ] } ) ;
298- let body = serde_json:: to_vec ( & body) . unwrap ( ) ;
299-
300- let response = user. put :: < ( ) > ( "/api/v1/crates/unknown/owners" , body) . await ;
262+ let response = user. add_named_owner ( "unknown" , "bar" ) . await ;
301263 assert_eq ! ( response. status( ) , StatusCode :: NOT_FOUND ) ;
302264 assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"crate `unknown` does not exist"}]}"# ) ;
303265}
@@ -309,8 +271,7 @@ async fn test_unknown_user() {
309271
310272 CrateBuilder :: new ( "foo" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
311273
312- let body = serde_json:: to_vec ( & json ! ( { "owners" : [ "unknown" ] } ) ) . unwrap ( ) ;
313- let response = cookie. put :: < ( ) > ( "/api/v1/crates/foo/owners" , body) . await ;
274+ let response = cookie. add_named_owner ( "foo" , "unknown" ) . await ;
314275 assert_eq ! ( response. status( ) , StatusCode :: BAD_REQUEST ) ;
315276 assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"could not find user with login `unknown`"}]}"# ) ;
316277}
@@ -322,8 +283,9 @@ async fn test_unknown_team() {
322283
323284 CrateBuilder :: new ( "foo" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
324285
325- let body = serde_json:: to_vec ( & json ! ( { "owners" : [ "github:unknown:unknown" ] } ) ) . unwrap ( ) ;
326- let response = cookie. put :: < ( ) > ( "/api/v1/crates/foo/owners" , body) . await ;
286+ let response = cookie
287+ . add_named_owner ( "foo" , "github:unknown:unknown" )
288+ . await ;
327289 assert_eq ! ( response. status( ) , StatusCode :: BAD_REQUEST ) ;
328290 assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"could not find the github team unknown/unknown. Make sure that you have the right permissions in GitHub. See https://doc.rust-lang.org/cargo/reference/publishing.html#github-permissions"}]}"# ) ;
329291}
0 commit comments