#![cfg(feature = "diesel")]
use diesel::{
deserialize::QueryableByName, prelude::*, sql_query, sql_types::Text, SqliteConnection,
};
use mrmime::MimeType;
fn sqlite_conn() -> SqliteConnection {
SqliteConnection::establish(":memory:").expect("failed to create in-memory sqlite DB")
}
#[test]
fn diesel_bind_and_load_roundtrip() {
let mut conn = sqlite_conn();
let mt: MimeType = "application/json".parse().unwrap();
#[derive(QueryableByName, Debug)]
struct Row {
#[diesel(sql_type = Text)]
v: MimeType,
}
let row: Row = sql_query("select ? as v")
.bind::<Text, _>(mt)
.get_result(&mut conn)
.expect("diesel roundtrip failed");
assert_eq!(row.v, mt);
}
#[test]
fn diesel_table_roundtrip() {
let mut conn = sqlite_conn();
sql_query("create table items (id integer primary key autoincrement, mt text not null)")
.execute(&mut conn)
.unwrap();
let mt: MimeType = "image/png".parse().unwrap();
sql_query("insert into items (mt) values (?)")
.bind::<Text, _>(mt)
.execute(&mut conn)
.unwrap();
#[derive(QueryableByName, Debug)]
struct ItemRow {
#[diesel(sql_type = Text)]
mt: MimeType,
}
let row: ItemRow = sql_query("select mt from items limit 1")
.get_result(&mut conn)
.unwrap();
assert_eq!(row.mt, mt);
}
#[test]
fn diesel_deserialize_invalid_is_error() {
let mut conn = sqlite_conn();
#[derive(QueryableByName, Debug)]
struct Row {
#[diesel(sql_type = Text)]
#[allow(dead_code)]
v: MimeType,
}
let err = sql_query("select 'application/not-registered' as v")
.get_result::<Row>(&mut conn)
.unwrap_err();
let msg = err.to_string();
assert!(
msg.to_lowercase().contains("not registered"),
"unexpected error: {}",
msg
);
}