AppFlowy-Cloud/tests/workspace/member_crud.rs

173 lines
5.2 KiB
Rust

use crate::util::test_client::TestClient;
use database_entity::AFRole;
use shared_entity::error_code::ErrorCode;
#[tokio::test]
async fn add_workspace_members_not_enough_permission() {
let c1 = TestClient::new_user_without_ws_conn().await;
let c2 = TestClient::new_user_without_ws_conn().await;
let c3 = TestClient::new_user_without_ws_conn().await;
let workspace_id = c1.workspace_id().await;
// add client 2 to client 1's workspace
c1.add_workspace_member(&workspace_id, &c2, AFRole::Member)
.await;
// client 2 add client 3 to client 1's workspace but permission denied
let error = c2
.try_add_workspace_member(&workspace_id, &c3, AFRole::Member)
.await
.unwrap_err();
assert_eq!(error.code, ErrorCode::NotEnoughPermissions);
}
#[tokio::test]
async fn add_duplicate_workspace_members() {
let c1 = TestClient::new_user_without_ws_conn().await;
let c2 = TestClient::new_user_without_ws_conn().await;
let workspace_id = c1.workspace_id().await;
c1.add_workspace_member(&workspace_id, &c2, AFRole::Member)
.await;
c1.add_workspace_member(&workspace_id, &c2, AFRole::Member)
.await;
}
#[tokio::test]
async fn update_workspace_member_role_not_enough_permission() {
let c1 = TestClient::new_user_without_ws_conn().await;
let c2 = TestClient::new_user_without_ws_conn().await;
let workspace_id = c1.workspace_id().await;
// add client 2 to client 1's workspace
c1.add_workspace_member(&workspace_id, &c2, AFRole::Member)
.await;
// client 2 want to update client 2's role to owner
let error = c2
.try_update_workspace_member(&workspace_id, &c2, AFRole::Owner)
.await
.unwrap_err();
assert_eq!(error.code, ErrorCode::NotEnoughPermissions);
}
#[tokio::test]
async fn update_workspace_member_role_from_guest_to_member() {
let c1 = TestClient::new_user_without_ws_conn().await;
let c2 = TestClient::new_user_without_ws_conn().await;
let workspace_id = c1.workspace_id().await;
// add client 2 to client 1's workspace
c1.add_workspace_member(&workspace_id, &c2, AFRole::Guest)
.await;
let members = c1
.api_client
.get_workspace_members2(&workspace_id)
.await
.unwrap();
assert_eq!(members[0].email, c1.email().await);
assert_eq!(members[0].role, AFRole::Owner);
assert_eq!(members[1].email, c2.email().await);
assert_eq!(members[1].role, AFRole::Guest);
c1.try_update_workspace_member(&workspace_id, &c2, AFRole::Member)
.await
.unwrap();
let members = c1
.api_client
.get_workspace_members2(&workspace_id)
.await
.unwrap();
assert_eq!(members[0].email, c1.email().await);
assert_eq!(members[0].role, AFRole::Owner);
assert_eq!(members[1].email, c2.email().await);
assert_eq!(members[1].role, AFRole::Member);
}
#[tokio::test]
async fn workspace_second_owner_add_member() {
let c1 = TestClient::new_user_without_ws_conn().await;
let c2 = TestClient::new_user_without_ws_conn().await;
let c3 = TestClient::new_user_without_ws_conn().await;
let workspace_id = c1.workspace_id().await;
// add client 2 to client 1's workspace
c1.add_workspace_member(&workspace_id, &c2, AFRole::Owner)
.await;
// add client 3 to client 1's workspace
c2.add_workspace_member(&workspace_id, &c3, AFRole::Member)
.await;
let members = c1
.api_client
.get_workspace_members2(&workspace_id)
.await
.unwrap();
assert_eq!(members.len(), 3);
assert_eq!(members[0].email, c1.email().await);
assert_eq!(members[0].role, AFRole::Owner);
assert_eq!(members[1].email, c2.email().await);
assert_eq!(members[1].role, AFRole::Owner);
assert_eq!(members[2].email, c3.email().await);
assert_eq!(members[2].role, AFRole::Member);
}
#[tokio::test]
async fn add_workspace_member_and_owner_then_delete_all() {
let c1 = TestClient::new_user_without_ws_conn().await;
let c2 = TestClient::new_user_without_ws_conn().await;
let c3 = TestClient::new_user_without_ws_conn().await;
let workspace_id = c1.workspace_id().await;
// add client 2 to client 1's workspace
c1.add_workspace_member(&workspace_id, &c2, AFRole::Member)
.await;
c1.add_workspace_member(&workspace_id, &c3, AFRole::Owner)
.await;
let members = c1
.api_client
.get_workspace_members2(&workspace_id)
.await
.unwrap();
assert_eq!(members[0].email, c1.email().await);
assert_eq!(members[1].email, c2.email().await);
assert_eq!(members[2].email, c3.email().await);
// delete the members
c1.try_remove_workspace_member(&workspace_id, &c2)
.await
.unwrap();
c1.try_remove_workspace_member(&workspace_id, &c3)
.await
.unwrap();
let members = c1
.api_client
.get_workspace_members2(&workspace_id)
.await
.unwrap();
assert_eq!(members.len(), 1);
assert_eq!(members[0].email, c1.email().await);
}
#[tokio::test]
async fn workspace_second_owner_can_not_delete_origin_owner() {
let c1 = TestClient::new_user_without_ws_conn().await;
let c2 = TestClient::new_user_without_ws_conn().await;
let workspace_id = c1.workspace_id().await;
c1.add_workspace_member(&workspace_id, &c2, AFRole::Owner)
.await;
let error = c2
.try_remove_workspace_member(&workspace_id, &c1)
.await
.unwrap_err();
assert_eq!(error.code, ErrorCode::NotEnoughPermissions);
}