Fix unit tests
authorFelix Ableitner <me@nutomic.com>
Tue, 10 Nov 2020 16:11:08 +0000 (17:11 +0100)
committerFelix Ableitner <me@nutomic.com>
Wed, 11 Nov 2020 16:28:30 +0000 (17:28 +0100)
17 files changed:
Cargo.lock
Cargo.toml
lemmy_apub/src/http/mod.rs
lemmy_db/src/activity.rs
lemmy_db/src/comment.rs
lemmy_db/src/comment_view.rs
lemmy_db/src/community.rs
lemmy_db/src/moderator.rs
lemmy_db/src/password_reset_request.rs
lemmy_db/src/post.rs
lemmy_db/src/post_view.rs
lemmy_db/src/private_message.rs
lemmy_db/src/schema.rs
lemmy_db/src/user.rs
lemmy_db/src/user_mention.rs
test.sh
tests/integration_test.rs

index 27d585cf2cfcf9be2f9616ac6acd0c9c8a63bb6c..c5f9847837f4280bc0345e97c559f6c0f4a079da 100644 (file)
@@ -1852,8 +1852,10 @@ dependencies = [
 name = "lemmy_server"
 version = "0.0.1"
 dependencies = [
+ "activitystreams",
  "actix",
  "actix-files",
+ "actix-rt",
  "actix-web",
  "actix-web-actors",
  "anyhow",
@@ -1877,6 +1879,7 @@ dependencies = [
  "reqwest",
  "rss",
  "serde 1.0.117",
+ "serde_json",
  "sha2",
  "strum",
  "tokio 0.3.1",
index 055dac505a58640290c64c8b3c1fd5142f83bb6e..99d755cc0b2a2b3532778acb9531c3d98983b6f1 100644 (file)
@@ -46,6 +46,9 @@ tokio = "0.3"
 sha2 = "0.9"
 anyhow = "1.0"
 reqwest = { version = "0.10", features = ["json"] }
+activitystreams = "0.7.0-alpha.4"
+actix-rt = { version = "1.1", default-features = false }
+serde_json = { version = "1.0", features = ["preserve_order"]}
 
 [dev-dependencies.cargo-husky]
 version = "1"
index 91af36b2dd315a4d9028371d3f37ea75f734fe81..4f31f6a5e768aee9e8c92d5db65e7593e984f321 100644 (file)
@@ -54,7 +54,8 @@ pub async fn get_activity(
   })
   .await??;
 
-  if !activity.local || activity.sensitive {
+  let sensitive = activity.sensitive.unwrap_or(true);
+  if !activity.local || sensitive {
     Ok(HttpResponse::NotFound().finish())
   } else {
     Ok(create_apub_response(&activity.data))
index b0ec1df69a22af2b30e0450ebd67aa27bfc9ebe4..190dd411c5c37e60fabd7b082131335e506d9fb2 100644 (file)
@@ -12,22 +12,22 @@ use std::{
 #[table_name = "activity"]
 pub struct Activity {
   pub id: i32,
-  pub ap_id: String,
   pub data: Value,
   pub local: bool,
-  pub sensitive: bool,
   pub published: chrono::NaiveDateTime,
   pub updated: Option<chrono::NaiveDateTime>,
+  pub ap_id: Option<String>,
+  pub sensitive: Option<bool>,
 }
 
 #[derive(Insertable, AsChangeset)]
 #[table_name = "activity"]
 pub struct ActivityForm {
-  pub ap_id: String,
   pub data: Value,
   pub local: bool,
-  pub sensitive: bool,
   pub updated: Option<chrono::NaiveDateTime>,
+  pub ap_id: String,
+  pub sensitive: bool,
 }
 
 impl Crud<ActivityForm> for Activity {
@@ -53,6 +53,10 @@ impl Crud<ActivityForm> for Activity {
       .set(new_activity)
       .get_result::<Self>(conn)
   }
+  fn delete(conn: &PgConnection, activity_id: i32) -> Result<usize, Error> {
+    use crate::schema::activity::dsl::*;
+    diesel::delete(activity.find(activity_id)).execute(conn)
+  }
 }
 
 impl Activity {
@@ -115,7 +119,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
@@ -162,11 +166,11 @@ mod tests {
     let inserted_activity = Activity::create(&conn, &activity_form).unwrap();
 
     let expected_activity = Activity {
-      ap_id: ap_id.to_string(),
+      ap_id: Some(ap_id.to_string()),
       id: inserted_activity.id,
       data: test_json,
       local: true,
-      sensitive: false,
+      sensitive: Some(false),
       published: inserted_activity.published,
       updated: None,
     };
@@ -174,6 +178,7 @@ mod tests {
     let read_activity = Activity::read(&conn, inserted_activity.id).unwrap();
     let read_activity_by_apub_id = Activity::read_from_apub_id(&conn, ap_id).unwrap();
     User_::delete(&conn, inserted_creator.id).unwrap();
+    Activity::delete(&conn, inserted_activity.id).unwrap();
 
     assert_eq!(expected_activity, read_activity);
     assert_eq!(expected_activity, read_activity_by_apub_id);
index 02c84187e554788fe056f40f02d78afc2d9add03..9b0928257a34e86fa4585c4ec647a605efdc4018 100644 (file)
@@ -280,7 +280,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
index 568083ce911c6f7e6f11e8d1c74f82fb59e232ab..e1299cb14560e301b56df9662e99945e7bbddec8 100644 (file)
@@ -519,7 +519,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
index 4a11557c0687bf6f9079462e1704ce2d3418a243..3473f25c7dbea3d369472416e2b015be94f30d9c 100644 (file)
@@ -275,8 +275,8 @@ pub struct CommunityFollower {
   pub id: i32,
   pub community_id: i32,
   pub user_id: i32,
-  pub pending: bool,
   pub published: chrono::NaiveDateTime,
+  pub pending: Option<bool>,
 }
 
 #[derive(Insertable, AsChangeset, Clone)]
@@ -341,7 +341,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
@@ -407,6 +407,7 @@ mod tests {
     let community_follower_form = CommunityFollowerForm {
       community_id: inserted_community.id,
       user_id: inserted_user.id,
+      pending: false,
     };
 
     let inserted_community_follower =
@@ -416,6 +417,7 @@ mod tests {
       id: inserted_community_follower.id,
       community_id: inserted_community.id,
       user_id: inserted_user.id,
+      pending: Some(false),
       published: inserted_community_follower.published,
     };
 
index fb74def08f7406f669938b7c41600c693e251e73..c0c0ff1067b3858153261f2edd2e08d97dd014ba 100644 (file)
@@ -416,7 +416,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
@@ -445,7 +445,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
index 20db73ec5ecf46b8213e71f194742f193bb33d56..8ae18cbd4fd18e796be459fa72ae175a31aa6d20 100644 (file)
@@ -100,7 +100,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
index 41401431befe59b795b90db0adc14ef8d31baed8..787d5e6c418a08148fc124422e95890c3817c1d1 100644 (file)
@@ -349,7 +349,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
index 15652477e2eae57673257d8fa6b81a8837022398..38d9a0211cc3a38b799ef0d42f0a7714dbd2cad0 100644 (file)
@@ -416,7 +416,7 @@ mod tests {
       published: None,
       updated: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       show_nsfw: false,
       theme: "browser".into(),
       default_sort_type: SortType::Hot as i16,
index 4775ceba2f0d27b6dcfd48b2e10761ebb7f6f3dc..503a26abf748d799a4f9d38f64768bf2f36e3fa2 100644 (file)
@@ -157,7 +157,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
@@ -186,7 +186,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
index 7eeea9686806412e94fde86561e0b59171758612..65838b1a8c449064b99c1f13e77e1e22d2bb95ff 100644 (file)
@@ -1,12 +1,12 @@
 table! {
     activity (id) {
         id -> Int4,
-        ap_id -> Text,
         data -> Jsonb,
         local -> Bool,
-        sensitive -> Bool,
         published -> Timestamp,
         updated -> Nullable<Timestamp>,
+        ap_id -> Nullable<Text>,
+        sensitive -> Nullable<Bool>,
     }
 }
 
@@ -149,8 +149,8 @@ table! {
         id -> Int4,
         community_id -> Int4,
         user_id -> Int4,
-        pending -> Bool,
         published -> Timestamp,
+        pending -> Nullable<Bool>,
     }
 }
 
index 8dc613bb3fbb6b66910fe8a57f0c8869bc45e71b..378bbad9c77db4272fc32c51112cc753d3558f8b 100644 (file)
@@ -196,7 +196,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
index 79f93801a7af4aea6461bd26ef2b67f5aa438fc9..68f566332dd8969f30c7fb141dc24eb10644bbed 100644 (file)
@@ -96,7 +96,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
@@ -125,7 +125,7 @@ mod tests {
       avatar: None,
       banner: None,
       admin: false,
-      banned: false,
+      banned: Some(false),
       published: None,
       updated: None,
       show_nsfw: false,
diff --git a/test.sh b/test.sh
index beb499bdffb2a68b2755356b79082cb860715b39..02e4faeed8571f68ffb09995a5cd1058ecf2a1d1 100755 (executable)
--- a/test.sh
+++ b/test.sh
@@ -2,4 +2,7 @@
 export DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
 diesel migration run
 export LEMMY_DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
-RUST_TEST_THREADS=1 cargo test --workspace --no-fail-fast
+# Integration tests only work on stable due to a bug in config-rs
+# https://github.com/mehcode/config-rs/issues/158
+RUST_BACKTRACE=1 RUST_TEST_THREADS=1 \
+  cargo +stable test --workspace --no-fail-fast
index f7b32151e5ad8fbf0280c51f7be15c41a7d2cd2e..2a79dd4b527bfb2363e7f33412cd1abca018b6f5 100644 (file)
@@ -16,6 +16,18 @@ use diesel::{
   PgConnection,
 };
 use http_signature_normalization_actix::PrepareVerifyError;
+use lemmy_api::match_websocket_operation;
+use lemmy_apub::{
+  activity_queue::create_activity_queue,
+  inbox::{
+    community_inbox,
+    community_inbox::community_inbox,
+    shared_inbox,
+    shared_inbox::shared_inbox,
+    user_inbox,
+    user_inbox::user_inbox,
+  },
+};
 use lemmy_db::{
   community::{Community, CommunityForm},
   user::{User_, *},
@@ -24,22 +36,8 @@ use lemmy_db::{
   SortType,
 };
 use lemmy_rate_limit::{rate_limiter::RateLimiter, RateLimit};
-use lemmy_server::{
-  apub::{
-    activity_queue::create_activity_queue,
-    inbox::{
-      community_inbox,
-      community_inbox::community_inbox,
-      shared_inbox,
-      shared_inbox::shared_inbox,
-      user_inbox,
-      user_inbox::user_inbox,
-    },
-  },
-  websocket::chat_server::ChatServer,
-  LemmyContext,
-};
 use lemmy_utils::{apub::generate_actor_keypair, settings::Settings};
+use lemmy_websocket::{chat_server::ChatServer, LemmyContext};
 use reqwest::Client;
 use serde::{Deserialize, Serialize};
 use std::sync::Arc;
@@ -61,11 +59,12 @@ fn create_context() -> LemmyContext {
   let chat_server = ChatServer::startup(
     pool.clone(),
     rate_limiter.clone(),
+    |c, i, o, d| Box::pin(match_websocket_operation(c, i, o, d)),
     Client::default(),
     activity_queue.clone(),
   )
   .start();
-  LemmyContext::new(
+  LemmyContext::create(
     pool,
     chat_server,
     Client::default(),
@@ -84,7 +83,7 @@ fn create_user(conn: &PgConnection, name: &str) -> User_ {
     avatar: None,
     banner: None,
     admin: false,
-    banned: false,
+    banned: Some(false),
     updated: None,
     published: None,
     show_nsfw: false,
@@ -177,7 +176,7 @@ async fn test_user_inbox_expired_signature() {
   let connection = &context.pool().get().unwrap();
   let user = create_user(connection, "user_inbox_cgsax");
   let activity =
-    create_activity::<CreateType, ActorAndObject<user_inbox::ValidTypes>>(user.actor_id);
+    create_activity::<CreateType, ActorAndObject<user_inbox::UserValidTypes>>(user.actor_id);
   let path = Path::<String> {
     0: "username".to_string(),
   };
@@ -196,8 +195,9 @@ async fn test_community_inbox_expired_signature() {
   let user = create_user(connection, "community_inbox_hrxa");
   let community = create_community(connection, user.id);
   let request = create_http_request();
-  let activity =
-    create_activity::<FollowType, ActorAndObject<community_inbox::ValidTypes>>(user.actor_id);
+  let activity = create_activity::<FollowType, ActorAndObject<community_inbox::CommunityValidTypes>>(
+    user.actor_id,
+  );
   let path = Path::<String> { 0: community.name };
   let response = community_inbox(request, activity, path, web::Data::new(context)).await;
   assert_eq!(