fix: remove only parent page when move to trash (#1021)

This commit is contained in:
Khor Shu Heng 2024-11-27 13:00:58 +08:00 committed by GitHub
parent 4fb6df5c14
commit a4b598db5b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 81 additions and 3 deletions

View File

@ -27,7 +27,7 @@ impl Client {
pub async fn move_workspace_page_view_to_trash(
&self,
workspace_id: Uuid,
view_id: String,
view_id: &str,
) -> Result<(), AppResponseError> {
let url = format!(
"{}/api/workspace/{}/page-view/{}/move-to-trash",

View File

@ -553,9 +553,13 @@ async fn move_view_to_trash(view_id: &str, folder: &mut Folder) -> Result<Folder
let mut txn = folder.collab.transact_mut();
current_view_and_descendants.iter().for_each(|view_id| {
folder.body.views.update_view(&mut txn, view_id, |update| {
update.set_favorite(false).set_trash(true).done()
update.set_favorite(false).done()
});
});
folder
.body
.views
.update_view(&mut txn, view_id, |update| update.set_trash(true).done());
txn.encode_update_v1()
};

View File

@ -236,7 +236,7 @@ async fn move_page_to_trash() {
for view_id in view_ids_to_be_deleted.iter() {
app_client
.api_client
.move_workspace_page_view_to_trash(Uuid::parse_str(&workspace_id).unwrap(), view_id.clone())
.move_workspace_page_view_to_trash(Uuid::parse_str(&workspace_id).unwrap(), view_id)
.await
.unwrap();
}
@ -305,6 +305,80 @@ async fn move_page_to_trash() {
assert!(!view_found);
}
#[tokio::test]
async fn move_page_with_child_to_trash() {
let registered_user = generate_unique_registered_user().await;
let mut app_client = TestClient::user_with_new_device(registered_user.clone()).await;
let web_client = TestClient::user_with_new_device(registered_user.clone()).await;
let workspace_id = app_client.workspace_id().await;
let folder_view = web_client
.api_client
.get_workspace_folder(&workspace_id, Some(2), None)
.await
.unwrap();
let general_space = &folder_view
.children
.into_iter()
.find(|v| v.name == "General")
.unwrap();
app_client.open_workspace_collab(&workspace_id).await;
app_client
.wait_object_sync_complete(&workspace_id)
.await
.unwrap();
app_client
.api_client
.move_workspace_page_view_to_trash(
Uuid::parse_str(&workspace_id).unwrap(),
&general_space.view_id,
)
.await
.unwrap();
let folder = get_latest_folder(&app_client, &workspace_id).await;
let views_in_trash_for_app = folder
.get_my_trash_sections()
.iter()
.map(|v| v.id.clone())
.collect::<HashSet<String>>();
assert!(views_in_trash_for_app.contains(&general_space.view_id));
for view in general_space.children.iter() {
assert!(!views_in_trash_for_app.contains(&view.view_id));
}
let views_in_trash_for_web = web_client
.api_client
.get_workspace_trash(&workspace_id)
.await
.unwrap()
.views
.iter()
.map(|v| v.view.view_id.clone())
.collect::<HashSet<String>>();
assert!(views_in_trash_for_web.contains(&general_space.view_id));
web_client
.api_client
.restore_workspace_page_view_from_trash(
Uuid::parse_str(&workspace_id).unwrap(),
&general_space.view_id,
)
.await
.unwrap();
let folder = get_latest_folder(&app_client, &workspace_id).await;
assert!(!folder
.get_my_trash_sections()
.iter()
.any(|v| v.id == general_space.view_id));
let view_found = web_client
.api_client
.get_workspace_trash(&workspace_id)
.await
.unwrap()
.views
.iter()
.any(|v| v.view.view_id == general_space.view_id);
assert!(!view_found);
}
#[tokio::test]
async fn update_page() {
let registered_user = generate_unique_registered_user().await;