mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-11-04 03:54:44 +00:00 
			
		
		
		
	[server]: add delete trash test
This commit is contained in:
		
							parent
							
								
									495dc24ec4
								
							
						
					
					
						commit
						560ee376f9
					
				@ -43,7 +43,11 @@ pub async fn create_handler(
 | 
			
		||||
    Ok(FlowyResponse::success().into())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn delete_handler(payload: Payload, pool: Data<PgPool>) -> Result<HttpResponse, ServerError> {
 | 
			
		||||
pub async fn delete_handler(
 | 
			
		||||
    payload: Payload,
 | 
			
		||||
    pool: Data<PgPool>,
 | 
			
		||||
    logged_user: LoggedUser,
 | 
			
		||||
) -> Result<HttpResponse, ServerError> {
 | 
			
		||||
    let params: TrashIdentifiers = parse_from_payload(payload).await?;
 | 
			
		||||
    let mut transaction = pool
 | 
			
		||||
        .begin()
 | 
			
		||||
@ -51,7 +55,7 @@ pub async fn delete_handler(payload: Payload, pool: Data<PgPool>) -> Result<Http
 | 
			
		||||
        .context("Failed to acquire a Postgres connection to delete trash")?;
 | 
			
		||||
 | 
			
		||||
    let trash_ids = check_trash_ids(params.ids.into_vec())?;
 | 
			
		||||
    let _ = delete_trash(&mut transaction, trash_ids).await?;
 | 
			
		||||
    let _ = delete_trash(&mut transaction, trash_ids, &logged_user).await?;
 | 
			
		||||
    transaction
 | 
			
		||||
        .commit()
 | 
			
		||||
        .await
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,9 @@
 | 
			
		||||
use crate::{
 | 
			
		||||
    entities::workspace::{TrashTable, TRASH_TABLE},
 | 
			
		||||
    service::{user::LoggedUser, view::read_view_table},
 | 
			
		||||
    service::{
 | 
			
		||||
        user::LoggedUser,
 | 
			
		||||
        view::{delete_view, read_view_table},
 | 
			
		||||
    },
 | 
			
		||||
    sqlx_ext::{map_sqlx_error, DBTransaction, SqlBuilder},
 | 
			
		||||
};
 | 
			
		||||
use ::protobuf::ProtobufEnum;
 | 
			
		||||
@ -29,8 +32,34 @@ pub(crate) async fn create_trash(
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub(crate) async fn delete_trash(transaction: &mut DBTransaction<'_>, trash_ids: Vec<Uuid>) -> Result<(), ServerError> {
 | 
			
		||||
pub(crate) async fn delete_trash(
 | 
			
		||||
    transaction: &mut DBTransaction<'_>,
 | 
			
		||||
    trash_ids: Vec<Uuid>,
 | 
			
		||||
    _user: &LoggedUser,
 | 
			
		||||
) -> Result<(), ServerError> {
 | 
			
		||||
    for trash_id in trash_ids {
 | 
			
		||||
        // Read the trash_table and delete the original table according to the TrashType
 | 
			
		||||
        let (sql, args) = SqlBuilder::select(TRASH_TABLE)
 | 
			
		||||
            .add_field("*")
 | 
			
		||||
            .and_where_eq("id", trash_id)
 | 
			
		||||
            .build()?;
 | 
			
		||||
 | 
			
		||||
        let trash_table = sqlx::query_as_with::<Postgres, TrashTable, PgArguments>(&sql, args)
 | 
			
		||||
            .fetch_one(transaction as &mut DBTransaction<'_>)
 | 
			
		||||
            .await
 | 
			
		||||
            .map_err(map_sqlx_error)?;
 | 
			
		||||
 | 
			
		||||
        match TrashType::from_i32(trash_table.ty) {
 | 
			
		||||
            None => log::error!("Parser trash type with value: {} failed", trash_table.ty),
 | 
			
		||||
            Some(ty) => match ty {
 | 
			
		||||
                TrashType::Unknown => {},
 | 
			
		||||
                TrashType::View => {
 | 
			
		||||
                    let _ = delete_view(transaction as &mut DBTransaction<'_>, vec![trash_table.id]).await;
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Delete the trash table
 | 
			
		||||
        let (sql, args) = SqlBuilder::delete(TRASH_TABLE).and_where_eq("id", &trash_id).build()?;
 | 
			
		||||
        let _ = sqlx::query_with(&sql, args)
 | 
			
		||||
            .execute(transaction as &mut DBTransaction<'_>)
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
use crate::helper::*;
 | 
			
		||||
use flowy_workspace::entities::{
 | 
			
		||||
    app::{AppIdentifier, DeleteAppParams, UpdateAppParams},
 | 
			
		||||
    trash::{CreateTrashParams, TrashType},
 | 
			
		||||
    trash::{CreateTrashParams, TrashIdentifiers, TrashType},
 | 
			
		||||
    view::{UpdateViewParams, ViewIdentifier},
 | 
			
		||||
    workspace::{CreateWorkspaceParams, DeleteWorkspaceParams, QueryWorkspaceParams, UpdateWorkspaceParams},
 | 
			
		||||
};
 | 
			
		||||
@ -167,9 +167,37 @@ async fn view_delete() {
 | 
			
		||||
    };
 | 
			
		||||
    test.server.create_trash(params).await;
 | 
			
		||||
 | 
			
		||||
    let trash_ids = test
 | 
			
		||||
        .server
 | 
			
		||||
        .read_trash()
 | 
			
		||||
        .await
 | 
			
		||||
        .items
 | 
			
		||||
        .into_iter()
 | 
			
		||||
        .map(|item| item.id)
 | 
			
		||||
        .collect::<Vec<String>>();
 | 
			
		||||
    // read
 | 
			
		||||
    let read_params = ViewIdentifier::new(&test.view.id);
 | 
			
		||||
 | 
			
		||||
    // the view can't read from the server. it should be in the trash
 | 
			
		||||
    assert_eq!(test.server.read_view(read_params).await.is_none(), true);
 | 
			
		||||
    assert_eq!(trash_ids.contains(&test.view.id), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[actix_rt::test]
 | 
			
		||||
async fn view_delete_and_then_delete_the_trash_record() {
 | 
			
		||||
    let test = ViewTest::new().await;
 | 
			
		||||
    let params = CreateTrashParams {
 | 
			
		||||
        id: test.view.id.clone(),
 | 
			
		||||
        ty: TrashType::View,
 | 
			
		||||
    };
 | 
			
		||||
    test.server.create_trash(params).await;
 | 
			
		||||
    test.server
 | 
			
		||||
        .delete_trash(TrashIdentifiers {
 | 
			
		||||
            ids: vec![test.view.id.clone()],
 | 
			
		||||
        })
 | 
			
		||||
        .await;
 | 
			
		||||
 | 
			
		||||
    assert_eq!(test.server.read_trash().await.is_empty(), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[actix_rt::test]
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user