Skip to content

Commit b7f1b99

Browse files
authored
Merge pull request #9735 from Turbo87/async-db
Migrate tests from sync to async database connection
2 parents fc4a6d2 + 7a003c5 commit b7f1b99

File tree

22 files changed

+350
-215
lines changed

22 files changed

+350
-215
lines changed

src/tests/account_lock.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ use insta::assert_snapshot;
66
const URL: &str = "/api/v1/me";
77
const LOCK_REASON: &str = "test lock reason";
88

9-
fn lock_account(app: &TestApp, user_id: i32, until: Option<NaiveDateTime>) {
9+
async fn lock_account(app: &TestApp, user_id: i32, until: Option<NaiveDateTime>) {
1010
use crate::schema::users;
1111
use diesel::prelude::*;
12+
use diesel_async::RunQueryDsl;
1213

13-
let mut conn = app.db_conn();
14+
let mut conn = app.async_db_conn().await;
1415

1516
diesel::update(users::table)
1617
.set((
@@ -19,13 +20,14 @@ fn lock_account(app: &TestApp, user_id: i32, until: Option<NaiveDateTime>) {
1920
))
2021
.filter(users::id.eq(user_id))
2122
.execute(&mut conn)
23+
.await
2224
.unwrap();
2325
}
2426

2527
#[tokio::test(flavor = "multi_thread")]
2628
async fn account_locked_indefinitely() {
2729
let (app, _anon, user) = TestApp::init().with_user();
28-
lock_account(&app, user.as_model().id, None);
30+
lock_account(&app, user.as_model().id, None).await;
2931

3032
let response = user.get::<()>(URL).await;
3133
assert_eq!(response.status(), StatusCode::FORBIDDEN);
@@ -40,7 +42,7 @@ async fn account_locked_with_future_expiry() {
4042
.naive_utc();
4143

4244
let (app, _anon, user) = TestApp::init().with_user();
43-
lock_account(&app, user.as_model().id, Some(until));
45+
lock_account(&app, user.as_model().id, Some(until)).await;
4446

4547
let response = user.get::<()>(URL).await;
4648
assert_eq!(response.status(), StatusCode::FORBIDDEN);
@@ -52,7 +54,7 @@ async fn expired_account_lock() {
5254
let until = Utc::now().naive_utc() - Duration::days(1);
5355

5456
let (app, _anon, user) = TestApp::init().with_user();
55-
lock_account(&app, user.as_model().id, Some(until));
57+
lock_account(&app, user.as_model().id, Some(until)).await;
5658

5759
user.get::<serde_json::Value>(URL).await.good();
5860
}

src/tests/github_secret_scanning.rs

Lines changed: 62 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::tests::{RequestHelper, TestApp};
33
use crate::util::token::HashedToken;
44
use crate::{models::ApiToken, schema::api_tokens};
55
use diesel::prelude::*;
6+
use diesel_async::RunQueryDsl;
67
use googletest::prelude::*;
78
use http::StatusCode;
89
use insta::{assert_json_snapshot, assert_snapshot};
@@ -19,16 +20,19 @@ static GITHUB_PUBLIC_KEY_SIGNATURE: &str = "MEUCIFLZzeK++IhS+y276SRk2Pe5LfDrfvTX
1920
#[tokio::test(flavor = "multi_thread")]
2021
async fn github_secret_alert_revokes_token() {
2122
let (app, anon, user, token) = TestApp::init().with_token();
22-
let mut conn = app.db_conn();
23+
let mut conn = app.async_db_conn().await;
2324

2425
// Ensure no emails were sent up to this point
2526
assert_eq!(app.emails().len(), 0);
2627

2728
// Ensure that the token currently exists in the database
28-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
29-
.select(ApiToken::as_select())
30-
.filter(api_tokens::revoked.eq(false))
31-
.load(&mut conn));
29+
let tokens: Vec<ApiToken> = assert_ok!(
30+
ApiToken::belonging_to(user.as_model())
31+
.select(ApiToken::as_select())
32+
.filter(api_tokens::revoked.eq(false))
33+
.load(&mut conn)
34+
.await
35+
);
3236
assert_that!(tokens, len(eq(1)));
3337
assert_eq!(tokens[0].name, token.as_model().name);
3438

@@ -37,6 +41,7 @@ async fn github_secret_alert_revokes_token() {
3741
diesel::update(api_tokens::table)
3842
.set(api_tokens::token.eq(hashed_token))
3943
.execute(&mut conn)
44+
.await
4045
.unwrap();
4146

4247
let mut request = anon.post_request(URL);
@@ -48,16 +53,22 @@ async fn github_secret_alert_revokes_token() {
4853
assert_json_snapshot!(response.json());
4954

5055
// Ensure that the token was revoked
51-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
52-
.select(ApiToken::as_select())
53-
.filter(api_tokens::revoked.eq(false))
54-
.load(&mut conn));
56+
let tokens: Vec<ApiToken> = assert_ok!(
57+
ApiToken::belonging_to(user.as_model())
58+
.select(ApiToken::as_select())
59+
.filter(api_tokens::revoked.eq(false))
60+
.load(&mut conn)
61+
.await
62+
);
5563
assert_that!(tokens, empty());
5664

57-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
58-
.select(ApiToken::as_select())
59-
.filter(api_tokens::revoked.eq(true))
60-
.load(&mut conn));
65+
let tokens: Vec<ApiToken> = assert_ok!(
66+
ApiToken::belonging_to(user.as_model())
67+
.select(ApiToken::as_select())
68+
.filter(api_tokens::revoked.eq(true))
69+
.load(&mut conn)
70+
.await
71+
);
6172
assert_that!(tokens, len(eq(1)));
6273

6374
// Ensure exactly one email was sent
@@ -67,16 +78,19 @@ async fn github_secret_alert_revokes_token() {
6778
#[tokio::test(flavor = "multi_thread")]
6879
async fn github_secret_alert_for_revoked_token() {
6980
let (app, anon, user, token) = TestApp::init().with_token();
70-
let mut conn = app.db_conn();
81+
let mut conn = app.async_db_conn().await;
7182

7283
// Ensure no emails were sent up to this point
7384
assert_eq!(app.emails().len(), 0);
7485

7586
// Ensure that the token currently exists in the database
76-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
77-
.select(ApiToken::as_select())
78-
.filter(api_tokens::revoked.eq(false))
79-
.load(&mut conn));
87+
let tokens: Vec<ApiToken> = assert_ok!(
88+
ApiToken::belonging_to(user.as_model())
89+
.select(ApiToken::as_select())
90+
.filter(api_tokens::revoked.eq(false))
91+
.load(&mut conn)
92+
.await
93+
);
8094
assert_that!(tokens, len(eq(1)));
8195
assert_eq!(tokens[0].name, token.as_model().name);
8296

@@ -88,6 +102,7 @@ async fn github_secret_alert_for_revoked_token() {
88102
api_tokens::revoked.eq(true),
89103
))
90104
.execute(&mut conn)
105+
.await
91106
.unwrap();
92107

93108
let mut request = anon.post_request(URL);
@@ -99,16 +114,22 @@ async fn github_secret_alert_for_revoked_token() {
99114
assert_json_snapshot!(response.json());
100115

101116
// Ensure that the token is still revoked
102-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
103-
.select(ApiToken::as_select())
104-
.filter(api_tokens::revoked.eq(false))
105-
.load(&mut conn));
117+
let tokens: Vec<ApiToken> = assert_ok!(
118+
ApiToken::belonging_to(user.as_model())
119+
.select(ApiToken::as_select())
120+
.filter(api_tokens::revoked.eq(false))
121+
.load(&mut conn)
122+
.await
123+
);
106124
assert_that!(tokens, empty());
107125

108-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
109-
.select(ApiToken::as_select())
110-
.filter(api_tokens::revoked.eq(true))
111-
.load(&mut conn));
126+
let tokens: Vec<ApiToken> = assert_ok!(
127+
ApiToken::belonging_to(user.as_model())
128+
.select(ApiToken::as_select())
129+
.filter(api_tokens::revoked.eq(true))
130+
.load(&mut conn)
131+
.await
132+
);
112133
assert_that!(tokens, len(eq(1)));
113134

114135
// Ensure still no emails were sent
@@ -118,16 +139,19 @@ async fn github_secret_alert_for_revoked_token() {
118139
#[tokio::test(flavor = "multi_thread")]
119140
async fn github_secret_alert_for_unknown_token() {
120141
let (app, anon, user, token) = TestApp::init().with_token();
121-
let mut conn = app.db_conn();
142+
let mut conn = app.async_db_conn().await;
122143

123144
// Ensure no emails were sent up to this point
124145
assert_eq!(app.emails().len(), 0);
125146

126147
// Ensure that the token currently exists in the database
127-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
128-
.select(ApiToken::as_select())
129-
.filter(api_tokens::revoked.eq(false))
130-
.load(&mut conn));
148+
let tokens: Vec<ApiToken> = assert_ok!(
149+
ApiToken::belonging_to(user.as_model())
150+
.select(ApiToken::as_select())
151+
.filter(api_tokens::revoked.eq(false))
152+
.load(&mut conn)
153+
.await
154+
);
131155
assert_that!(tokens, len(eq(1)));
132156
assert_eq!(tokens[0].name, token.as_model().name);
133157

@@ -140,10 +164,13 @@ async fn github_secret_alert_for_unknown_token() {
140164
assert_json_snapshot!(response.json());
141165

142166
// Ensure that the token was not revoked
143-
let tokens: Vec<ApiToken> = assert_ok!(ApiToken::belonging_to(user.as_model())
144-
.select(ApiToken::as_select())
145-
.filter(api_tokens::revoked.eq(false))
146-
.load(&mut conn));
167+
let tokens: Vec<ApiToken> = assert_ok!(
168+
ApiToken::belonging_to(user.as_model())
169+
.select(ApiToken::as_select())
170+
.filter(api_tokens::revoked.eq(false))
171+
.load(&mut conn)
172+
.await
173+
);
147174
assert_that!(tokens, len(eq(1)));
148175
assert_eq!(tokens[0].name, token.as_model().name);
149176

src/tests/krate/publish/auth.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
use crate::schema::api_tokens;
22
use crate::tests::builders::{CrateBuilder, PublishBuilder};
33
use crate::tests::util::{RequestHelper, TestApp};
4-
use diesel::{ExpressionMethods, RunQueryDsl};
4+
use diesel::ExpressionMethods;
5+
use diesel_async::RunQueryDsl;
56
use googletest::prelude::*;
67
use http::StatusCode;
78
use insta::assert_snapshot;
89

910
#[tokio::test(flavor = "multi_thread")]
1011
async fn new_wrong_token() {
1112
let (app, anon, _, token) = TestApp::full().with_token();
12-
let mut conn = app.db_conn();
13+
let mut conn = app.async_db_conn().await;
1314

1415
// Try to publish without a token
1516
let crate_to_publish = PublishBuilder::new("foo", "1.0.0");
@@ -21,6 +22,7 @@ async fn new_wrong_token() {
2122
diesel::update(api_tokens::table)
2223
.set(api_tokens::token.eq(b"bad" as &[u8]))
2324
.execute(&mut conn)
25+
.await
2426
.unwrap();
2527

2628
let crate_to_publish = PublishBuilder::new("foo", "1.0.0");

src/tests/krate/publish/basics.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
use crate::schema::versions_published_by;
22
use crate::tests::builders::{CrateBuilder, PublishBuilder};
33
use crate::tests::util::{RequestHelper, TestApp};
4-
use diesel::{QueryDsl, RunQueryDsl};
4+
use diesel::QueryDsl;
5+
use diesel_async::RunQueryDsl;
56
use googletest::prelude::*;
67
use http::StatusCode;
78
use insta::{assert_json_snapshot, assert_snapshot};
89

910
#[tokio::test(flavor = "multi_thread")]
1011
async fn new_krate() {
1112
let (app, _, user) = TestApp::full().with_user();
12-
let mut conn = app.db_conn();
13+
let mut conn = app.async_db_conn().await;
1314

1415
let crate_to_publish = PublishBuilder::new("foo_new", "1.0.0");
1516
let response = user.publish_crate(crate_to_publish).await;
@@ -33,6 +34,7 @@ async fn new_krate() {
3334
let email: String = versions_published_by::table
3435
.select(versions_published_by::email)
3536
.first(&mut conn)
37+
.await
3638
.unwrap();
3739
assert_eq!(email, "[email protected]");
3840

src/tests/krate/publish/categories.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,21 @@ use crate::tests::builders::PublishBuilder;
22
use crate::tests::new_category;
33
use crate::tests::util::{RequestHelper, TestApp};
44
use crates_io_database::schema::categories;
5-
use diesel::{insert_into, RunQueryDsl};
5+
use diesel::insert_into;
6+
use diesel_async::RunQueryDsl;
67
use googletest::prelude::*;
78
use http::StatusCode;
89
use insta::{assert_json_snapshot, assert_snapshot};
910

1011
#[tokio::test(flavor = "multi_thread")]
1112
async fn good_categories() {
1213
let (app, _, _, token) = TestApp::full().with_token();
13-
let mut conn = app.db_conn();
14+
let mut conn = app.async_db_conn().await;
1415

1516
insert_into(categories::table)
1617
.values(new_category("Category 1", "cat1", "Category 1 crates"))
1718
.execute(&mut conn)
19+
.await
1820
.unwrap();
1921

2022
let crate_to_publish = PublishBuilder::new("foo_good_cat", "1.0.0").category("cat1");

src/tests/krate/publish/emails.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
use crate::schema::emails;
22
use crate::tests::builders::PublishBuilder;
33
use crate::tests::util::{RequestHelper, TestApp};
4-
use diesel::{delete, update, ExpressionMethods, RunQueryDsl};
4+
use diesel::{delete, update, ExpressionMethods};
5+
use diesel_async::RunQueryDsl;
56
use googletest::prelude::*;
7+
68
use http::StatusCode;
79
use insta::assert_snapshot;
810

911
#[tokio::test(flavor = "multi_thread")]
1012
async fn new_krate_without_any_email_fails() {
1113
let (app, _, _, token) = TestApp::full().with_token();
12-
let mut conn = app.db_conn();
14+
let mut conn = app.async_db_conn().await;
1315

14-
delete(emails::table).execute(&mut conn).unwrap();
16+
delete(emails::table).execute(&mut conn).await.unwrap();
1517

1618
let crate_to_publish = PublishBuilder::new("foo_no_email", "1.0.0");
1719

@@ -25,11 +27,12 @@ async fn new_krate_without_any_email_fails() {
2527
#[tokio::test(flavor = "multi_thread")]
2628
async fn new_krate_with_unverified_email_fails() {
2729
let (app, _, _, token) = TestApp::full().with_token();
28-
let mut conn = app.db_conn();
30+
let mut conn = app.async_db_conn().await;
2931

3032
update(emails::table)
3133
.set((emails::verified.eq(false),))
3234
.execute(&mut conn)
35+
.await
3336
.unwrap();
3437

3538
let crate_to_publish = PublishBuilder::new("foo_unverified_email", "1.0.0");

0 commit comments

Comments
 (0)