use crate::Entity;
use std::fmt::Debug;
pub async fn create<E>(mut instance: E, pool: &crate::Pool)
where
E: Entity + Clone + Debug + Eq + Send,
{
assert!(
E::find(instance.pk(), pool).await.is_err(),
"instance was found (find) before it was created"
);
assert!(
E::find_optional(instance.pk(), pool)
.await
.unwrap()
.is_none(),
"instance was found (find_optional) before it was created"
);
instance.create(pool).await.expect("insertion did not work");
let retrieved = E::find(instance.pk(), pool)
.await
.expect("instance not found after insertion");
assert_eq!(instance, retrieved);
}
pub async fn read<E>(mut instance: E, pool: &crate::Pool)
where
E: Entity + Clone + Debug + Eq + Send,
{
assert!(
E::find(instance.pk(), pool).await.is_err(),
"instance was found (find) after deletion"
);
assert!(
E::find_optional(instance.pk(), pool)
.await
.unwrap()
.is_none(),
"instance was found (find_optional) after deletion"
);
instance.create(pool).await.expect("insertion did not work");
let retrieved = E::find(instance.pk(), pool)
.await
.expect("instance not found after insertion");
assert_eq!(instance, retrieved);
}
pub async fn update<E>(mut instance: E, updates: Vec<E>, pool: &crate::Pool)
where
E: Entity + Clone + Debug + Eq + Send,
{
instance.save(pool).await.expect("insertion did not work");
for mut update in updates {
update
.update(pool)
.await
.expect("updating the instance did not work");
instance
.reload(pool)
.await
.expect("reloading the instance did not work");
assert_eq!(instance, update);
let retrieved = E::find(instance.pk(), pool)
.await
.expect("instance not found after update");
assert_eq!(instance, retrieved);
let retrieved = E::find_optional(instance.pk(), pool)
.await
.unwrap()
.expect("instance not found (find_optional) after update");
assert_eq!(instance, retrieved);
}
}
pub async fn delete<E>(mut instance: E, pool: &crate::Pool)
where
E: Entity + Clone + Debug + Eq + Send,
{
instance.create(pool).await.expect("insertion did not work");
instance.delete(pool).await.expect("deletion did not work");
instance
.reload(pool)
.await
.expect_err("instance could be reloaded from db after deletion");
assert!(
E::find(instance.pk(), pool).await.is_err(),
"instance was found (find) after deletion"
);
assert!(
E::find_optional(instance.pk(), pool)
.await
.unwrap()
.is_none(),
"instance was found (find_optional) after deletion"
);
instance.create(pool).await.expect("insertion did not work");
E::delete_by(instance.pk(), pool)
.await
.expect("deletion did not work");
instance
.reload(pool)
.await
.expect_err("instance could be reloaded from db after deletion");
}