86 lines
2.6 KiB
Rust
86 lines
2.6 KiB
Rust
#![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(())
|
|
}
|