Merge branch 'bugfix/no-cc-mentions' into 'develop'
[akkoma] / test / notification_test.exs
index 79290ac78211f0df4e27de8be1c1647771162415..a36ed5bb8471815a3c5a2ca639b2a38eaaacf79e 100644 (file)
@@ -3,6 +3,7 @@ defmodule Pleroma.NotificationTest do
   alias Pleroma.Web.TwitterAPI.TwitterAPI
   alias Pleroma.Web.CommonAPI
   alias Pleroma.{User, Notification}
+  alias Pleroma.Web.ActivityPub.Transmogrifier
   import Pleroma.Factory
 
   describe "create_notifications" do
@@ -156,6 +157,100 @@ defmodule Pleroma.NotificationTest do
     end
   end
 
+  describe "notification target determination" do
+    test "it sends notifications to addressed users in new messages" do
+      user = insert(:user)
+      other_user = insert(:user)
+
+      {:ok, activity} =
+        CommonAPI.post(user, %{
+          "status" => "hey @#{other_user.nickname}!"
+        })
+
+      assert other_user in Notification.get_notified_from_activity(activity)
+    end
+
+    test "it sends notifications to mentioned users in new messages" do
+      user = insert(:user)
+      other_user = insert(:user)
+
+      create_activity = %{
+        "@context" => "https://www.w3.org/ns/activitystreams",
+        "type" => "Create",
+        "to" => ["https://www.w3.org/ns/activitystreams#Public"],
+        "actor" => user.ap_id,
+        "object" => %{
+          "type" => "Note",
+          "content" => "message with a Mention tag, but no explicit tagging",
+          "tag" => [
+            %{
+              "type" => "Mention",
+              "href" => other_user.ap_id,
+              "name" => other_user.nickname
+            }
+          ],
+          "attributedTo" => user.ap_id
+        }
+      }
+
+      {:ok, activity} = Transmogrifier.handle_incoming(create_activity)
+
+      assert other_user in Notification.get_notified_from_activity(activity)
+    end
+
+    test "it does not send notifications to users who are only cc in new messages" do
+      user = insert(:user)
+      other_user = insert(:user)
+
+      create_activity = %{
+        "@context" => "https://www.w3.org/ns/activitystreams",
+        "type" => "Create",
+        "to" => ["https://www.w3.org/ns/activitystreams#Public"],
+        "cc" => [other_user.ap_id],
+        "actor" => user.ap_id,
+        "object" => %{
+          "type" => "Note",
+          "content" => "hi everyone",
+          "attributedTo" => user.ap_id
+        }
+      }
+
+      {:ok, activity} = Transmogrifier.handle_incoming(create_activity)
+
+      assert other_user not in Notification.get_notified_from_activity(activity)
+    end
+
+    test "it does not send notification to mentioned users in likes" do
+      user = insert(:user)
+      other_user = insert(:user)
+      third_user = insert(:user)
+
+      {:ok, activity_one} =
+        CommonAPI.post(user, %{
+          "status" => "hey @#{other_user.nickname}!"
+        })
+
+      {:ok, activity_two, _} = CommonAPI.favorite(activity_one.id, third_user)
+
+      assert other_user not in Notification.get_notified_from_activity(activity_two)
+    end
+
+    test "it does not send notification to mentioned users in announces" do
+      user = insert(:user)
+      other_user = insert(:user)
+      third_user = insert(:user)
+
+      {:ok, activity_one} =
+        CommonAPI.post(user, %{
+          "status" => "hey @#{other_user.nickname}!"
+        })
+
+      {:ok, activity_two, _} = CommonAPI.repeat(activity_one.id, third_user)
+
+      assert other_user not in Notification.get_notified_from_activity(activity_two)
+    end
+  end
+
   describe "notification lifecycle" do
     test "liking an activity results in 1 notification, then 0 if the activity is deleted" do
       user = insert(:user)