From 9884927b8a18200173fdbb2a0ad7937981329b76 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sun, 6 Dec 2020 22:17:52 -0500 Subject: [PATCH] Adding site aggregates unit test. --- lemmy_db/src/aggregates/site_aggregates.rs | 143 +++++++++++++++++- .../up.sql | 3 + .../up.sql | 3 + .../up.sql | 3 + 4 files changed, 151 insertions(+), 1 deletion(-) diff --git a/lemmy_db/src/aggregates/site_aggregates.rs b/lemmy_db/src/aggregates/site_aggregates.rs index 93a5ba36a..fdd4d1c46 100644 --- a/lemmy_db/src/aggregates/site_aggregates.rs +++ b/lemmy_db/src/aggregates/site_aggregates.rs @@ -18,4 +18,145 @@ impl SiteAggregates { } } -// TODO add unit tests, to make sure triggers are working +#[cfg(test)] +mod tests { + use crate::{ + aggregates::site_aggregates::SiteAggregates, + comment::{Comment, CommentForm}, + community::{Community, CommunityForm}, + post::{Post, PostForm}, + tests::establish_unpooled_connection, + user::{UserForm, User_}, + Crud, + ListingType, + SortType, + }; + + #[test] + fn test_crud() { + let conn = establish_unpooled_connection(); + + let new_user = UserForm { + name: "thommy_site_agg".into(), + preferred_username: None, + password_encrypted: "nope".into(), + email: None, + matrix_user_id: None, + avatar: None, + banner: None, + admin: false, + banned: Some(false), + published: None, + updated: None, + show_nsfw: false, + theme: "browser".into(), + default_sort_type: SortType::Hot as i16, + default_listing_type: ListingType::Subscribed as i16, + lang: "browser".into(), + show_avatars: true, + send_notifications_to_email: false, + actor_id: None, + bio: None, + local: true, + private_key: None, + public_key: None, + last_refreshed_at: None, + }; + + let inserted_user = User_::create(&conn, &new_user).unwrap(); + + let new_community = CommunityForm { + name: "TIL_site_agg".into(), + creator_id: inserted_user.id, + title: "nada".to_owned(), + description: None, + category_id: 1, + nsfw: false, + removed: None, + deleted: None, + updated: None, + actor_id: None, + local: true, + private_key: None, + public_key: None, + last_refreshed_at: None, + published: None, + icon: None, + banner: None, + }; + + let inserted_community = Community::create(&conn, &new_community).unwrap(); + + let new_post = PostForm { + name: "A test post".into(), + url: None, + body: None, + creator_id: inserted_user.id, + community_id: inserted_community.id, + removed: None, + deleted: None, + locked: None, + stickied: None, + nsfw: false, + updated: None, + embed_title: None, + embed_description: None, + embed_html: None, + thumbnail_url: None, + ap_id: None, + local: true, + published: None, + }; + + let inserted_post = Post::create(&conn, &new_post).unwrap(); + + let comment_form = CommentForm { + content: "A test comment".into(), + creator_id: inserted_user.id, + post_id: inserted_post.id, + removed: None, + deleted: None, + read: None, + parent_id: None, + published: None, + updated: None, + ap_id: None, + local: true, + }; + + let inserted_comment = Comment::create(&conn, &comment_form).unwrap(); + + let child_comment_form = CommentForm { + content: "A test comment".into(), + creator_id: inserted_user.id, + post_id: inserted_post.id, + removed: None, + deleted: None, + read: None, + parent_id: Some(inserted_comment.id), + published: None, + updated: None, + ap_id: None, + local: true, + }; + + let _inserted_child_comment = Comment::create(&conn, &child_comment_form).unwrap(); + + let site_aggregates_before_delete = SiteAggregates::read(&conn).unwrap(); + + assert_eq!(1, site_aggregates_before_delete.users); + assert_eq!(1, site_aggregates_before_delete.communities); + assert_eq!(1, site_aggregates_before_delete.posts); + assert_eq!(2, site_aggregates_before_delete.comments); + + // This shouuld delete all the associated rows, and fire triggers + let user_num_deleted = User_::delete(&conn, inserted_user.id).unwrap(); + assert_eq!(1, user_num_deleted); + + let site_aggregates_after_delete = SiteAggregates::read(&conn).unwrap(); + assert_eq!(0, site_aggregates_after_delete.users); + assert_eq!(0, site_aggregates_after_delete.communities); + assert_eq!(0, site_aggregates_after_delete.posts); + assert_eq!(0, site_aggregates_after_delete.comments); + } +} diff --git a/migrations/2020-12-02-152437_create_site_aggregates/up.sql b/migrations/2020-12-02-152437_create_site_aggregates/up.sql index f66f10039..0a5d208a6 100644 --- a/migrations/2020-12-02-152437_create_site_aggregates/up.sql +++ b/migrations/2020-12-02-152437_create_site_aggregates/up.sql @@ -50,6 +50,7 @@ end $$; create trigger site_aggregates_post after insert or delete on post +for each row execute procedure site_aggregates_post(); -- comment @@ -69,6 +70,7 @@ end $$; create trigger site_aggregates_comment after insert or delete on comment +for each row execute procedure site_aggregates_comment(); -- community @@ -88,5 +90,6 @@ end $$; create trigger site_aggregates_community after insert or delete on community +for each row execute procedure site_aggregates_community(); diff --git a/migrations/2020-12-03-035643_create_user_aggregates/up.sql b/migrations/2020-12-03-035643_create_user_aggregates/up.sql index bc7e6394d..e0c39be60 100644 --- a/migrations/2020-12-03-035643_create_user_aggregates/up.sql +++ b/migrations/2020-12-03-035643_create_user_aggregates/up.sql @@ -52,6 +52,7 @@ end $$; create trigger user_aggregates_post_count after insert or delete on post +for each row execute procedure user_aggregates_post_count(); -- post score @@ -77,6 +78,7 @@ end $$; create trigger user_aggregates_post_score after insert or delete on post_like +for each row execute procedure user_aggregates_post_score(); -- comment count @@ -96,6 +98,7 @@ end $$; create trigger user_aggregates_comment_count after insert or delete on comment +for each row execute procedure user_aggregates_comment_count(); -- comment score diff --git a/migrations/2020-12-04-183345_create_community_aggregates/up.sql b/migrations/2020-12-04-183345_create_community_aggregates/up.sql index ec9518191..34274b0d9 100644 --- a/migrations/2020-12-04-183345_create_community_aggregates/up.sql +++ b/migrations/2020-12-04-183345_create_community_aggregates/up.sql @@ -50,6 +50,7 @@ end $$; create trigger community_aggregates_post_count after insert or delete on post +for each row execute procedure community_aggregates_post_count(); -- comment count @@ -69,6 +70,7 @@ end $$; create trigger community_aggregates_comment_count after insert or delete on comment +for each row execute procedure community_aggregates_comment_count(); -- subscriber count @@ -88,5 +90,6 @@ end $$; create trigger community_aggregates_subscriber_count after insert or delete on community_follower +for each row execute procedure community_aggregates_subscriber_count();