test(sandbox): add repository testing
This commit is contained in:
parent
3d93beb5bd
commit
bbec0fc3bf
15 changed files with 545 additions and 124 deletions
86
lib/sandbox/tests/test_user_repository.rs
Normal file
86
lib/sandbox/tests/test_user_repository.rs
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
#![feature(assert_matches)]
|
||||
|
||||
// integration tests
|
||||
|
||||
use std::assert_matches::assert_matches;
|
||||
|
||||
use chrono::Utc;
|
||||
use sandbox::{models::user::{User, UserStatus}, repositories::user_repository::UserRepository};
|
||||
use sqlx::{types::Json, Pool, Sqlite};
|
||||
|
||||
#[sqlx::test(fixtures("../src/migrations/all.sql"))]
|
||||
async fn test_user_repository_create_read_update_delete(pool: Pool<Sqlite>) -> sqlx::Result<()> {
|
||||
pool.acquire().await?;
|
||||
|
||||
// Create
|
||||
let user_repo = UserRepository::new(sandbox::db::Database(pool));
|
||||
let new_user = User {
|
||||
id: "ffffffff-0000-4000-0000-0000000000c9".into(),
|
||||
handle: "caravage".into(),
|
||||
full_name: Some("Michelangelo Merisi da Caravaggio".into()),
|
||||
prefered_color: Some(0xff00ff.into()),
|
||||
last_login_at: Some(Utc::now()),
|
||||
status: UserStatus::Invited,
|
||||
groups: Json(vec!["artists".into()]),
|
||||
avatar_bytes: vec![0x00]
|
||||
};
|
||||
assert_matches!(
|
||||
user_repo.insert(&new_user).await,
|
||||
Ok(())
|
||||
);
|
||||
assert_matches!(
|
||||
user_repo.get_by_id("ffffffff-0000-4000-0000-0000000000c9".into()).await,
|
||||
Ok(User { .. })
|
||||
);
|
||||
assert_matches!(
|
||||
user_repo.get_by_id("ffffffff-0000-4040-0000-000000000000".into()).await,
|
||||
Err(sqlx::Error::RowNotFound)
|
||||
);
|
||||
|
||||
// Insert Many
|
||||
let bunch_of_users: Vec<User> = (0..10).map(|pid| User {
|
||||
id: format!("ffffffff-0000-4000-0010-{:0>8}", pid),
|
||||
handle: format!("user num {}", pid),
|
||||
full_name: None,
|
||||
prefered_color: None,
|
||||
last_login_at: None,
|
||||
status: UserStatus::Invited,
|
||||
groups: Json(vec![]),
|
||||
avatar_bytes: vec![]
|
||||
}).collect();
|
||||
assert_matches!(
|
||||
user_repo.insert_many(&bunch_of_users).await,
|
||||
Ok(())
|
||||
);
|
||||
|
||||
// Read many all
|
||||
let read_all_res = user_repo.get_all().await;
|
||||
assert_matches!(
|
||||
read_all_res,
|
||||
Ok(..)
|
||||
);
|
||||
let all_users = read_all_res.unwrap();
|
||||
assert_eq!(all_users.len(), 11);
|
||||
|
||||
// Update
|
||||
let mut updated_user = new_user.clone();
|
||||
updated_user.status = UserStatus::Disabled;
|
||||
assert_matches!(
|
||||
user_repo.update_by_id(&new_user.id, &updated_user).await,
|
||||
Ok(())
|
||||
);
|
||||
let user_from_db = user_repo.get_by_id("ffffffff-0000-4000-0000-0000000000c9".into()).await.unwrap();
|
||||
assert_eq!(user_from_db.status, UserStatus::Disabled);
|
||||
|
||||
// Delete
|
||||
assert_matches!(
|
||||
user_repo.delete_by_id(&new_user.id).await,
|
||||
Ok(())
|
||||
);
|
||||
assert_matches!(
|
||||
user_repo.get_by_id("ffffffff-0000-4000-0000-0000000000c9".into()).await,
|
||||
Err(sqlx::Error::RowNotFound)
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue