X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Faggregates%2Fpost_aggregates.rs;h=93e6f3f79adc4c41263c320528ea21f1cbfece99;hb=9c2490d4f24671cc2770ba68feaf6d7562b1db6a;hp=176f694a7038fd61c805ce21a6c34d985371cd65;hpb=651f2747ee704b149ca59bb5dce6ec2ff05cc5b7;p=lemmy.git diff --git a/crates/db_schema/src/aggregates/post_aggregates.rs b/crates/db_schema/src/aggregates/post_aggregates.rs index 176f694a..93e6f3f7 100644 --- a/crates/db_schema/src/aggregates/post_aggregates.rs +++ b/crates/db_schema/src/aggregates/post_aggregates.rs @@ -38,7 +38,7 @@ mod tests { use crate::{ aggregates::post_aggregates::PostAggregates, source::{ - comment::{Comment, CommentInsertForm}, + comment::{Comment, CommentInsertForm, CommentUpdateForm}, community::{Community, CommunityInsertForm}, instance::Instance, person::{Person, PersonInsertForm}, @@ -181,4 +181,100 @@ mod tests { Instance::delete(pool, inserted_instance.id).await.unwrap(); } + + #[tokio::test] + #[serial] + async fn test_soft_delete() { + let pool = &build_db_pool_for_tests().await; + + let inserted_instance = Instance::read_or_create(pool, "my_domain.tld".to_string()) + .await + .unwrap(); + + let new_person = PersonInsertForm::builder() + .name("thommy_community_agg".into()) + .public_key("pubkey".to_string()) + .instance_id(inserted_instance.id) + .build(); + + let inserted_person = Person::create(pool, &new_person).await.unwrap(); + + let new_community = CommunityInsertForm::builder() + .name("TIL_community_agg".into()) + .title("nada".to_owned()) + .public_key("pubkey".to_string()) + .instance_id(inserted_instance.id) + .build(); + + let inserted_community = Community::create(pool, &new_community).await.unwrap(); + + let new_post = PostInsertForm::builder() + .name("A test post".into()) + .creator_id(inserted_person.id) + .community_id(inserted_community.id) + .build(); + + let inserted_post = Post::create(pool, &new_post).await.unwrap(); + + let comment_form = CommentInsertForm::builder() + .content("A test comment".into()) + .creator_id(inserted_person.id) + .post_id(inserted_post.id) + .build(); + + let inserted_comment = Comment::create(pool, &comment_form, None).await.unwrap(); + + let post_aggregates_before = PostAggregates::read(pool, inserted_post.id).await.unwrap(); + assert_eq!(1, post_aggregates_before.comments); + + Comment::update( + pool, + inserted_comment.id, + &CommentUpdateForm::builder().removed(Some(true)).build(), + ) + .await + .unwrap(); + + let post_aggregates_after_remove = PostAggregates::read(pool, inserted_post.id).await.unwrap(); + assert_eq!(0, post_aggregates_after_remove.comments); + + Comment::update( + pool, + inserted_comment.id, + &CommentUpdateForm::builder().removed(Some(false)).build(), + ) + .await + .unwrap(); + + Comment::update( + pool, + inserted_comment.id, + &CommentUpdateForm::builder().deleted(Some(true)).build(), + ) + .await + .unwrap(); + + let post_aggregates_after_delete = PostAggregates::read(pool, inserted_post.id).await.unwrap(); + assert_eq!(0, post_aggregates_after_delete.comments); + + Comment::update( + pool, + inserted_comment.id, + &CommentUpdateForm::builder().removed(Some(true)).build(), + ) + .await + .unwrap(); + + let post_aggregates_after_delete_remove = + PostAggregates::read(pool, inserted_post.id).await.unwrap(); + assert_eq!(0, post_aggregates_after_delete_remove.comments); + + Comment::delete(pool, inserted_comment.id).await.unwrap(); + Post::delete(pool, inserted_post.id).await.unwrap(); + Person::delete(pool, inserted_person.id).await.unwrap(); + Community::delete(pool, inserted_community.id) + .await + .unwrap(); + Instance::delete(pool, inserted_instance.id).await.unwrap(); + } }