Skip to content

Commit d509842

Browse files
committed
Fix the mysql tests
1 parent a06d74e commit d509842

File tree

2 files changed

+51
-19
lines changed

2 files changed

+51
-19
lines changed

src/doctest_setup.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -101,49 +101,51 @@ cfg_if::cfg_if! {
101101
async fn establish_connection() -> AsyncMysqlConnection {
102102
let mut connection = connection_no_data().await;
103103

104-
diesel::sql_query("CREATE TABLE users (
104+
diesel::sql_query("CREATE TABLE IF NOT EXISTS users (
105105
id INTEGER PRIMARY KEY AUTO_INCREMENT,
106106
name TEXT NOT NULL
107107
) CHARACTER SET utf8mb4").execute(&mut connection).await.unwrap();
108-
diesel::sql_query("INSERT INTO users (name) VALUES ('Sean'), ('Tess')").execute(&mut connection).await.unwrap();
109108

110-
diesel::sql_query("CREATE TABLE animals (
109+
110+
diesel::sql_query("CREATE TABLE IF NOT EXISTS animals (
111111
id INTEGER PRIMARY KEY AUTO_INCREMENT,
112112
species TEXT NOT NULL,
113113
legs INTEGER NOT NULL,
114114
name TEXT
115115
) CHARACTER SET utf8mb4").execute(&mut connection).await.unwrap();
116-
diesel::sql_query("INSERT INTO animals (species, legs, name) VALUES
117-
('dog', 4, 'Jack'),
118-
('spider', 8, null)").execute(&mut connection).await.unwrap();
119116

120-
diesel::sql_query("CREATE TABLE posts (
117+
diesel::sql_query("CREATE TABLE IF NOT EXISTS posts (
121118
id INTEGER PRIMARY KEY AUTO_INCREMENT,
122119
user_id INTEGER NOT NULL,
123120
title TEXT NOT NULL
124121
) CHARACTER SET utf8mb4").execute(&mut connection).await.unwrap();
125-
diesel::sql_query("INSERT INTO posts (user_id, title) VALUES
126-
(1, 'My first post'),
127-
(1, 'About Rust'),
128-
(2, 'My first post too')").execute(&mut connection).await.unwrap();
129122

130-
diesel::sql_query("CREATE TABLE comments (
123+
diesel::sql_query("CREATE TABLE IF NOT EXISTS comments (
131124
id INTEGER PRIMARY KEY AUTO_INCREMENT,
132125
post_id INTEGER NOT NULL,
133126
body TEXT NOT NULL
134127
) CHARACTER SET utf8mb4").execute(&mut connection).await.unwrap();
135-
diesel::sql_query("INSERT INTO comments (post_id, body) VALUES
136-
(1, 'Great post'),
137-
(2, 'Yay! I am learning Rust'),
138-
(3, 'I enjoyed your post')").execute(&mut connection).await.unwrap();
139-
140-
diesel::sql_query("CREATE TABLE brands (
128+
diesel::sql_query("CREATE TABLE IF NOT EXISTS brands (
141129
id INTEGER PRIMARY KEY AUTO_INCREMENT,
142130
color VARCHAR(255) NOT NULL DEFAULT 'Green',
143131
accent VARCHAR(255) DEFAULT 'Blue'
144132
)").execute(&mut connection).await.unwrap();
145133

146134
connection.begin_test_transaction().await.unwrap();
135+
diesel::sql_query("INSERT INTO users (name) VALUES ('Sean'), ('Tess')").execute(&mut connection).await.unwrap();
136+
diesel::sql_query("INSERT INTO posts (user_id, title) VALUES
137+
(1, 'My first post'),
138+
(1, 'About Rust'),
139+
(2, 'My first post too')").execute(&mut connection).await.unwrap();
140+
diesel::sql_query("INSERT INTO comments (post_id, body) VALUES
141+
(1, 'Great post'),
142+
(2, 'Yay! I am learning Rust'),
143+
(3, 'I enjoyed your post')").execute(&mut connection).await.unwrap();
144+
diesel::sql_query("INSERT INTO animals (species, legs, name) VALUES
145+
('dog', 4, 'Jack'),
146+
('spider', 8, null)").execute(&mut connection).await.unwrap();
147+
148+
147149
connection
148150
}
149151
} else {

tests/lib.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use diesel::prelude::{ExpressionMethods, OptionalExtension, QueryDsl};
22
use diesel::QueryResult;
33
use diesel_async::*;
4+
use futures::FutureExt;
45
use std::fmt::Debug;
56
use std::pin::Pin;
67

@@ -19,12 +20,32 @@ async fn transaction_test(conn: &mut TestConnection) -> QueryResult<()> {
1920
let user: Option<User> = users::table.find(42).first(conn).await.optional()?;
2021
assert_eq!(user, None::<User>);
2122

23+
let res = conn
24+
.transaction::<_, _, diesel::result::Error>(|conn| {
25+
async move {
26+
diesel::insert_into(users::table)
27+
.values(users::name.eq("Dave"))
28+
.execute(conn)
29+
.await?;
30+
let count = users::table.count().get_result::<i64>(conn).await?;
31+
assert_eq!(count, 3);
32+
Ok(())
33+
}
34+
.boxed()
35+
})
36+
.await;
37+
assert!(res.is_ok());
38+
let count = users::table.count().get_result::<i64>(conn).await?;
39+
assert_eq!(count, 3);
40+
2241
let res = diesel::insert_into(users::table)
2342
.values(users::name.eq("Eve"))
2443
.execute(conn)
2544
.await?;
2645

2746
assert_eq!(res, 1, "Insert in transaction returned wrong result");
47+
let count = users::table.count().get_result::<i64>(conn).await?;
48+
assert_eq!(count, 4);
2849

2950
Err(diesel::result::Error::RollbackTransaction)
3051
}) as Pin<Box<_>>
@@ -106,7 +127,16 @@ async fn setup(connection: &mut TestConnection) {
106127
async fn connection() -> TestConnection {
107128
let db_url = std::env::var("DATABASE_URL").unwrap();
108129
let mut conn = TestConnection::establish(&db_url).await.unwrap();
109-
conn.begin_test_transaction().await.unwrap();
130+
if cfg!(feature = "postgres") {
131+
// postgres allows to modify the schema inside of a transaction
132+
conn.begin_test_transaction().await.unwrap();
133+
}
110134
setup(&mut conn).await;
135+
if cfg!(feature = "mysql") {
136+
// mysql does not allow this and does even automatically close
137+
// any open transaction. As of this we open a transaction **after**
138+
// we setup the schema
139+
conn.begin_test_transaction().await.unwrap();
140+
}
111141
conn
112142
}

0 commit comments

Comments
 (0)