@@ -16,22 +16,8 @@ async fn test_cargo_invite_owners() {
16
16
let new_user = app. db_new_user ( "cilantro" ) ;
17
17
CrateBuilder :: new ( "guacamole" , owner. as_model ( ) . id ) . expect_build ( & mut conn) ;
18
18
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 )
35
21
. await
36
22
. good ( ) ;
37
23
@@ -57,10 +43,7 @@ async fn owner_change_via_cookie() {
57
43
58
44
let krate = CrateBuilder :: new ( "foo_crate" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
59
45
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 ;
64
47
assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
65
48
assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
66
49
}
@@ -75,10 +58,7 @@ async fn owner_change_via_token() {
75
58
76
59
let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
77
60
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 ;
82
62
assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
83
63
assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
84
64
}
@@ -95,10 +75,7 @@ async fn owner_change_via_change_owner_token() {
95
75
96
76
let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
97
77
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 ;
102
79
assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
103
80
assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
104
81
}
@@ -115,10 +92,7 @@ async fn owner_change_via_change_owner_token_with_matching_crate_scope() {
115
92
116
93
let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
117
94
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 ;
122
96
assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
123
97
assert_snapshot ! ( response. text( ) , @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"# ) ;
124
98
}
@@ -135,10 +109,7 @@ async fn owner_change_via_change_owner_token_with_wrong_crate_scope() {
135
109
136
110
let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
137
111
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 ;
142
113
assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
143
114
assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"this token does not have the required permissions to perform this action"}]}"# ) ;
144
115
}
@@ -155,10 +126,7 @@ async fn owner_change_via_publish_token() {
155
126
156
127
let krate = CrateBuilder :: new ( "foo_crate" , token. as_model ( ) . user_id ) . expect_build ( & mut conn) ;
157
128
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 ;
162
130
assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
163
131
assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"this token does not have the required permissions to perform this action"}]}"# ) ;
164
132
}
@@ -173,10 +141,7 @@ async fn owner_change_without_auth() {
173
141
174
142
let krate = CrateBuilder :: new ( "foo_crate" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
175
143
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 ;
180
145
assert_eq ! ( response. status( ) , StatusCode :: FORBIDDEN ) ;
181
146
assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"this action requires authentication"}]}"# ) ;
182
147
}
@@ -294,10 +259,7 @@ async fn test_unknown_crate() {
294
259
let ( app, _, user) = TestApp :: full ( ) . with_user ( ) ;
295
260
app. db_new_user ( "bar" ) ;
296
261
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 ;
301
263
assert_eq ! ( response. status( ) , StatusCode :: NOT_FOUND ) ;
302
264
assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"crate `unknown` does not exist"}]}"# ) ;
303
265
}
@@ -309,8 +271,7 @@ async fn test_unknown_user() {
309
271
310
272
CrateBuilder :: new ( "foo" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
311
273
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 ;
314
275
assert_eq ! ( response. status( ) , StatusCode :: BAD_REQUEST ) ;
315
276
assert_snapshot ! ( response. text( ) , @r#"{"errors":[{"detail":"could not find user with login `unknown`"}]}"# ) ;
316
277
}
@@ -322,8 +283,9 @@ async fn test_unknown_team() {
322
283
323
284
CrateBuilder :: new ( "foo" , cookie. as_model ( ) . id ) . expect_build ( & mut conn) ;
324
285
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 ;
327
289
assert_eq ! ( response. status( ) , StatusCode :: BAD_REQUEST ) ;
328
290
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"}]}"# ) ;
329
291
}
0 commit comments