AppFlowy-Cloud/tests/user/delete.rs

107 lines
3.0 KiB
Rust

use client_api::entity::AFRole;
use client_api_test::*;
use gotrue::params::{AdminDeleteUserParams, AdminUserParams};
#[tokio::test]
async fn user_delete_self() {
let (client, user) = generate_unique_registered_user_client().await;
let admin_client = admin_user_client().await;
{
// user found before deletion
let search_result = admin_client
.admin_list_users(Some(&user.email))
.await
.unwrap();
let _target_user = search_result
.into_iter()
.find(|u| u.email == user.email)
.unwrap();
}
client.delete_user().await.unwrap();
{
// user cannot be found after deletion
let search_result = admin_client
.admin_list_users(Some(&user.email))
.await
.unwrap();
let target_user = search_result.into_iter().find(|u| u.email == user.email);
assert!(target_user.is_none(), "User should be deleted: {:?}", user);
}
}
/// Scenario:
/// - User1 owns WorkspaceA
/// - User1 invites User2 to WorkspaceA
/// - User2 deletes itself
/// - WorkspaceA should still exist
#[tokio::test]
async fn user_delete_self_shared_workspace() {
let user_1 = TestClient::new_user_without_ws_conn().await;
let workspace_a = user_1.workspace_id().await;
let user_2 = TestClient::new_user_without_ws_conn().await;
user_1
.invite_and_accepted_workspace_member(&workspace_a, &user_2, AFRole::Member)
.await
.unwrap();
user_2.api_client.delete_user().await.unwrap();
let user_1_workspaces = user_1.api_client.get_workspaces().await.unwrap();
let _workspace_a = user_1_workspaces
.into_iter()
.find(|w| w.workspace_id.to_string() == workspace_a)
.unwrap();
}
#[tokio::test]
async fn admin_delete_create_same_user_hard() {
let (client, user) = generate_unique_registered_user_client().await;
let workspaces = client.get_workspaces().await.unwrap();
assert_eq!(workspaces.len(), 1);
let workspace_id = workspaces[0].workspace_id;
let user_uuid = client.get_profile().await.unwrap().uuid;
let admin_token = {
let admin_client = admin_user_client().await;
admin_client.access_token().unwrap()
};
// Delete user as admin
let gotrue_client: gotrue::api::Client = localhost_gotrue_client();
gotrue_client
.admin_delete_user(
&admin_token,
&user_uuid.to_string(),
&AdminDeleteUserParams {
should_soft_delete: false,
},
)
.await
.unwrap();
// Recreate same user
gotrue_client
.admin_add_user(
&admin_token,
&AdminUserParams {
email: user.email.clone(),
password: Some(user.password.clone()),
email_confirm: true,
..Default::default()
},
)
.await
.unwrap();
// Login with recreated user
let client = localhost_client();
client
.sign_in_password(&user.email, &user.password)
.await
.unwrap();
let recreated_user_uuid = client.get_profile().await.unwrap().uuid;
let recreated_workspace_uuid = client.get_workspaces().await.unwrap()[0].workspace_id;
assert_ne!(user_uuid, recreated_user_uuid);
assert_ne!(workspace_id, recreated_workspace_uuid);
}