Skip to content

Commit bf05e26

Browse files
authored
tests/owners: Add basic authentication tests for PUT /crates/:name/owners (#5529)
1 parent 8ece599 commit bf05e26

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/tests/owners.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,69 @@ fn modify_multiple_owners() {
263263
assert_eq!(app.db(|conn| krate.owners(conn).unwrap()).len(), 3);
264264
}
265265

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+
266329
#[test]
267330
fn invite_already_invited_user() {
268331
let (app, _, _, owner) = TestApp::init().with_token();

0 commit comments

Comments
 (0)