2020-12-21 09:30:34 -07:00
use diesel ::{ result ::Error , * } ;
2020-12-21 16:27:42 -07:00
use lemmy_db_queries ::{
2020-12-15 08:28:25 -07:00
aggregates ::comment_aggregates ::CommentAggregates ,
functions ::hot_rank ,
fuzzy_search ,
limit_and_offset ,
ListingType ,
MaybeOptional ,
SortType ,
ToSafe ,
2020-12-21 16:27:42 -07:00
ViewToVec ,
2020-12-15 08:28:25 -07:00
} ;
2020-12-18 10:27:25 -07:00
use lemmy_db_schema ::{
2020-12-15 08:28:25 -07:00
schema ::{
comment ,
comment_aggregates ,
comment_alias_1 ,
comment_like ,
comment_saved ,
community ,
community_follower ,
2021-03-10 15:33:55 -07:00
community_person_ban ,
person ,
person_alias_1 ,
2021-03-10 21:43:11 -07:00
post ,
2020-12-15 08:28:25 -07:00
} ,
source ::{
comment ::{ Comment , CommentAlias1 , CommentSaved } ,
2021-03-10 21:43:11 -07:00
community ::{ Community , CommunityFollower , CommunityPersonBan , CommunitySafe } ,
person ::{ Person , PersonAlias1 , PersonSafe , PersonSafeAlias1 } ,
2020-12-15 08:28:25 -07:00
post ::Post ,
} ,
2021-03-18 14:25:21 -06:00
CommentId ,
CommunityId ,
PersonId ,
PostId ,
2020-12-15 08:28:25 -07:00
} ;
use serde ::Serialize ;
#[ derive(Debug, PartialEq, Serialize, Clone) ]
pub struct CommentView {
pub comment : Comment ,
2021-03-10 15:33:55 -07:00
pub creator : PersonSafe ,
pub recipient : Option < PersonSafeAlias1 > , // Left joins to comment and person
2020-12-15 08:28:25 -07:00
pub post : Post ,
pub community : CommunitySafe ,
pub counts : CommentAggregates ,
2021-03-10 15:33:55 -07:00
pub creator_banned_from_community : bool , // Left Join to CommunityPersonBan
2020-12-15 08:28:25 -07:00
pub subscribed : bool , // Left join to CommunityFollower
pub saved : bool , // Left join to CommentSaved
pub my_vote : Option < i16 > , // Left join to CommentLike
}
type CommentViewTuple = (
Comment ,
2021-03-10 15:33:55 -07:00
PersonSafe ,
2020-12-15 08:28:25 -07:00
Option < CommentAlias1 > ,
2021-03-10 15:33:55 -07:00
Option < PersonSafeAlias1 > ,
2020-12-15 08:28:25 -07:00
Post ,
CommunitySafe ,
CommentAggregates ,
2021-02-26 06:49:58 -07:00
Option < CommunityPersonBan > ,
2020-12-15 08:28:25 -07:00
Option < CommunityFollower > ,
Option < CommentSaved > ,
Option < i16 > ,
) ;
impl CommentView {
pub fn read (
conn : & PgConnection ,
2021-03-18 14:25:21 -06:00
comment_id : CommentId ,
my_person_id : Option < PersonId > ,
2020-12-15 08:28:25 -07:00
) -> Result < Self , Error > {
// The left join below will return None in this case
2021-03-18 14:25:21 -06:00
let person_id_join = my_person_id . unwrap_or ( PersonId ( - 1 ) ) ;
2020-12-15 08:28:25 -07:00
let (
comment ,
creator ,
_parent_comment ,
recipient ,
post ,
community ,
counts ,
creator_banned_from_community ,
subscribed ,
saved ,
2021-01-31 08:29:21 -07:00
comment_like ,
2020-12-15 08:28:25 -07:00
) = comment ::table
. find ( comment_id )
2021-03-10 15:33:55 -07:00
. inner_join ( person ::table )
2020-12-15 08:28:25 -07:00
// recipient here
. left_join ( comment_alias_1 ::table . on ( comment_alias_1 ::id . nullable ( ) . eq ( comment ::parent_id ) ) )
2021-03-10 15:33:55 -07:00
. left_join ( person_alias_1 ::table . on ( person_alias_1 ::id . eq ( comment_alias_1 ::creator_id ) ) )
2020-12-15 08:28:25 -07:00
. inner_join ( post ::table )
. inner_join ( community ::table . on ( post ::community_id . eq ( community ::id ) ) )
. inner_join ( comment_aggregates ::table )
. left_join (
2021-03-10 15:33:55 -07:00
community_person_ban ::table . on (
2020-12-15 08:28:25 -07:00
community ::id
2021-03-10 15:33:55 -07:00
. eq ( community_person_ban ::community_id )
. and ( community_person_ban ::person_id . eq ( comment ::creator_id ) ) ,
2020-12-15 08:28:25 -07:00
) ,
)
. left_join (
community_follower ::table . on (
post ::community_id
. eq ( community_follower ::community_id )
2021-03-10 15:33:55 -07:00
. and ( community_follower ::person_id . eq ( person_id_join ) ) ,
2020-12-15 08:28:25 -07:00
) ,
)
. left_join (
comment_saved ::table . on (
comment ::id
. eq ( comment_saved ::comment_id )
2021-03-10 15:33:55 -07:00
. and ( comment_saved ::person_id . eq ( person_id_join ) ) ,
2020-12-15 08:28:25 -07:00
) ,
)
. left_join (
comment_like ::table . on (
comment ::id
. eq ( comment_like ::comment_id )
2021-03-10 15:33:55 -07:00
. and ( comment_like ::person_id . eq ( person_id_join ) ) ,
2020-12-15 08:28:25 -07:00
) ,
)
. select ( (
comment ::all_columns ,
2021-03-10 15:33:55 -07:00
Person ::safe_columns_tuple ( ) ,
2020-12-15 08:28:25 -07:00
comment_alias_1 ::all_columns . nullable ( ) ,
2021-03-10 15:33:55 -07:00
PersonAlias1 ::safe_columns_tuple ( ) . nullable ( ) ,
2020-12-15 08:28:25 -07:00
post ::all_columns ,
Community ::safe_columns_tuple ( ) ,
comment_aggregates ::all_columns ,
2021-03-10 15:33:55 -07:00
community_person_ban ::all_columns . nullable ( ) ,
2020-12-15 08:28:25 -07:00
community_follower ::all_columns . nullable ( ) ,
comment_saved ::all_columns . nullable ( ) ,
comment_like ::score . nullable ( ) ,
) )
. first ::< CommentViewTuple > ( conn ) ? ;
2021-03-10 15:33:55 -07:00
// If a person is given, then my_vote, if None, should be 0, not null
// Necessary to differentiate between other person's votes
let my_vote = if my_person_id . is_some ( ) & & comment_like . is_none ( ) {
2021-01-31 08:29:21 -07:00
Some ( 0 )
} else {
comment_like
} ;
2020-12-15 08:28:25 -07:00
Ok ( CommentView {
comment ,
recipient ,
post ,
creator ,
community ,
counts ,
creator_banned_from_community : creator_banned_from_community . is_some ( ) ,
subscribed : subscribed . is_some ( ) ,
saved : saved . is_some ( ) ,
my_vote ,
} )
}
2020-12-19 18:10:47 -07:00
2021-03-10 15:33:55 -07:00
/// Gets the recipient person id.
2020-12-19 18:10:47 -07:00
/// If there is no parent comment, its the post creator
2021-03-18 14:25:21 -06:00
pub fn get_recipient_id ( & self ) -> PersonId {
2020-12-19 18:10:47 -07:00
match & self . recipient {
Some ( parent_commenter ) = > parent_commenter . id ,
None = > self . post . creator_id ,
}
}
2020-12-15 08:28:25 -07:00
}
pub struct CommentQueryBuilder < ' a > {
conn : & ' a PgConnection ,
listing_type : ListingType ,
sort : & ' a SortType ,
2021-03-18 14:25:21 -06:00
community_id : Option < CommunityId > ,
2020-12-16 11:59:43 -07:00
community_name : Option < String > ,
2021-03-18 14:25:21 -06:00
post_id : Option < PostId > ,
creator_id : Option < PersonId > ,
recipient_id : Option < PersonId > ,
my_person_id : Option < PersonId > ,
2020-12-15 08:28:25 -07:00
search_term : Option < String > ,
saved_only : bool ,
unread_only : bool ,
2021-04-21 15:41:14 -06:00
show_bot_accounts : bool ,
2020-12-15 08:28:25 -07:00
page : Option < i64 > ,
limit : Option < i64 > ,
}
impl < ' a > CommentQueryBuilder < ' a > {
2020-12-16 11:59:43 -07:00
pub fn create ( conn : & ' a PgConnection ) -> Self {
2020-12-15 08:28:25 -07:00
CommentQueryBuilder {
conn ,
listing_type : ListingType ::All ,
sort : & SortType ::New ,
2020-12-16 11:59:43 -07:00
community_id : None ,
community_name : None ,
post_id : None ,
creator_id : None ,
recipient_id : None ,
2021-03-10 15:33:55 -07:00
my_person_id : None ,
2020-12-15 08:28:25 -07:00
search_term : None ,
saved_only : false ,
unread_only : false ,
2021-04-21 15:41:14 -06:00
show_bot_accounts : true ,
2020-12-15 08:28:25 -07:00
page : None ,
limit : None ,
}
}
pub fn listing_type ( mut self , listing_type : ListingType ) -> Self {
self . listing_type = listing_type ;
self
}
pub fn sort ( mut self , sort : & ' a SortType ) -> Self {
self . sort = sort ;
self
}
2021-03-18 14:25:21 -06:00
pub fn post_id < T : MaybeOptional < PostId > > ( mut self , post_id : T ) -> Self {
2020-12-16 11:59:43 -07:00
self . post_id = post_id . get_optional ( ) ;
self
}
2021-03-18 14:25:21 -06:00
pub fn creator_id < T : MaybeOptional < PersonId > > ( mut self , creator_id : T ) -> Self {
2020-12-16 11:59:43 -07:00
self . creator_id = creator_id . get_optional ( ) ;
2020-12-15 08:28:25 -07:00
self
}
2021-03-18 14:25:21 -06:00
pub fn recipient_id < T : MaybeOptional < PersonId > > ( mut self , recipient_id : T ) -> Self {
2020-12-16 11:59:43 -07:00
self . recipient_id = recipient_id . get_optional ( ) ;
2020-12-15 08:28:25 -07:00
self
}
2021-03-18 14:25:21 -06:00
pub fn community_id < T : MaybeOptional < CommunityId > > ( mut self , community_id : T ) -> Self {
2020-12-16 11:59:43 -07:00
self . community_id = community_id . get_optional ( ) ;
2020-12-15 08:28:25 -07:00
self
}
2021-03-18 14:25:21 -06:00
pub fn my_person_id < T : MaybeOptional < PersonId > > ( mut self , my_person_id : T ) -> Self {
2021-03-10 15:33:55 -07:00
self . my_person_id = my_person_id . get_optional ( ) ;
2020-12-15 08:28:25 -07:00
self
}
2020-12-16 11:59:43 -07:00
pub fn community_name < T : MaybeOptional < String > > ( mut self , community_name : T ) -> Self {
self . community_name = community_name . get_optional ( ) ;
2020-12-15 08:28:25 -07:00
self
}
pub fn search_term < T : MaybeOptional < String > > ( mut self , search_term : T ) -> Self {
self . search_term = search_term . get_optional ( ) ;
self
}
pub fn saved_only ( mut self , saved_only : bool ) -> Self {
self . saved_only = saved_only ;
self
}
pub fn unread_only ( mut self , unread_only : bool ) -> Self {
self . unread_only = unread_only ;
self
}
2021-04-21 15:41:14 -06:00
pub fn show_bot_accounts ( mut self , show_bot_accounts : bool ) -> Self {
self . show_bot_accounts = show_bot_accounts ;
self
}
2020-12-15 08:28:25 -07:00
pub fn page < T : MaybeOptional < i64 > > ( mut self , page : T ) -> Self {
self . page = page . get_optional ( ) ;
self
}
pub fn limit < T : MaybeOptional < i64 > > ( mut self , limit : T ) -> Self {
self . limit = limit . get_optional ( ) ;
self
}
pub fn list ( self ) -> Result < Vec < CommentView > , Error > {
use diesel ::dsl ::* ;
2020-12-16 11:59:43 -07:00
// The left join below will return None in this case
2021-03-18 14:25:21 -06:00
let person_id_join = self . my_person_id . unwrap_or ( PersonId ( - 1 ) ) ;
2020-12-16 11:59:43 -07:00
let mut query = comment ::table
2021-03-10 15:33:55 -07:00
. inner_join ( person ::table )
2020-12-16 11:59:43 -07:00
// recipient here
. left_join ( comment_alias_1 ::table . on ( comment_alias_1 ::id . nullable ( ) . eq ( comment ::parent_id ) ) )
2021-03-10 15:33:55 -07:00
. left_join ( person_alias_1 ::table . on ( person_alias_1 ::id . eq ( comment_alias_1 ::creator_id ) ) )
2020-12-16 11:59:43 -07:00
. inner_join ( post ::table )
. inner_join ( community ::table . on ( post ::community_id . eq ( community ::id ) ) )
. inner_join ( comment_aggregates ::table )
. left_join (
2021-03-10 15:33:55 -07:00
community_person_ban ::table . on (
2020-12-16 11:59:43 -07:00
community ::id
2021-03-10 15:33:55 -07:00
. eq ( community_person_ban ::community_id )
. and ( community_person_ban ::person_id . eq ( comment ::creator_id ) ) ,
2020-12-16 11:59:43 -07:00
) ,
)
. left_join (
community_follower ::table . on (
post ::community_id
. eq ( community_follower ::community_id )
2021-03-10 15:33:55 -07:00
. and ( community_follower ::person_id . eq ( person_id_join ) ) ,
2020-12-16 11:59:43 -07:00
) ,
)
. left_join (
comment_saved ::table . on (
comment ::id
. eq ( comment_saved ::comment_id )
2021-03-10 15:33:55 -07:00
. and ( comment_saved ::person_id . eq ( person_id_join ) ) ,
2020-12-16 11:59:43 -07:00
) ,
)
. left_join (
comment_like ::table . on (
comment ::id
. eq ( comment_like ::comment_id )
2021-03-10 15:33:55 -07:00
. and ( comment_like ::person_id . eq ( person_id_join ) ) ,
2020-12-16 11:59:43 -07:00
) ,
)
. select ( (
comment ::all_columns ,
2021-03-10 15:33:55 -07:00
Person ::safe_columns_tuple ( ) ,
2020-12-16 11:59:43 -07:00
comment_alias_1 ::all_columns . nullable ( ) ,
2021-03-10 15:33:55 -07:00
PersonAlias1 ::safe_columns_tuple ( ) . nullable ( ) ,
2020-12-16 11:59:43 -07:00
post ::all_columns ,
Community ::safe_columns_tuple ( ) ,
comment_aggregates ::all_columns ,
2021-03-10 15:33:55 -07:00
community_person_ban ::all_columns . nullable ( ) ,
2020-12-16 11:59:43 -07:00
community_follower ::all_columns . nullable ( ) ,
comment_saved ::all_columns . nullable ( ) ,
comment_like ::score . nullable ( ) ,
) )
. into_boxed ( ) ;
2020-12-15 08:28:25 -07:00
// The replies
2020-12-16 11:59:43 -07:00
if let Some ( recipient_id ) = self . recipient_id {
2020-12-15 08:28:25 -07:00
query = query
// TODO needs lots of testing
2021-03-10 15:33:55 -07:00
. filter ( person_alias_1 ::id . eq ( recipient_id ) ) // Gets the comment replies
2021-01-13 10:04:00 -07:00
. or_filter (
comment ::parent_id
. is_null ( )
. and ( post ::creator_id . eq ( recipient_id ) ) ,
) // Gets the top level replies
2020-12-15 08:28:25 -07:00
. filter ( comment ::deleted . eq ( false ) )
. filter ( comment ::removed . eq ( false ) ) ;
}
if self . unread_only {
query = query . filter ( comment ::read . eq ( false ) ) ;
}
2020-12-16 11:59:43 -07:00
if let Some ( creator_id ) = self . creator_id {
query = query . filter ( comment ::creator_id . eq ( creator_id ) ) ;
2020-12-15 08:28:25 -07:00
} ;
2020-12-16 11:59:43 -07:00
if let Some ( community_id ) = self . community_id {
query = query . filter ( post ::community_id . eq ( community_id ) ) ;
2020-12-15 08:28:25 -07:00
}
2020-12-16 11:59:43 -07:00
if let Some ( community_name ) = self . community_name {
2020-12-15 08:28:25 -07:00
query = query
2020-12-16 11:59:43 -07:00
. filter ( community ::name . eq ( community_name ) )
2020-12-15 08:28:25 -07:00
. filter ( comment ::local . eq ( true ) ) ;
}
2020-12-16 11:59:43 -07:00
if let Some ( post_id ) = self . post_id {
query = query . filter ( comment ::post_id . eq ( post_id ) ) ;
2020-12-15 08:28:25 -07:00
} ;
if let Some ( search_term ) = self . search_term {
query = query . filter ( comment ::content . ilike ( fuzzy_search ( & search_term ) ) ) ;
} ;
query = match self . listing_type {
// ListingType::Subscribed => query.filter(community_follower::subscribed.eq(true)),
2021-03-11 15:47:44 -07:00
ListingType ::Subscribed = > query . filter ( community_follower ::person_id . is_not_null ( ) ) , // TODO could be this: and(community_follower::person_id.eq(person_id_join)),
2020-12-15 08:28:25 -07:00
ListingType ::Local = > query . filter ( community ::local . eq ( true ) ) ,
_ = > query ,
} ;
if self . saved_only {
query = query . filter ( comment_saved ::id . is_not_null ( ) ) ;
}
2021-04-21 15:41:14 -06:00
if ! self . show_bot_accounts {
query = query . filter ( person ::bot_account . eq ( false ) ) ;
} ;
2020-12-15 08:28:25 -07:00
query = match self . sort {
SortType ::Hot | SortType ::Active = > query
2021-01-05 21:42:48 -07:00
. order_by ( hot_rank ( comment_aggregates ::score , comment_aggregates ::published ) . desc ( ) )
. then_order_by ( comment_aggregates ::published . desc ( ) ) ,
2021-02-18 08:38:25 -07:00
SortType ::New | SortType ::MostComments | SortType ::NewComments = > {
query . order_by ( comment ::published . desc ( ) )
}
2020-12-15 08:28:25 -07:00
SortType ::TopAll = > query . order_by ( comment_aggregates ::score . desc ( ) ) ,
SortType ::TopYear = > query
. filter ( comment ::published . gt ( now - 1. years ( ) ) )
. order_by ( comment_aggregates ::score . desc ( ) ) ,
SortType ::TopMonth = > query
. filter ( comment ::published . gt ( now - 1. months ( ) ) )
. order_by ( comment_aggregates ::score . desc ( ) ) ,
SortType ::TopWeek = > query
. filter ( comment ::published . gt ( now - 1. weeks ( ) ) )
. order_by ( comment_aggregates ::score . desc ( ) ) ,
SortType ::TopDay = > query
. filter ( comment ::published . gt ( now - 1. days ( ) ) )
. order_by ( comment_aggregates ::score . desc ( ) ) ,
} ;
let ( limit , offset ) = limit_and_offset ( self . page , self . limit ) ;
// Note: deleted and removed comments are done on the front side
let res = query
. limit ( limit )
. offset ( offset )
. load ::< CommentViewTuple > ( self . conn ) ? ;
2020-12-23 14:56:20 -07:00
Ok ( CommentView ::from_tuple_to_vec ( res ) )
2020-12-15 08:28:25 -07:00
}
}
impl ViewToVec for CommentView {
type DbTuple = CommentViewTuple ;
2020-12-23 14:56:20 -07:00
fn from_tuple_to_vec ( items : Vec < Self ::DbTuple > ) -> Vec < Self > {
items
2020-12-15 08:28:25 -07:00
. iter ( )
. map ( | a | Self {
comment : a . 0. to_owned ( ) ,
creator : a . 1. to_owned ( ) ,
recipient : a . 3. to_owned ( ) ,
post : a . 4. to_owned ( ) ,
community : a . 5. to_owned ( ) ,
counts : a . 6. to_owned ( ) ,
creator_banned_from_community : a . 7. is_some ( ) ,
subscribed : a . 8. is_some ( ) ,
saved : a . 9. is_some ( ) ,
my_vote : a . 10 ,
} )
. collect ::< Vec < Self > > ( )
}
}
2020-12-15 12:39:18 -07:00
#[ cfg(test) ]
mod tests {
2020-12-21 09:30:34 -07:00
use crate ::comment_view ::* ;
2020-12-21 16:27:42 -07:00
use lemmy_db_queries ::{
aggregates ::comment_aggregates ::CommentAggregates ,
establish_unpooled_connection ,
Crud ,
Likeable ,
} ;
2021-03-10 21:43:11 -07:00
use lemmy_db_schema ::source ::{ comment ::* , community ::* , person ::* , post ::* } ;
2021-02-25 12:43:39 -07:00
use serial_test ::serial ;
2020-12-15 12:39:18 -07:00
#[ test ]
2021-02-25 12:43:39 -07:00
#[ serial ]
2020-12-15 12:39:18 -07:00
fn test_crud ( ) {
let conn = establish_unpooled_connection ( ) ;
2021-03-10 15:33:55 -07:00
let new_person = PersonForm {
2021-03-11 09:41:04 -07:00
name : " timmy " . into ( ) ,
2021-03-20 14:59:07 -06:00
.. PersonForm ::default ( )
2020-12-15 12:39:18 -07:00
} ;
2021-03-10 15:33:55 -07:00
let inserted_person = Person ::create ( & conn , & new_person ) . unwrap ( ) ;
2020-12-15 12:39:18 -07:00
let new_community = CommunityForm {
name : " test community 5 " . to_string ( ) ,
title : " nada " . to_owned ( ) ,
2021-03-20 14:59:07 -06:00
.. CommunityForm ::default ( )
2020-12-15 12:39:18 -07:00
} ;
let inserted_community = Community ::create ( & conn , & new_community ) . unwrap ( ) ;
let new_post = PostForm {
name : " A test post 2 " . into ( ) ,
2021-03-10 15:33:55 -07:00
creator_id : inserted_person . id ,
2020-12-15 12:39:18 -07:00
community_id : inserted_community . id ,
2021-03-20 14:59:07 -06:00
.. PostForm ::default ( )
2020-12-15 12:39:18 -07:00
} ;
let inserted_post = Post ::create ( & conn , & new_post ) . unwrap ( ) ;
let comment_form = CommentForm {
content : " A test comment 32 " . into ( ) ,
2021-03-10 15:33:55 -07:00
creator_id : inserted_person . id ,
2020-12-15 12:39:18 -07:00
post_id : inserted_post . id ,
2021-03-20 14:59:07 -06:00
.. CommentForm ::default ( )
2020-12-15 12:39:18 -07:00
} ;
let inserted_comment = Comment ::create ( & conn , & comment_form ) . unwrap ( ) ;
let comment_like_form = CommentLikeForm {
comment_id : inserted_comment . id ,
post_id : inserted_post . id ,
2021-03-10 15:33:55 -07:00
person_id : inserted_person . id ,
2020-12-15 12:39:18 -07:00
score : 1 ,
} ;
let _inserted_comment_like = CommentLike ::like ( & conn , & comment_like_form ) . unwrap ( ) ;
2020-12-18 10:25:27 -07:00
let agg = CommentAggregates ::read ( & conn , inserted_comment . id ) . unwrap ( ) ;
2021-03-10 15:33:55 -07:00
let expected_comment_view_no_person = CommentView {
2020-12-15 12:39:18 -07:00
creator_banned_from_community : false ,
my_vote : None ,
subscribed : false ,
saved : false ,
comment : Comment {
id : inserted_comment . id ,
content : " A test comment 32 " . into ( ) ,
2021-03-10 15:33:55 -07:00
creator_id : inserted_person . id ,
2020-12-15 12:39:18 -07:00
post_id : inserted_post . id ,
parent_id : None ,
removed : false ,
deleted : false ,
read : false ,
published : inserted_comment . published ,
ap_id : inserted_comment . ap_id ,
updated : None ,
local : true ,
} ,
2021-03-10 15:33:55 -07:00
creator : PersonSafe {
id : inserted_person . id ,
2020-12-15 12:39:18 -07:00
name : " timmy " . into ( ) ,
2021-04-01 11:57:45 -06:00
display_name : None ,
2021-03-10 15:33:55 -07:00
published : inserted_person . published ,
2020-12-15 12:39:18 -07:00
avatar : None ,
2021-03-10 15:33:55 -07:00
actor_id : inserted_person . actor_id . to_owned ( ) ,
2020-12-15 12:39:18 -07:00
local : true ,
banned : false ,
deleted : false ,
2021-03-22 08:28:00 -06:00
admin : false ,
2021-04-21 15:41:14 -06:00
bot_account : false ,
2020-12-15 12:39:18 -07:00
bio : None ,
banner : None ,
updated : None ,
2021-03-10 15:33:55 -07:00
inbox_url : inserted_person . inbox_url . to_owned ( ) ,
2021-02-04 09:34:58 -07:00
shared_inbox_url : None ,
2021-03-20 13:21:51 -06:00
matrix_user_id : None ,
2020-12-15 12:39:18 -07:00
} ,
recipient : None ,
post : Post {
id : inserted_post . id ,
name : inserted_post . name . to_owned ( ) ,
2021-03-10 15:33:55 -07:00
creator_id : inserted_person . id ,
2020-12-15 12:39:18 -07:00
url : None ,
body : None ,
published : inserted_post . published ,
updated : None ,
community_id : inserted_community . id ,
removed : false ,
deleted : false ,
locked : false ,
stickied : false ,
nsfw : false ,
embed_title : None ,
embed_description : None ,
embed_html : None ,
thumbnail_url : None ,
ap_id : inserted_post . ap_id . to_owned ( ) ,
local : true ,
} ,
community : CommunitySafe {
id : inserted_community . id ,
name : " test community 5 " . to_string ( ) ,
icon : None ,
removed : false ,
deleted : false ,
nsfw : false ,
actor_id : inserted_community . actor_id . to_owned ( ) ,
local : true ,
title : " nada " . to_owned ( ) ,
description : None ,
updated : None ,
banner : None ,
published : inserted_community . published ,
} ,
counts : CommentAggregates {
2020-12-18 10:25:27 -07:00
id : agg . id ,
2020-12-15 12:39:18 -07:00
comment_id : inserted_comment . id ,
score : 1 ,
upvotes : 1 ,
downvotes : 0 ,
2021-01-05 21:42:48 -07:00
published : agg . published ,
2020-12-15 12:39:18 -07:00
} ,
} ;
2021-03-10 15:33:55 -07:00
let mut expected_comment_view_with_person = expected_comment_view_no_person . to_owned ( ) ;
expected_comment_view_with_person . my_vote = Some ( 1 ) ;
2020-12-15 12:39:18 -07:00
2021-03-10 15:33:55 -07:00
let read_comment_views_no_person = CommentQueryBuilder ::create ( & conn )
2020-12-16 11:59:43 -07:00
. post_id ( inserted_post . id )
2020-12-15 12:39:18 -07:00
. list ( )
. unwrap ( ) ;
2021-03-10 15:33:55 -07:00
let read_comment_views_with_person = CommentQueryBuilder ::create ( & conn )
2020-12-16 11:59:43 -07:00
. post_id ( inserted_post . id )
2021-03-10 15:33:55 -07:00
. my_person_id ( inserted_person . id )
2020-12-15 12:39:18 -07:00
. list ( )
. unwrap ( ) ;
2021-03-10 15:33:55 -07:00
let like_removed = CommentLike ::remove ( & conn , inserted_person . id , inserted_comment . id ) . unwrap ( ) ;
2020-12-15 12:39:18 -07:00
let num_deleted = Comment ::delete ( & conn , inserted_comment . id ) . unwrap ( ) ;
Post ::delete ( & conn , inserted_post . id ) . unwrap ( ) ;
Community ::delete ( & conn , inserted_community . id ) . unwrap ( ) ;
2021-03-10 15:33:55 -07:00
Person ::delete ( & conn , inserted_person . id ) . unwrap ( ) ;
2020-12-15 12:39:18 -07:00
2021-03-10 21:43:11 -07:00
assert_eq! (
expected_comment_view_no_person ,
read_comment_views_no_person [ 0 ]
) ;
2020-12-15 12:39:18 -07:00
assert_eq! (
2021-03-10 15:33:55 -07:00
expected_comment_view_with_person ,
read_comment_views_with_person [ 0 ]
2020-12-15 12:39:18 -07:00
) ;
assert_eq! ( 1 , num_deleted ) ;
assert_eq! ( 1 , like_removed ) ;
}
}