Skip to content

Commit 3b277e5

Browse files
committed
In owner invite messages, use crates.io username
These are messages that a user sees when they've invited other users to own a crate. Right now, there shouldn't be any confusion because `users.username` should always equal `users.gh_login`, but I've added "Crates.io user" to the message to hopefully clarify for the future when we have crates.io usernames independent of GitHub usernames.
1 parent 6493558 commit 3b277e5

6 files changed

Lines changed: 24 additions & 23 deletions

File tree

src/controllers/krate/owners.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ pub async fn get_user_owners(state: AppState, path: CratePath) -> AppResult<Json
127127
#[derive(Debug, Serialize, utoipa::ToSchema)]
128128
pub struct ModifyResponse {
129129
/// A message describing the result of the operation.
130-
#[schema(example = "user ghost has been invited to be an owner of crate serde")]
130+
#[schema(example = "Crates.io user ghost has been invited to be an owner of crate serde")]
131131
pub msg: String,
132132

133133
#[schema(example = true)]
@@ -203,8 +203,8 @@ pub async fn add_owners(
203203
// acceptance.
204204
Ok(NewOwnerInvite::User(invitee, token)) => {
205205
msgs.push(format!(
206-
"user {} has been invited to be an owner of crate {}",
207-
invitee.gh_login, krate.name,
206+
"Crates.io user {} has been invited to be an owner of crate {}",
207+
invitee.username, krate.name,
208208
));
209209

210210
if let Some(recipient) = invitee.verified_email(conn).await.ok().flatten() {
@@ -228,8 +228,9 @@ pub async fn add_owners(
228228

229229
// This user has a pending invite.
230230
Err(OwnerAddError::AlreadyInvited(user)) => msgs.push(format!(
231-
"user {} already has a pending invitation to be an owner of crate {}",
232-
user.gh_login, krate.name
231+
"Crates.io user {} already has a pending invitation \
232+
to be an owner of crate {}",
233+
user.username, krate.name
233234
)),
234235

235236
// An opaque error occurred.

src/tests/issues/issue2736.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ async fn test_issue_2736() -> anyhow::Result<()> {
6262
// Once that removal works, it should be possible to add the new account as an owner
6363
let response = someone_else.add_named_owner("crate1", "foo").await;
6464
assert_snapshot!(response.status(), @"200 OK");
65-
assert_snapshot!(response.text(), @r#"{"msg":"user foo has been invited to be an owner of crate crate1","ok":true}"#);
65+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user foo has been invited to be an owner of crate crate1","ok":true}"#);
6666

6767
Ok(())
6868
}

src/tests/owners.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ async fn modify_multiple_owners() -> anyhow::Result<()> {
250250
.add_named_owners("owners_multiple", &["user2", "user3"])
251251
.await;
252252
assert_snapshot!(response.status(), @"200 OK");
253-
assert_snapshot!(response.text(), @r#"{"msg":"user user2 has been invited to be an owner of crate owners_multiple,user user3 has been invited to be an owner of crate owners_multiple","ok":true}"#);
253+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user user2 has been invited to be an owner of crate owners_multiple,Crates.io user user3 has been invited to be an owner of crate owners_multiple","ok":true}"#);
254254

255255
assert_snapshot!(app.emails_snapshot().await);
256256

src/tests/routes/crates/owners/add.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ async fn test_cargo_invite_owners() {
3131
// version of cargo
3232
assert_eq!(
3333
json.msg,
34-
"user cilantro has been invited to be an owner of crate guacamole"
34+
"Crates.io user cilantro has been invited to be an owner of crate guacamole"
3535
)
3636
}
3737

@@ -49,7 +49,7 @@ async fn owner_change_via_cookie() {
4949

5050
let response = cookie.add_named_owner(&krate.name, &user2.username).await;
5151
assert_snapshot!(response.status(), @"200 OK");
52-
assert_snapshot!(response.text(), @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
52+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
5353
}
5454

5555
async fn invite_distinct_login_user(login: &str) -> Response<OwnerResp> {
@@ -94,14 +94,14 @@ async fn unprefixed_crates_io_username_separator_variant() {
9494
async fn unprefixed_github_login_verbatim() {
9595
let response = invite_distinct_login_user("github-user").await;
9696
assert_snapshot!(response.status(), @"200 OK");
97-
assert_snapshot!(response.text(), @r#"{"msg":"user github-user has been invited to be an owner of crate foo","ok":true}"#);
97+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user crates-user has been invited to be an owner of crate foo","ok":true}"#);
9898
}
9999

100100
#[tokio::test(flavor = "multi_thread")]
101101
async fn unprefixed_github_login_case_insensitive() {
102102
let response = invite_distinct_login_user("GITHUB-USER").await;
103103
assert_snapshot!(response.status(), @"200 OK");
104-
assert_snapshot!(response.text(), @r#"{"msg":"user github-user has been invited to be an owner of crate foo","ok":true}"#);
104+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user crates-user has been invited to be an owner of crate foo","ok":true}"#);
105105
}
106106

107107
#[tokio::test(flavor = "multi_thread")]
@@ -181,7 +181,7 @@ async fn owner_change_via_token() {
181181

182182
let response = token.add_named_owner(&krate.name, &user2.username).await;
183183
assert_snapshot!(response.status(), @"200 OK");
184-
assert_snapshot!(response.text(), @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
184+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
185185
}
186186

187187
#[tokio::test(flavor = "multi_thread")]
@@ -201,7 +201,7 @@ async fn owner_change_via_change_owner_token() {
201201

202202
let response = token.add_named_owner(&krate.name, &user2.username).await;
203203
assert_snapshot!(response.status(), @"200 OK");
204-
assert_snapshot!(response.text(), @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
204+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
205205
}
206206

207207
#[tokio::test(flavor = "multi_thread")]
@@ -222,7 +222,7 @@ async fn owner_change_via_change_owner_token_with_matching_crate_scope() {
222222

223223
let response = token.add_named_owner(&krate.name, &user2.username).await;
224224
assert_snapshot!(response.status(), @"200 OK");
225-
assert_snapshot!(response.text(), @r#"{"msg":"user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
225+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user user-2 has been invited to be an owner of crate foo_crate","ok":true}"#);
226226
}
227227

228228
#[tokio::test(flavor = "multi_thread")]
@@ -298,7 +298,7 @@ async fn test_owner_change_with_legacy_field() {
298298
.put::<()>("/api/v1/crates/foo/owners", input.as_bytes())
299299
.await;
300300
assert_snapshot!(response.status(), @"200 OK");
301-
assert_snapshot!(response.text(), @r#"{"msg":"user user2 has been invited to be an owner of crate foo","ok":true}"#);
301+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user user2 has been invited to be an owner of crate foo","ok":true}"#);
302302
}
303303

304304
#[tokio::test(flavor = "multi_thread")]
@@ -352,15 +352,15 @@ async fn invite_already_invited_user() {
352352
// Invite the user the first time
353353
let response = owner.add_named_owner("crate_name", "invited_user").await;
354354
assert_snapshot!(response.status(), @"200 OK");
355-
assert_snapshot!(response.text(), @r#"{"msg":"user invited_user has been invited to be an owner of crate crate_name","ok":true}"#);
355+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user invited_user has been invited to be an owner of crate crate_name","ok":true}"#);
356356

357357
// Check one email was sent, this will be the ownership invite email
358358
assert_eq!(app.emails().await.len(), 1);
359359

360360
// Then invite the user a second time, the message should point out the user is already invited
361361
let response = owner.add_named_owner("crate_name", "invited_user").await;
362362
assert_snapshot!(response.status(), @"200 OK");
363-
assert_snapshot!(response.text(), @r#"{"msg":"user invited_user already has a pending invitation to be an owner of crate crate_name","ok":true}"#);
363+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user invited_user already has a pending invitation to be an owner of crate crate_name","ok":true}"#);
364364

365365
// Check that no new email is sent after the second invitation
366366
assert_eq!(app.emails().await.len(), 1);
@@ -382,7 +382,7 @@ async fn invite_with_existing_expired_invite() {
382382
// Invite the user the first time
383383
let response = owner.add_named_owner("crate_name", "invited_user").await;
384384
assert_snapshot!(response.status(), @"200 OK");
385-
assert_snapshot!(response.text(), @r#"{"msg":"user invited_user has been invited to be an owner of crate crate_name","ok":true}"#);
385+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user invited_user has been invited to be an owner of crate crate_name","ok":true}"#);
386386

387387
// Check one email was sent, this will be the ownership invite email
388388
assert_eq!(app.emails().await.len(), 1);
@@ -393,7 +393,7 @@ async fn invite_with_existing_expired_invite() {
393393
// Then invite the user a second time, a new invite is created as the old one expired
394394
let response = owner.add_named_owner("crate_name", "invited_user").await;
395395
assert_snapshot!(response.status(), @"200 OK");
396-
assert_snapshot!(response.text(), @r#"{"msg":"user invited_user has been invited to be an owner of crate crate_name","ok":true}"#);
396+
assert_snapshot!(response.text(), @r#"{"msg":"Crates.io user invited_user has been invited to be an owner of crate crate_name","ok":true}"#);
397397

398398
// Check that the email for the second invite was sent
399399
assert_eq!(app.emails().await.len(), 2);

src/tests/snapshots/integration__openapi__openapi_internal_snapshot-2.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3668,7 +3668,7 @@ expression: response.json()
36683668
"properties": {
36693669
"msg": {
36703670
"description": "A message describing the result of the operation.",
3671-
"example": "user ghost has been invited to be an owner of crate serde",
3671+
"example": "Crates.io user ghost has been invited to be an owner of crate serde",
36723672
"type": "string"
36733673
},
36743674
"ok": {
@@ -3828,7 +3828,7 @@ expression: response.json()
38283828
"properties": {
38293829
"msg": {
38303830
"description": "A message describing the result of the operation.",
3831-
"example": "user ghost has been invited to be an owner of crate serde",
3831+
"example": "Crates.io user ghost has been invited to be an owner of crate serde",
38323832
"type": "string"
38333833
},
38343834
"ok": {

src/tests/snapshots/integration__openapi__openapi_snapshot-2.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2935,7 +2935,7 @@ expression: response.json()
29352935
"properties": {
29362936
"msg": {
29372937
"description": "A message describing the result of the operation.",
2938-
"example": "user ghost has been invited to be an owner of crate serde",
2938+
"example": "Crates.io user ghost has been invited to be an owner of crate serde",
29392939
"type": "string"
29402940
},
29412941
"ok": {
@@ -3095,7 +3095,7 @@ expression: response.json()
30953095
"properties": {
30963096
"msg": {
30973097
"description": "A message describing the result of the operation.",
3098-
"example": "user ghost has been invited to be an owner of crate serde",
3098+
"example": "Crates.io user ghost has been invited to be an owner of crate serde",
30993099
"type": "string"
31003100
},
31013101
"ok": {

0 commit comments

Comments
 (0)