use diesel::pg::PgConnection;
use diesel::prelude::*;
use dotenv::dotenv;
use lrau::schema;
use std::env;
pub fn establish_connection() -> PgConnection {
dotenv().ok();
let database_url =
env::var("DATABASE_URL").expect("DATABASE_URL must be set");
PgConnection::establish(&database_url)
.expect(&format!("Error connecting to {}", database_url))
}
#[test]
fn diesel_test() -> Result<(), Box<dyn std::error::Error>> {
use lrau::schema::login_users;
use lrau::schema::login_users::dsl as users_dsl;
use lrau::user::diesel_support::DieselUser;
let permissions: lrau::Permissions =
toml::from_str(include_str!("./generic.toml")).unwrap();
let user = lrau::User::new(
String::from("john_t"),
String::from("1234"),
permissions,
);
let raw_user = DieselUser::from(user.clone());
assert_eq!(user, raw_user.clone().into());
let conn = establish_connection();
diesel::delete(
login_users::table.filter(users_dsl::username.like("john_t")),
)
.execute(&conn)?;
let inserted_user: DieselUser =
diesel::insert_into(schema::login_users::table)
.values(&raw_user)
.get_result(&conn)?;
let inserted_user: lrau::User = inserted_user.into();
assert_eq!(inserted_user, user);
Ok(())
}