summaryrefslogtreecommitdiffstats
path: root/server/lemmy_db/src/moderator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/lemmy_db/src/moderator.rs')
-rw-r--r--server/lemmy_db/src/moderator.rs777
1 files changed, 777 insertions, 0 deletions
diff --git a/server/lemmy_db/src/moderator.rs b/server/lemmy_db/src/moderator.rs
new file mode 100644
index 00000000..f5d33d96
--- /dev/null
+++ b/server/lemmy_db/src/moderator.rs
@@ -0,0 +1,777 @@
+use crate::{
+ schema::{
+ mod_add,
+ mod_add_community,
+ mod_ban,
+ mod_ban_from_community,
+ mod_lock_post,
+ mod_remove_comment,
+ mod_remove_community,
+ mod_remove_post,
+ mod_sticky_post,
+ },
+ Crud,
+};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_remove_post"]
+pub struct ModRemovePost {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub post_id: i32,
+ pub reason: Option<String>,
+ pub removed: Option<bool>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_remove_post"]
+pub struct ModRemovePostForm {
+ pub mod_user_id: i32,
+ pub post_id: i32,
+ pub reason: Option<String>,
+ pub removed: Option<bool>,
+}
+
+impl Crud<ModRemovePostForm> for ModRemovePost {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_remove_post::dsl::*;
+ mod_remove_post.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_remove_post::dsl::*;
+ diesel::delete(mod_remove_post.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModRemovePostForm) -> Result<Self, Error> {
+ use crate::schema::mod_remove_post::dsl::*;
+ insert_into(mod_remove_post)
+ .values(form)
+ .get_result::<Self>(conn)
+ }
+
+ fn update(conn: &PgConnection, from_id: i32, form: &ModRemovePostForm) -> Result<Self, Error> {
+ use crate::schema::mod_remove_post::dsl::*;
+ diesel::update(mod_remove_post.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_lock_post"]
+pub struct ModLockPost {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub post_id: i32,
+ pub locked: Option<bool>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_lock_post"]
+pub struct ModLockPostForm {
+ pub mod_user_id: i32,
+ pub post_id: i32,
+ pub locked: Option<bool>,
+}
+
+impl Crud<ModLockPostForm> for ModLockPost {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_lock_post::dsl::*;
+ mod_lock_post.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_lock_post::dsl::*;
+ diesel::delete(mod_lock_post.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModLockPostForm) -> Result<Self, Error> {
+ use crate::schema::mod_lock_post::dsl::*;
+ insert_into(mod_lock_post)
+ .values(form)
+ .get_result::<Self>(conn)
+ }
+
+ fn update(conn: &PgConnection, from_id: i32, form: &ModLockPostForm) -> Result<Self, Error> {
+ use crate::schema::mod_lock_post::dsl::*;
+ diesel::update(mod_lock_post.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_sticky_post"]
+pub struct ModStickyPost {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub post_id: i32,
+ pub stickied: Option<bool>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_sticky_post"]
+pub struct ModStickyPostForm {
+ pub mod_user_id: i32,
+ pub post_id: i32,
+ pub stickied: Option<bool>,
+}
+
+impl Crud<ModStickyPostForm> for ModStickyPost {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_sticky_post::dsl::*;
+ mod_sticky_post.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_sticky_post::dsl::*;
+ diesel::delete(mod_sticky_post.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModStickyPostForm) -> Result<Self, Error> {
+ use crate::schema::mod_sticky_post::dsl::*;
+ insert_into(mod_sticky_post)
+ .values(form)
+ .get_result::<Self>(conn)
+ }
+
+ fn update(conn: &PgConnection, from_id: i32, form: &ModStickyPostForm) -> Result<Self, Error> {
+ use crate::schema::mod_sticky_post::dsl::*;
+ diesel::update(mod_sticky_post.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_remove_comment"]
+pub struct ModRemoveComment {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub comment_id: i32,
+ pub reason: Option<String>,
+ pub removed: Option<bool>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_remove_comment"]
+pub struct ModRemoveCommentForm {
+ pub mod_user_id: i32,
+ pub comment_id: i32,
+ pub reason: Option<String>,
+ pub removed: Option<bool>,
+}
+
+impl Crud<ModRemoveCommentForm> for ModRemoveComment {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_remove_comment::dsl::*;
+ mod_remove_comment.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_remove_comment::dsl::*;
+ diesel::delete(mod_remove_comment.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModRemoveCommentForm) -> Result<Self, Error> {
+ use crate::schema::mod_remove_comment::dsl::*;
+ insert_into(mod_remove_comment)
+ .values(form)
+ .get_result::<Self>(conn)
+ }
+
+ fn update(conn: &PgConnection, from_id: i32, form: &ModRemoveCommentForm) -> Result<Self, Error> {
+ use crate::schema::mod_remove_comment::dsl::*;
+ diesel::update(mod_remove_comment.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_remove_community"]
+pub struct ModRemoveCommunity {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub community_id: i32,
+ pub reason: Option<String>,
+ pub removed: Option<bool>,
+ pub expires: Option<chrono::NaiveDateTime>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_remove_community"]
+pub struct ModRemoveCommunityForm {
+ pub mod_user_id: i32,
+ pub community_id: i32,
+ pub reason: Option<String>,
+ pub removed: Option<bool>,
+ pub expires: Option<chrono::NaiveDateTime>,
+}
+
+impl Crud<ModRemoveCommunityForm> for ModRemoveCommunity {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_remove_community::dsl::*;
+ mod_remove_community.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_remove_community::dsl::*;
+ diesel::delete(mod_remove_community.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModRemoveCommunityForm) -> Result<Self, Error> {
+ use crate::schema::mod_remove_community::dsl::*;
+ insert_into(mod_remove_community)
+ .values(form)
+ .get_result::<Self>(conn)
+ }
+
+ fn update(
+ conn: &PgConnection,
+ from_id: i32,
+ form: &ModRemoveCommunityForm,
+ ) -> Result<Self, Error> {
+ use crate::schema::mod_remove_community::dsl::*;
+ diesel::update(mod_remove_community.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_ban_from_community"]
+pub struct ModBanFromCommunity {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub community_id: i32,
+ pub reason: Option<String>,
+ pub banned: Option<bool>,
+ pub expires: Option<chrono::NaiveDateTime>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_ban_from_community"]
+pub struct ModBanFromCommunityForm {
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub community_id: i32,
+ pub reason: Option<String>,
+ pub banned: Option<bool>,
+ pub expires: Option<chrono::NaiveDateTime>,
+}
+
+impl Crud<ModBanFromCommunityForm> for ModBanFromCommunity {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_ban_from_community::dsl::*;
+ mod_ban_from_community.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_ban_from_community::dsl::*;
+ diesel::delete(mod_ban_from_community.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModBanFromCommunityForm) -> Result<Self, Error> {
+ use crate::schema::mod_ban_from_community::dsl::*;
+ insert_into(mod_ban_from_community)
+ .values(form)
+ .get_result::<Self>(conn)
+ }
+
+ fn update(
+ conn: &PgConnection,
+ from_id: i32,
+ form: &ModBanFromCommunityForm,
+ ) -> Result<Self, Error> {
+ use crate::schema::mod_ban_from_community::dsl::*;
+ diesel::update(mod_ban_from_community.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_ban"]
+pub struct ModBan {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub reason: Option<String>,
+ pub banned: Option<bool>,
+ pub expires: Option<chrono::NaiveDateTime>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_ban"]
+pub struct ModBanForm {
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub reason: Option<String>,
+ pub banned: Option<bool>,
+ pub expires: Option<chrono::NaiveDateTime>,
+}
+
+impl Crud<ModBanForm> for ModBan {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_ban::dsl::*;
+ mod_ban.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_ban::dsl::*;
+ diesel::delete(mod_ban.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModBanForm) -> Result<Self, Error> {
+ use crate::schema::mod_ban::dsl::*;
+ insert_into(mod_ban).values(form).get_result::<Self>(conn)
+ }
+
+ fn update(conn: &PgConnection, from_id: i32, form: &ModBanForm) -> Result<Self, Error> {
+ use crate::schema::mod_ban::dsl::*;
+ diesel::update(mod_ban.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_add_community"]
+pub struct ModAddCommunity {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub community_id: i32,
+ pub removed: Option<bool>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_add_community"]
+pub struct ModAddCommunityForm {
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub community_id: i32,
+ pub removed: Option<bool>,
+}
+
+impl Crud<ModAddCommunityForm> for ModAddCommunity {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_add_community::dsl::*;
+ mod_add_community.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_add_community::dsl::*;
+ diesel::delete(mod_add_community.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModAddCommunityForm) -> Result<Self, Error> {
+ use crate::schema::mod_add_community::dsl::*;
+ insert_into(mod_add_community)
+ .values(form)
+ .get_result::<Self>(conn)
+ }
+
+ fn update(conn: &PgConnection, from_id: i32, form: &ModAddCommunityForm) -> Result<Self, Error> {
+ use crate::schema::mod_add_community::dsl::*;
+ diesel::update(mod_add_community.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
+#[table_name = "mod_add"]
+pub struct ModAdd {
+ pub id: i32,
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub removed: Option<bool>,
+ pub when_: chrono::NaiveDateTime,
+}
+
+#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
+#[table_name = "mod_add"]
+pub struct ModAddForm {
+ pub mod_user_id: i32,
+ pub other_user_id: i32,
+ pub removed: Option<bool>,
+}
+
+impl Crud<ModAddForm> for ModAdd {
+ fn read(conn: &PgConnection, from_id: i32) -> Result<Self, Error> {
+ use crate::schema::mod_add::dsl::*;
+ mod_add.find(from_id).first::<Self>(conn)
+ }
+
+ fn delete(conn: &PgConnection, from_id: i32) -> Result<usize, Error> {
+ use crate::schema::mod_add::dsl::*;
+ diesel::delete(mod_add.find(from_id)).execute(conn)
+ }
+
+ fn create(conn: &PgConnection, form: &ModAddForm) -> Result<Self, Error> {
+ use crate::schema::mod_add::dsl::*;
+ insert_into(mod_add).values(form).get_result::<Self>(conn)
+ }
+
+ fn update(conn: &PgConnection, from_id: i32, form: &ModAddForm) -> Result<Self, Error> {
+ use crate::schema::mod_add::dsl::*;
+ diesel::update(mod_add.find(from_id))
+ .set(form)
+ .get_result::<Self>(conn)
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use crate::{
+ comment::*,
+ community::*,
+ moderator::*,
+ post::*,
+ tests::establish_unpooled_connection,
+ user::*,
+ ListingType,
+ SortType,
+ };
+
+ // use Crud;
+ #[test]
+ fn test_crud() {
+ let conn = establish_unpooled_connection();
+
+ let new_mod = UserForm {
+ name: "the mod".into(),
+ preferred_username: None,
+ password_encrypted: "nope".into(),
+ email: None,
+ matrix_user_id: None,
+ avatar: None,
+ admin: false,
+ banned: false,
+ updated: None,
+ show_nsfw: false,
+ theme: "darkly".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: "http://fake.com".into(),
+ bio: None,
+ local: true,
+ private_key: None,
+ public_key: None,
+ last_refreshed_at: None,
+ };
+
+ let inserted_mod = User_::create(&conn, &new_mod).unwrap();
+
+ let new_user = UserForm {
+ name: "jim2".into(),
+ preferred_username: None,
+ password_encrypted: "nope".into(),
+ email: None,
+ matrix_user_id: None,
+ avatar: None,
+ admin: false,
+ banned: false,
+ updated: None,
+ show_nsfw: false,
+ theme: "darkly".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: "http://fake.com".into(),
+ 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: "mod_community".to_string(),
+ title: "nada".to_owned(),
+ description: None,
+ category_id: 1,
+ creator_id: inserted_user.id,
+ removed: None,
+ deleted: None,
+ updated: None,
+ nsfw: false,
+ actor_id: "http://fake.com".into(),
+ local: true,
+ private_key: None,
+ public_key: None,
+ last_refreshed_at: None,
+ published: None,
+ };
+
+ let inserted_community = Community::create(&conn, &new_community).unwrap();
+
+ let new_post = PostForm {
+ name: "A test post thweep".into(),
+ url: None,
+ body: None,
+ creator_id: inserted_user.id,
+ community_id: inserted_community.id,
+ removed: None,
+ deleted: None,
+ locked: None,
+ stickied: None,
+ updated: None,
+ nsfw: false,
+ embed_title: None,
+ embed_description: None,
+ embed_html: None,
+ thumbnail_url: None,
+ ap_id: "http://fake.com".into(),
+ 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: "http://fake.com".into(),
+ local: true,
+ };
+
+ let inserted_comment = Comment::create(&conn, &comment_form).unwrap();
+
+ // Now the actual tests
+
+ // remove post
+ let mod_remove_post_form = ModRemovePostForm {
+ mod_user_id: inserted_mod.id,
+ post_id: inserted_post.id,
+ reason: None,
+ removed: None,
+ };
+ let inserted_mod_remove_post = ModRemovePost::create(&conn, &mod_remove_post_form).unwrap();
+ let read_mod_remove_post = ModRemovePost::read(&conn, inserted_mod_remove_post.id).unwrap();
+ let expected_mod_remove_post = ModRemovePost {
+ id: inserted_mod_remove_post.id,
+ post_id: inserted_post.id,
+ mod_user_id: inserted_mod.id,
+ reason: None,
+ removed: Some(true),
+ when_: inserted_mod_remove_post.when_,
+ };
+
+ // lock post
+
+ let mod_lock_post_form = ModLockPostForm {
+ mod_user_id: inserted_mod.id,
+ post_id: inserted_post.id,
+ locked: None,
+ };
+ let inserted_mod_lock_post = ModLockPost::create(&conn, &mod_lock_post_form).unwrap();
+ let read_mod_lock_post = ModLockPost::read(&conn, inserted_mod_lock_post.id).unwrap();
+ let expected_mod_lock_post = ModLockPost {
+ id: inserted_mod_lock_post.id,
+ post_id: inserted_post.id,
+ mod_user_id: inserted_mod.id,
+ locked: Some(true),
+ when_: inserted_mod_lock_post.when_,
+ };
+
+ // sticky post
+
+ let mod_sticky_post_form = ModStickyPostForm {
+ mod_user_id: inserted_mod.id,
+ post_id: inserted_post.id,
+ stickied: None,
+ };
+ let inserted_mod_sticky_post = ModStickyPost::create(&conn, &mod_sticky_post_form).unwrap();
+ let read_mod_sticky_post = ModStickyPost::read(&conn, inserted_mod_sticky_post.id).unwrap();
+ let expected_mod_sticky_post = ModStickyPost {
+ id: inserted_mod_sticky_post.id,
+ post_id: inserted_post.id,
+ mod_user_id: inserted_mod.id,
+ stickied: Some(true),
+ when_: inserted_mod_sticky_post.when_,
+ };
+
+ // comment
+
+ let mod_remove_comment_form = ModRemoveCommentForm {
+ mod_user_id: inserted_mod.id,
+ comment_id: inserted_comment.id,
+ reason: None,
+ removed: None,
+ };
+ let inserted_mod_remove_comment =
+ ModRemoveComment::create(&conn, &mod_remove_comment_form).unwrap();
+ let read_mod_remove_comment =
+ ModRemoveComment::read(&conn, inserted_mod_remove_comment.id).unwrap();
+ let expected_mod_remove_comment = ModRemoveComment {
+ id: inserted_mod_remove_comment.id,
+ comment_id: inserted_comment.id,
+ mod_user_id: inserted_mod.id,
+ reason: None,
+ removed: Some(true),
+ when_: inserted_mod_remove_comment.when_,
+ };
+
+ // community
+
+ let mod_remove_community_form = ModRemoveCommunityForm {
+ mod_user_id: inserted_mod.id,
+ community_id: inserted_community.id,
+ reason: None,
+ removed: None,
+ expires: None,
+ };
+ let inserted_mod_remove_community =
+ ModRemoveCommunity::create(&conn, &mod_remove_community_form).unwrap();
+ let read_mod_remove_community =
+ ModRemoveCommunity::read(&conn, inserted_mod_remove_community.id).unwrap();
+ let expected_mod_remove_community = ModRemoveCommunity {
+ id: inserted_mod_remove_community.id,
+ community_id: inserted_community.id,
+ mod_user_id: inserted_mod.id,
+ reason: None,
+ removed: Some(true),
+ expires: None,
+ when_: inserted_mod_remove_community.when_,
+ };
+
+ // ban from community
+
+ let mod_ban_from_community_form = ModBanFromCommunityForm {
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ community_id: inserted_community.id,
+ reason: None,
+ banned: None,
+ expires: None,
+ };
+ let inserted_mod_ban_from_community =
+ ModBanFromCommunity::create(&conn, &mod_ban_from_community_form).unwrap();
+ let read_mod_ban_from_community =
+ ModBanFromCommunity::read(&conn, inserted_mod_ban_from_community.id).unwrap();
+ let expected_mod_ban_from_community = ModBanFromCommunity {
+ id: inserted_mod_ban_from_community.id,
+ community_id: inserted_community.id,
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ reason: None,
+ banned: Some(true),
+ expires: None,
+ when_: inserted_mod_ban_from_community.when_,
+ };
+
+ // ban
+
+ let mod_ban_form = ModBanForm {
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ reason: None,
+ banned: None,
+ expires: None,
+ };
+ let inserted_mod_ban = ModBan::create(&conn, &mod_ban_form).unwrap();
+ let read_mod_ban = ModBan::read(&conn, inserted_mod_ban.id).unwrap();
+ let expected_mod_ban = ModBan {
+ id: inserted_mod_ban.id,
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ reason: None,
+ banned: Some(true),
+ expires: None,
+ when_: inserted_mod_ban.when_,
+ };
+
+ // mod add community
+
+ let mod_add_community_form = ModAddCommunityForm {
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ community_id: inserted_community.id,
+ removed: None,
+ };
+ let inserted_mod_add_community =
+ ModAddCommunity::create(&conn, &mod_add_community_form).unwrap();
+ let read_mod_add_community =
+ ModAddCommunity::read(&conn, inserted_mod_add_community.id).unwrap();
+ let expected_mod_add_community = ModAddCommunity {
+ id: inserted_mod_add_community.id,
+ community_id: inserted_community.id,
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ removed: Some(false),
+ when_: inserted_mod_add_community.when_,
+ };
+
+ // mod add
+
+ let mod_add_form = ModAddForm {
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ removed: None,
+ };
+ let inserted_mod_add = ModAdd::create(&conn, &mod_add_form).unwrap();
+ let read_mod_add = ModAdd::read(&conn, inserted_mod_add.id).unwrap();
+ let expected_mod_add = ModAdd {
+ id: inserted_mod_add.id,
+ mod_user_id: inserted_mod.id,
+ other_user_id: inserted_user.id,
+ removed: Some(false),
+ when_: inserted_mod_add.when_,
+ };
+
+ ModRemovePost::delete(&conn, inserted_mod_remove_post.id).unwrap();
+ ModLockPost::delete(&conn, inserted_mod_lock_post.id).unwrap();
+ ModStickyPost::delete(&conn, inserted_mod_sticky_post.id).unwrap();
+ ModRemoveComment::delete(&conn, inserted_mod_remove_comment.id).unwrap();
+ ModRemoveCommunity::delete(&conn, inserted_mod_remove_community.id).unwrap();
+ ModBanFromCommunity::delete(&conn, inserted_mod_ban_from_community.id).unwrap();
+ ModBan::delete(&conn, inserted_mod_ban.id).unwrap();
+ ModAddCommunity::delete(&conn, inserted_mod_add_community.id).unwrap();
+ ModAdd::delete(&conn, inserted_mod_add.id).unwrap();
+
+ Comment::delete(&conn, inserted_comment.id).unwrap();
+ Post::delete(&conn, inserted_post.id).unwrap();
+ Community::delete(&conn, inserted_community.id).unwrap();
+ User_::delete(&conn, inserted_user.id).unwrap();
+ User_::delete(&conn, inserted_mod.id).unwrap();
+
+ assert_eq!(expected_mod_remove_post, read_mod_remove_post);
+ assert_eq!(expected_mod_lock_post, read_mod_lock_post);
+ assert_eq!(expected_mod_sticky_post, read_mod_sticky_post);
+ assert_eq!(expected_mod_remove_comment, read_mod_remove_comment);
+ assert_eq!(expected_mod_remove_community, read_mod_remove_community);
+ assert_eq!(expected_mod_ban_from_community, read_mod_ban_from_community);
+ assert_eq!(expected_mod_ban, read_mod_ban);
+ assert_eq!(expected_mod_add_community, read_mod_add_community);
+ assert_eq!(expected_mod_add, read_mod_add);
+ }
+}