2 newtypes::{PersonId, PostId, PostReportId},
4 dsl::{post_report, resolved, resolver_id, updated},
7 source::post_report::{PostReport, PostReportForm},
9 utils::{get_conn, naive_now, DbPool},
12 dsl::{insert_into, update},
17 use diesel_async::RunQueryDsl;
20 impl Reportable for PostReport {
21 type Form = PostReportForm;
22 type IdType = PostReportId;
23 type ObjectIdType = PostId;
25 async fn report(pool: &mut DbPool<'_>, post_report_form: &PostReportForm) -> Result<Self, Error> {
26 let conn = &mut get_conn(pool).await?;
27 insert_into(post_report)
28 .values(post_report_form)
29 .get_result::<Self>(conn)
34 pool: &mut DbPool<'_>,
35 report_id: Self::IdType,
36 by_resolver_id: PersonId,
37 ) -> Result<usize, Error> {
38 let conn = &mut get_conn(pool).await?;
39 update(post_report.find(report_id))
42 resolver_id.eq(by_resolver_id),
43 updated.eq(naive_now()),
49 async fn resolve_all_for_object(
50 pool: &mut DbPool<'_>,
52 by_resolver_id: PersonId,
53 ) -> Result<usize, Error> {
54 let conn = &mut get_conn(pool).await?;
55 update(post_report.filter(post_id.eq(post_id_)))
58 resolver_id.eq(by_resolver_id),
59 updated.eq(naive_now()),
66 pool: &mut DbPool<'_>,
67 report_id: Self::IdType,
68 by_resolver_id: PersonId,
69 ) -> Result<usize, Error> {
70 let conn = &mut get_conn(pool).await?;
71 update(post_report.find(report_id))
74 resolver_id.eq(by_resolver_id),
75 updated.eq(naive_now()),
84 #![allow(clippy::unwrap_used)]
85 #![allow(clippy::indexing_slicing)]
90 community::{Community, CommunityInsertForm},
92 person::{Person, PersonInsertForm},
93 post::{Post, PostInsertForm},
96 utils::build_db_pool_for_tests,
98 use serial_test::serial;
100 async fn init(pool: &mut DbPool<'_>) -> (Person, PostReport) {
101 let inserted_instance = Instance::read_or_create(pool, "my_domain.tld".to_string())
104 let person_form = PersonInsertForm::builder()
106 .public_key("pubkey".to_string())
107 .instance_id(inserted_instance.id)
109 let person = Person::create(pool, &person_form).await.unwrap();
111 let community_form = CommunityInsertForm::builder()
112 .name("test community_4".to_string())
113 .title("nada".to_owned())
114 .public_key("pubkey".to_string())
115 .instance_id(inserted_instance.id)
117 let community = Community::create(pool, &community_form).await.unwrap();
119 let form = PostInsertForm::builder()
120 .name("A test post".into())
121 .creator_id(person.id)
122 .community_id(community.id)
124 let post = Post::create(pool, &form).await.unwrap();
126 let report_form = PostReportForm {
128 creator_id: person.id,
129 reason: "my reason".to_string(),
132 let report = PostReport::report(pool, &report_form).await.unwrap();
138 async fn test_resolve_post_report() {
139 let pool = &build_db_pool_for_tests().await;
140 let pool = &mut pool.into();
142 let (person, report) = init(pool).await;
144 let resolved_count = PostReport::resolve(pool, report.id, person.id)
147 assert_eq!(resolved_count, 1);
149 let unresolved_count = PostReport::unresolve(pool, report.id, person.id)
152 assert_eq!(unresolved_count, 1);
154 Person::delete(pool, person.id).await.unwrap();
155 Post::delete(pool, report.post_id).await.unwrap();
160 async fn test_resolve_all_post_reports() {
161 let pool = &build_db_pool_for_tests().await;
162 let pool = &mut pool.into();
164 let (person, report) = init(pool).await;
166 let resolved_count = PostReport::resolve_all_for_object(pool, report.post_id, person.id)
169 assert_eq!(resolved_count, 1);
171 Person::delete(pool, person.id).await.unwrap();
172 Post::delete(pool, report.post_id).await.unwrap();