forked from diesel-rs/diesel
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherrors.rs
More file actions
62 lines (53 loc) · 1.91 KB
/
Copy patherrors.rs
File metadata and controls
62 lines (53 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use diesel;
use diesel::prelude::*;
use diesel::result::Error::DatabaseError;
use diesel::result::DatabaseErrorKind::UniqueViolation;
use schema::*;
#[test]
fn unique_constraints_are_detected() {
let connection = connection();
diesel::insert(&User::new(1, "Sean")).into(users::table)
.execute(&connection).unwrap();
let failure = diesel::insert(&User::new(1, "Jim")).into(users::table)
.execute(&connection);
assert_matches!(failure, Err(DatabaseError(UniqueViolation, _)));
}
#[test]
#[cfg(feature = "postgres")]
fn unique_constraints_report_correct_constraint_name() {
let connection = connection();
connection.execute("CREATE UNIQUE INDEX users_name ON users (name)").unwrap();
diesel::insert(&User::new(1, "Sean")).into(users::table)
.execute(&connection).unwrap();
let failure = diesel::insert(&User::new(2, "Sean")).into(users::table)
.execute(&connection);
match failure {
Err(DatabaseError(UniqueViolation, e)) => {
assert_eq!(Some("users"), e.table_name());
assert_eq!(None, e.column_name());
assert_eq!(Some("users_name"), e.constraint_name());
},
_ => panic!("{:?} did not match Err(DatabaseError(UniqueViolation, e))", failure),
};
}
macro_rules! try_no_coerce {
($e:expr) => ({
match $e {
Ok(e) => e,
Err(e) => return Err(e),
}
})
}
#[test]
fn cached_prepared_statements_can_be_reused_after_error() {
let connection = connection_without_transaction();
let user = User::new(1, "Sean");
let query = diesel::insert(&user).into(users::table);
connection.test_transaction(|| {
try_no_coerce!(query.execute(&connection));
let failure = query.execute(&connection);
assert_matches!(failure, Err(DatabaseError(UniqueViolation, _)));
Ok(())
});
connection.test_transaction(|| query.execute(&connection));
}