From 2a6d23203c8c0c1ef3f266366346bc1679be8a90 Mon Sep 17 00:00:00 2001 From: Marcelin Dupraz Date: Sun, 30 May 2021 21:11:13 +0200 Subject: [PATCH] Implementation of the delete_user_request. Tests are barebones and are dependant of the list_users_request (delete_user_request_test will fail if list_users_request fails) --- model/src/lib.rs | 5 +++ src/domain/handler.rs | 2 + src/domain/sql_backend_handler.rs | 63 +++++++++++++++++++++++++++++++ src/infra/tcp_backend_handler.rs | 1 + 4 files changed, 71 insertions(+) diff --git a/model/src/lib.rs b/model/src/lib.rs index 9ca9d52..c158e8d 100644 --- a/model/src/lib.rs +++ b/model/src/lib.rs @@ -57,6 +57,11 @@ pub struct CreateUserRequest { pub password: String, } +#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone, Default)] +pub struct DeleteUserRequest { + pub user_id: String, +} + #[derive(PartialEq, Eq, Debug, Serialize, Deserialize)] pub struct Group { pub display_name: String, diff --git a/src/domain/handler.rs b/src/domain/handler.rs index b348b56..0d741fd 100644 --- a/src/domain/handler.rs +++ b/src/domain/handler.rs @@ -10,6 +10,7 @@ pub trait BackendHandler: Clone + Send { async fn list_users(&self, request: ListUsersRequest) -> Result>; async fn list_groups(&self) -> Result>; async fn create_user(&self, request: CreateUserRequest) -> Result<()>; + async fn delete_user(&self, request: DeleteUserRequest) -> Result<()>; async fn create_group(&self, request: CreateGroupRequest) -> Result; async fn add_user_to_group(&self, request: AddUserToGroupRequest) -> Result<()>; async fn get_user_groups(&self, user: String) -> Result>; @@ -27,6 +28,7 @@ mockall::mock! { async fn list_users(&self, request: ListUsersRequest) -> Result>; async fn list_groups(&self) -> Result>; async fn create_user(&self, request: CreateUserRequest) -> Result<()>; + async fn delete_user(&self, request: DeleteUserRequest) -> Result<()>; async fn create_group(&self, request: CreateGroupRequest) -> Result; async fn get_user_groups(&self, user: String) -> Result>; async fn add_user_to_group(&self, request: AddUserToGroupRequest) -> Result<()>; diff --git a/src/domain/sql_backend_handler.rs b/src/domain/sql_backend_handler.rs index d6ed2bf..30022fd 100644 --- a/src/domain/sql_backend_handler.rs +++ b/src/domain/sql_backend_handler.rs @@ -243,6 +243,15 @@ impl BackendHandler for SqlBackendHandler { Ok(()) } + async fn delete_user(&self, request: DeleteUserRequest) -> Result<()> { + let delete_query = Query::delete() + .from_table(Users::Table) + .and_where(Expr::col(Users::UserId).eq(request.user_id)) + .to_string(DbQueryBuilder {}); + sqlx::query(&delete_query).execute(&self.sql_pool).await?; + Ok(()) + } + async fn create_group(&self, request: CreateGroupRequest) -> Result { let query = Query::insert() .into_table(Groups::Table) @@ -506,4 +515,58 @@ mod tests { HashSet::new() ); } + + #[tokio::test] + async fn test_delete_user() { + let sql_pool = get_initialized_db().await; + let config = Configuration::default(); + let handler = SqlBackendHandler::new(config, sql_pool.clone()); + + insert_user(&handler, "val", "s3np4i").await; + insert_user(&handler, "Hector", "Be$t").await; + insert_user(&handler, "Jennz", "boupBoup").await; + + // Remove a user + let _request_result = handler + .delete_user(DeleteUserRequest { + user_id: "Jennz".to_owned(), + }) + .await + .unwrap(); + + let users = handler + .list_users(ListUsersRequest { filters: None }) + .await + .unwrap() + .into_iter() + .map(|u| u.user_id) + .collect::>(); + + assert_eq!(users, vec!["Hector", "val"]); + + // Insert new user and remove two + insert_user(&handler, "NewBoi", "Joni").await; + let _request_result = handler + .delete_user(DeleteUserRequest { + user_id: "Hector".to_owned(), + }) + .await + .unwrap(); + let _request_result = handler + .delete_user(DeleteUserRequest { + user_id: "NewBoi".to_owned(), + }) + .await + .unwrap(); + + let users = handler + .list_users(ListUsersRequest { filters: None }) + .await + .unwrap() + .into_iter() + .map(|u| u.user_id) + .collect::>(); + + assert_eq!(users, vec!["val"]); + } } diff --git a/src/infra/tcp_backend_handler.rs b/src/infra/tcp_backend_handler.rs index 1c2009f..6837ff8 100644 --- a/src/infra/tcp_backend_handler.rs +++ b/src/infra/tcp_backend_handler.rs @@ -28,6 +28,7 @@ mockall::mock! { async fn list_groups(&self) -> DomainResult>; async fn get_user_groups(&self, user: String) -> DomainResult>; async fn create_user(&self, request: CreateUserRequest) -> DomainResult<()>; + async fn delete_user(&self, request: DeleteUserRequest) -> DomainResult<()>; async fn create_group(&self, request: CreateGroupRequest) -> DomainResult; async fn add_user_to_group(&self, request: AddUserToGroupRequest) -> DomainResult<()>; }