From 117473d1048ef401a27e60f9b26f7b9b08415376 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Wed, 20 Mar 2024 13:07:43 +0800 Subject: [PATCH] feat: leave workspace --- libs/client-api/src/http.rs | 12 ++++++++++++ src/api/workspace.rs | 2 +- tests/workspace/member_crud.rs | 8 ++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libs/client-api/src/http.rs b/libs/client-api/src/http.rs index 20c1c6d1..5e03b4a1 100644 --- a/libs/client-api/src/http.rs +++ b/libs/client-api/src/http.rs @@ -585,6 +585,18 @@ impl Client { .into_data() } + #[instrument(level = "debug", skip_all, err)] + pub async fn leave_workspace(&self, workspace_id: &str) -> Result<(), AppResponseError> { + let url = format!("{}/api/workspace/{}/leave", self.base_url, workspace_id); + let resp = self + .http_client_with_auth(Method::POST, &url) + .await? + .send() + .await?; + log_request_id(&resp); + AppResponse::<()>::from_response(resp).await?.into_error() + } + #[instrument(level = "debug", skip_all, err)] pub async fn get_workspace_members>( &self, diff --git a/src/api/workspace.rs b/src/api/workspace.rs index abac137d..17dd51f9 100644 --- a/src/api/workspace.rs +++ b/src/api/workspace.rs @@ -74,7 +74,7 @@ pub fn workspace_scope() -> Scope { .route(web::delete().to(delete_workspace_handler)) ) .service(web::resource("/{workspace_id}/open").route(web::put().to(open_workspace_handler))) - .service(web::resource("/{workspace_id}/leave").route(web::put().to(leave_workspace_handler))) + .service(web::resource("/{workspace_id}/leave").route(web::post().to(leave_workspace_handler))) .service( web::resource("/{workspace_id}/member") .route(web::get().to(get_workspace_members_handler)) diff --git a/tests/workspace/member_crud.rs b/tests/workspace/member_crud.rs index b62b7423..9561fc24 100644 --- a/tests/workspace/member_crud.rs +++ b/tests/workspace/member_crud.rs @@ -1,4 +1,5 @@ use app_error::ErrorCode; +use client_api::entity::CreateCollabParams; use client_api_test_util::{api_client_with_email, TestClient}; use database_entity::dto::{AFAccessLevel, AFRole, QueryCollabMembers}; use shared_entity::dto::workspace_dto::WorkspaceMemberInvitation; @@ -361,4 +362,11 @@ async fn leave_workspace_test() { let c2 = TestClient::new_user().await; c1.add_workspace_member(&workspace_id_c1, &c2, AFRole::Member) .await; + c2.api_client + .leave_workspace(&workspace_id_c1) + .await + .unwrap(); + + let members = c1.get_workspace_members(&workspace_id_c1).await; + assert_eq!(members.len(), 1); }