extern crate rusqlite;
#[macro_use]
extern crate serde;
extern crate smoldb;
use smoldb::*;
#[derive(Clone, Debug, PartialEq, Smoldb, Serialize, Deserialize)]
pub struct User {
#[index]
pub id: isize,
#[index]
pub name: String,
pub email: String,
pub description: String,
}
const TABLE_NAME: &str = "test_table";
#[test]
fn integration() {
let conn = Connection::open_in_memory().unwrap();
Store::<User>::create_table(&conn, TABLE_NAME).unwrap();
let mut e = User {
id: 0,
name: "Jane Smith".to_string(),
email: "jasm@abcd.org".to_string(),
description: "Test user!".to_string(),
};
conn.insert(TABLE_NAME, &e).unwrap();
let e1: Vec<User> = conn.select(TABLE_NAME, &[]).unwrap();
assert_eq!(&e1, &[e.clone()]);
let e1: Vec<User> = conn.select(TABLE_NAME, &[UserIndicies::Name("Jane Smith".to_string())]).unwrap();
assert_eq!(&e1, &[e.clone()]);
let e1: Vec<User> = conn.select(TABLE_NAME, &[UserIndicies::Name("Dave".to_string())]).unwrap();
assert_eq!(&e1, &[]);
e.email = "asdfsfd@asd.com".to_string();
e.description = "A replacement description".to_string();
conn.update(TABLE_NAME, &[UserIndicies::Name("Jane Smith".to_string())], &e).unwrap();
let e1: Vec<User> = conn.select(TABLE_NAME, &[UserIndicies::Name("Jane Smith".to_string())]).unwrap();
assert_eq!(&e1, &[e.clone()]);
Store::<User>::delete(&conn, TABLE_NAME, &[UserIndicies::Name("Jane Smith".to_string())]).unwrap();
let e1: Vec<User> = conn.select(TABLE_NAME, &[]).unwrap();
assert_eq!(&e1, &[]);
}