Adding unit tests for person and community block.

This commit is contained in:
Dessalines 2021-05-09 21:59:41 -04:00
parent 9e8a4807ec
commit ef9ab36304
3 changed files with 71 additions and 12 deletions

View file

@ -126,8 +126,8 @@ impl CommentView {
.left_join( .left_join(
person_block::table.on( person_block::table.on(
comment::creator_id comment::creator_id
.eq(person_block::person_id) .eq(person_block::recipient_id)
.and(person_block::recipient_id.eq(person_id_join)), .and(person_block::person_id.eq(person_id_join)),
), ),
) )
.left_join( .left_join(
@ -443,9 +443,10 @@ impl<'a> CommentQueryBuilder<'a> {
.order_by(comment_aggregates::score.desc()), .order_by(comment_aggregates::score.desc()),
}; };
// Don't show blocked communities // Don't show blocked communities or persons
if self.my_person_id.is_some() { if self.my_person_id.is_some() {
query = query.filter(community_block::person_id.is_null()); query = query.filter(community_block::person_id.is_null());
query = query.filter(person_block::person_id.is_null());
} }
let (limit, offset) = limit_and_offset(self.page, self.limit); let (limit, offset) = limit_and_offset(self.page, self.limit);

View file

@ -319,8 +319,8 @@ impl<'a> PostQueryBuilder<'a> {
.left_join( .left_join(
person_block::table.on( person_block::table.on(
post::creator_id post::creator_id
.eq(person_block::person_id) .eq(person_block::recipient_id)
.and(person_block::recipient_id.eq(person_id_join)), .and(person_block::person_id.eq(person_id_join)),
), ),
) )
.left_join( .left_join(
@ -407,9 +407,10 @@ impl<'a> PostQueryBuilder<'a> {
query = query.filter(post_saved::id.is_not_null()); query = query.filter(post_saved::id.is_not_null());
}; };
// Don't show blocked communities // Don't show blocked communities or persons
if self.my_person_id.is_some() { if self.my_person_id.is_some() {
query = query.filter(community_block::person_id.is_null()); query = query.filter(community_block::person_id.is_null());
query = query.filter(person_block::person_id.is_null());
} }
query = match self.sort.unwrap_or(SortType::Hot) { query = match self.sort.unwrap_or(SortType::Hot) {
@ -488,12 +489,19 @@ mod tests {
use lemmy_db_queries::{ use lemmy_db_queries::{
aggregates::post_aggregates::PostAggregates, aggregates::post_aggregates::PostAggregates,
establish_unpooled_connection, establish_unpooled_connection,
Blockable,
Crud, Crud,
Likeable, Likeable,
ListingType, ListingType,
SortType, SortType,
}; };
use lemmy_db_schema::source::{community::*, person::*, post::*}; use lemmy_db_schema::source::{
community::*,
community_block::{CommunityBlock, CommunityBlockForm},
person::*,
person_block::{PersonBlock, PersonBlockForm},
post::*,
};
use serial_test::serial; use serial_test::serial;
#[test] #[test]
@ -529,6 +537,32 @@ mod tests {
let inserted_community = Community::create(&conn, &new_community).unwrap(); let inserted_community = Community::create(&conn, &new_community).unwrap();
// Test a person block, make sure the post query doesn't include their post
let blocked_person = PersonForm {
name: person_name.to_owned(),
..PersonForm::default()
};
let inserted_blocked_person = Person::create(&conn, &blocked_person).unwrap();
let post_from_blocked_person = PostForm {
name: "blocked_person_post".to_string(),
creator_id: inserted_blocked_person.id,
community_id: inserted_community.id,
..PostForm::default()
};
Post::create(&conn, &post_from_blocked_person).unwrap();
// block that person
let person_block = PersonBlockForm {
person_id: inserted_person.id,
recipient_id: inserted_blocked_person.id,
};
PersonBlock::block(&conn, &person_block).unwrap();
// A sample post
let new_post = PostForm { let new_post = PostForm {
name: post_name.to_owned(), name: post_name.to_owned(),
creator_id: inserted_person.id, creator_id: inserted_person.id,
@ -662,15 +696,34 @@ mod tests {
creator_blocked: false, creator_blocked: false,
}; };
// Test a community block
let community_block = CommunityBlockForm {
person_id: inserted_person.id,
community_id: inserted_community.id,
};
CommunityBlock::block(&conn, &community_block).unwrap();
let read_post_listings_with_person_after_block = PostQueryBuilder::create(&conn)
.listing_type(ListingType::Community)
.sort(SortType::New)
.show_bot_accounts(false)
.community_id(inserted_community.id)
.my_person_id(inserted_person.id)
.list()
.unwrap();
// TODO More needs to be added here // TODO More needs to be added here
let mut expected_post_listing_with_user = expected_post_listing_no_person.to_owned(); let mut expected_post_listing_with_user = expected_post_listing_no_person.to_owned();
expected_post_listing_with_user.my_vote = Some(1); expected_post_listing_with_user.my_vote = Some(1);
let like_removed = PostLike::remove(&conn, inserted_person.id, inserted_post.id).unwrap(); let like_removed = PostLike::remove(&conn, inserted_person.id, inserted_post.id).unwrap();
let num_deleted = Post::delete(&conn, inserted_post.id).unwrap(); let num_deleted = Post::delete(&conn, inserted_post.id).unwrap();
PersonBlock::unblock(&conn, &person_block).unwrap();
CommunityBlock::unblock(&conn, &community_block).unwrap();
Community::delete(&conn, inserted_community.id).unwrap(); Community::delete(&conn, inserted_community.id).unwrap();
Person::delete(&conn, inserted_person.id).unwrap(); Person::delete(&conn, inserted_person.id).unwrap();
Person::delete(&conn, inserted_bot.id).unwrap(); Person::delete(&conn, inserted_bot.id).unwrap();
Person::delete(&conn, inserted_blocked_person.id).unwrap();
// The with user // The with user
assert_eq!( assert_eq!(
@ -682,7 +735,7 @@ mod tests {
read_post_listing_with_person read_post_listing_with_person
); );
// Should be only one person, IE the bot post should be missing // Should be only one person, IE the bot post, and blocked should be missing
assert_eq!(1, read_post_listings_with_person.len()); assert_eq!(1, read_post_listings_with_person.len());
// Without the user // Without the user
@ -692,8 +745,11 @@ mod tests {
); );
assert_eq!(expected_post_listing_no_person, read_post_listing_no_person); assert_eq!(expected_post_listing_no_person, read_post_listing_no_person);
// Should be 2 posts, with the bot post // Should be 2 posts, with the bot post, and the blocked
assert_eq!(2, read_post_listings_no_person.len()); assert_eq!(3, read_post_listings_no_person.len());
// Should be 0 posts after the community block
assert_eq!(0, read_post_listings_with_person_after_block.len());
assert_eq!(expected_post_like, inserted_post_like); assert_eq!(expected_post_like, inserted_post_like);
assert_eq!(1, like_removed); assert_eq!(1, like_removed);

View file

@ -2,12 +2,14 @@ create table person_block (
id serial primary key, id serial primary key,
person_id int references person on update cascade on delete cascade not null, person_id int references person on update cascade on delete cascade not null,
recipient_id int references person on update cascade on delete cascade not null, recipient_id int references person on update cascade on delete cascade not null,
published timestamp not null default now() published timestamp not null default now(),
unique(person_id, recipient_id)
); );
create table community_block ( create table community_block (
id serial primary key, id serial primary key,
person_id int references person on update cascade on delete cascade not null, person_id int references person on update cascade on delete cascade not null,
community_id int references community on update cascade on delete cascade not null, community_id int references community on update cascade on delete cascade not null,
published timestamp not null default now() published timestamp not null default now(),
unique(person_id, community_id)
); );