Skip to content

Commit fbd8899

Browse files
committed
models/user: Extract insert() fn
1 parent f5c75e2 commit fbd8899

File tree

8 files changed

+32
-49
lines changed

8 files changed

+32
-49
lines changed

src/models/user.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ pub struct NewUser<'a> {
121121
}
122122

123123
impl<'a> NewUser<'a> {
124+
/// Inserts the user into the database, or fails if the user already exists.
125+
pub async fn insert(&self, conn: &mut AsyncPgConnection) -> QueryResult<User> {
126+
diesel::insert_into(users::table)
127+
.values(self)
128+
.get_result(conn)
129+
.await
130+
}
131+
124132
/// Inserts the user into the database, or updates an existing one.
125133
pub async fn insert_or_update(&self, conn: &mut AsyncPgConnection) -> QueryResult<User> {
126134
diesel::insert_into(users::table)

src/rate_limiter.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ struct Bucket {
183183
#[cfg(test)]
184184
mod tests {
185185
use super::*;
186-
use crate::schema::users;
187186
use crates_io_test_db::TestDatabase;
188187

189188
#[tokio::test]
@@ -702,17 +701,14 @@ mod tests {
702701
async fn new_user(conn: &mut AsyncPgConnection, gh_login: &str) -> QueryResult<i32> {
703702
use crate::models::NewUser;
704703

705-
let user = NewUser::builder()
704+
NewUser::builder()
706705
.gh_id(0)
707706
.gh_login(gh_login)
708707
.gh_access_token("some random token")
709-
.build();
710-
711-
diesel::insert_into(users::table)
712-
.values(user)
713-
.returning(users::id)
714-
.get_result(conn)
708+
.build()
709+
.insert(conn)
715710
.await
711+
.map(|user| user.id)
716712
}
717713

718714
async fn new_user_bucket(

src/tests/owners.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use crate::views::{
88
EncodableCrateOwnerInvitationV1, EncodableOwner, EncodablePublicUser, InvitationResponse,
99
};
1010

11-
use crate::schema::users;
1211
use chrono::Utc;
1312
use diesel::prelude::*;
1413
use diesel_async::RunQueryDsl;
@@ -770,15 +769,12 @@ async fn inactive_users_dont_get_invitations() {
770769
let invited_gh_login = "user_bar";
771770
let krate_name = "inactive_test";
772771

773-
let user = NewUser::builder()
772+
NewUser::builder()
774773
.gh_id(-1)
775774
.gh_login(invited_gh_login)
776775
.gh_access_token("some random token")
777-
.build();
778-
779-
diesel::insert_into(users::table)
780-
.values(user)
781-
.execute(&mut conn)
776+
.build()
777+
.insert(&mut conn)
782778
.await
783779
.unwrap();
784780

src/tests/routes/crates/list.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::models::Category;
2-
use crate::schema::{crates, users};
2+
use crate::schema::crates;
33
use crate::tests::builders::{CrateBuilder, VersionBuilder};
44
use crate::tests::util::{RequestHelper, TestApp};
55
use crate::tests::{new_category, new_user};
@@ -22,11 +22,7 @@ async fn index() -> anyhow::Result<()> {
2222
assert_eq!(json.meta.total, 0);
2323
}
2424

25-
let user_id = insert_into(users::table)
26-
.values(new_user("foo"))
27-
.returning(users::id)
28-
.get_result(&mut conn)
29-
.await?;
25+
let user_id = new_user("foo").insert(&mut conn).await?.id;
3026

3127
let krate = CrateBuilder::new("fooindex", user_id)
3228
.expect_build(&mut conn)

src/tests/routes/me/email_notifications.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::schema::{crate_owners, users};
1+
use crate::schema::crate_owners;
22
use crate::tests::builders::CrateBuilder;
33
use crate::tests::new_user;
44
use crate::tests::util::{RequestHelper, TestApp};
@@ -115,12 +115,11 @@ async fn test_update_email_notifications_not_owned() {
115115
let (app, _, user) = TestApp::init().with_user().await;
116116
let mut conn = app.db_conn().await;
117117

118-
let user_id = diesel::insert_into(users::table)
119-
.values(new_user("arbitrary_username"))
120-
.returning(users::id)
121-
.get_result(&mut conn)
118+
let user_id = new_user("arbitrary_username")
119+
.insert(&mut conn)
122120
.await
123-
.unwrap();
121+
.unwrap()
122+
.id;
124123

125124
let not_my_crate = CrateBuilder::new("test_package", user_id)
126125
.expect_build(&mut conn)

src/tests/util/test_app.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ use crate::config::{
44
};
55
use crate::middleware::cargo_compat::StatusCodeConfig;
66
use crate::models::token::{CrateScope, EndpointScope};
7-
use crate::models::{NewEmail, User};
7+
use crate::models::NewEmail;
88
use crate::rate_limiter::{LimitedAction, RateLimiterConfig};
9-
use crate::schema::users;
109
use crate::storage::StorageConfig;
1110
use crate::tests::util::chaosproxy::ChaosProxy;
1211
use crate::tests::util::github::MOCK_GITHUB_DATA;
@@ -120,15 +119,12 @@ impl TestApp {
120119
///
121120
/// This method updates the database directly
122121
pub async fn db_new_user(&self, username: &str) -> MockCookieUser {
123-
use diesel_async::RunQueryDsl;
124-
125122
let mut conn = self.db_conn().await;
126123

127124
let email = format!("{username}@example.com");
128125

129-
let user: User = diesel::insert_into(users::table)
130-
.values(crate::tests::new_user(username))
131-
.get_result(&mut conn)
126+
let user = crate::tests::new_user(username)
127+
.insert(&mut conn)
132128
.await
133129
.unwrap();
134130

src/typosquat/test_util.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use diesel::prelude::*;
2-
use diesel_async::RunQueryDsl;
32

43
use crate::models::{Crate, NewTeam, NewUser, Team, User};
5-
use crate::schema::users;
64
use crate::tests::util::github::next_gh_id;
75

86
pub mod faker {
@@ -40,15 +38,12 @@ pub mod faker {
4038
}
4139

4240
pub async fn user(conn: &mut AsyncPgConnection, login: &str) -> QueryResult<User> {
43-
let user = NewUser::builder()
41+
NewUser::builder()
4442
.gh_id(next_gh_id())
4543
.gh_login(login)
4644
.gh_access_token("token")
47-
.build();
48-
49-
diesel::insert_into(users::table)
50-
.values(user)
51-
.get_result(conn)
45+
.build()
46+
.insert(conn)
5247
.await
5348
}
5449
}

src/worker/jobs/downloads/update_metadata.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,17 @@ async fn batch_update(batch_size: i64, conn: &mut AsyncPgConnection) -> QueryRes
106106
mod tests {
107107
use super::*;
108108
use crate::models::{Crate, NewCrate, NewUser, NewVersion, User, Version};
109-
use crate::schema::{crate_downloads, crates, users, versions};
109+
use crate::schema::{crate_downloads, crates, versions};
110110
use crates_io_test_db::TestDatabase;
111111
use diesel_async::AsyncConnection;
112112

113113
async fn user(conn: &mut AsyncPgConnection) -> User {
114-
let user = NewUser::builder()
114+
NewUser::builder()
115115
.gh_id(2)
116116
.gh_login("login")
117117
.gh_access_token("access_token")
118-
.build();
119-
120-
diesel::insert_into(users::table)
121-
.values(user)
122-
.get_result(conn)
118+
.build()
119+
.insert(conn)
123120
.await
124121
.unwrap()
125122
}

0 commit comments

Comments
 (0)