ObjectValidation tests: Extract announce validation tests.
authorlain <lain@soykaf.club>
Mon, 6 Jul 2020 13:11:49 +0000 (15:11 +0200)
committerlain <lain@soykaf.club>
Mon, 6 Jul 2020 13:11:49 +0000 (15:11 +0200)
test/web/activity_pub/object_validator_test.exs
test/web/activity_pub/object_validators/announce_validation_test.exs [new file with mode: 0644]

index d41d9d73eaff4f5650dc0f9858bfbca9da617eff..cb365e40977f42dc65ea0257af67913c2be18a16 100644 (file)
 defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do
   use Pleroma.DataCase
 
-  alias Pleroma.Object
   alias Pleroma.Web.ActivityPub.Builder
   alias Pleroma.Web.ActivityPub.ObjectValidator
-  alias Pleroma.Web.CommonAPI
 
   import Pleroma.Factory
 
-  describe "announces" do
-    setup do
-      user = insert(:user)
-      announcer = insert(:user)
-      {:ok, post_activity} = CommonAPI.post(user, %{status: "uguu"})
-
-      object = Object.normalize(post_activity, false)
-      {:ok, valid_announce, []} = Builder.announce(announcer, object)
-
-      %{
-        valid_announce: valid_announce,
-        user: user,
-        post_activity: post_activity,
-        announcer: announcer
-      }
-    end
-
-    test "returns ok for a valid announce", %{valid_announce: valid_announce} do
-      assert {:ok, _object, _meta} = ObjectValidator.validate(valid_announce, [])
-    end
-
-    test "returns an error if the object can't be found", %{valid_announce: valid_announce} do
-      without_object =
-        valid_announce
-        |> Map.delete("object")
-
-      {:error, cng} = ObjectValidator.validate(without_object, [])
-
-      assert {:object, {"can't be blank", [validation: :required]}} in cng.errors
-
-      nonexisting_object =
-        valid_announce
-        |> Map.put("object", "https://gensokyo.2hu/objects/99999999")
-
-      {:error, cng} = ObjectValidator.validate(nonexisting_object, [])
-
-      assert {:object, {"can't find object", []}} in cng.errors
-    end
-
-    test "returns an error if we don't have the actor", %{valid_announce: valid_announce} do
-      nonexisting_actor =
-        valid_announce
-        |> Map.put("actor", "https://gensokyo.2hu/users/raymoo")
-
-      {:error, cng} = ObjectValidator.validate(nonexisting_actor, [])
-
-      assert {:actor, {"can't find user", []}} in cng.errors
-    end
-
-    test "returns an error if the actor already announced the object", %{
-      valid_announce: valid_announce,
-      announcer: announcer,
-      post_activity: post_activity
-    } do
-      _announce = CommonAPI.repeat(post_activity.id, announcer)
-
-      {:error, cng} = ObjectValidator.validate(valid_announce, [])
-
-      assert {:actor, {"already announced this object", []}} in cng.errors
-      assert {:object, {"already announced by this actor", []}} in cng.errors
-    end
-
-    test "returns an error if the actor can't announce the object", %{
-      announcer: announcer,
-      user: user
-    } do
-      {:ok, post_activity} =
-        CommonAPI.post(user, %{status: "a secret post", visibility: "private"})
-
-      object = Object.normalize(post_activity, false)
-
-      # Another user can't announce it
-      {:ok, announce, []} = Builder.announce(announcer, object, public: false)
-
-      {:error, cng} = ObjectValidator.validate(announce, [])
-
-      assert {:actor, {"can not announce this object", []}} in cng.errors
-
-      # The actor of the object can announce it
-      {:ok, announce, []} = Builder.announce(user, object, public: false)
-
-      assert {:ok, _, _} = ObjectValidator.validate(announce, [])
-
-      # The actor of the object can not announce it publicly
-      {:ok, announce, []} = Builder.announce(user, object, public: true)
-
-      {:error, cng} = ObjectValidator.validate(announce, [])
-
-      assert {:actor, {"can not announce this object publicly", []}} in cng.errors
-    end
-  end
-
   describe "updates" do
     setup do
       user = insert(:user)
diff --git a/test/web/activity_pub/object_validators/announce_validation_test.exs b/test/web/activity_pub/object_validators/announce_validation_test.exs
new file mode 100644 (file)
index 0000000..623342f
--- /dev/null
@@ -0,0 +1,106 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnouncValidationTest do
+  use Pleroma.DataCase
+
+  alias Pleroma.Object
+  alias Pleroma.Web.ActivityPub.Builder
+  alias Pleroma.Web.ActivityPub.ObjectValidator
+  alias Pleroma.Web.CommonAPI
+
+  import Pleroma.Factory
+
+  describe "announces" do
+    setup do
+      user = insert(:user)
+      announcer = insert(:user)
+      {:ok, post_activity} = CommonAPI.post(user, %{status: "uguu"})
+
+      object = Object.normalize(post_activity, false)
+      {:ok, valid_announce, []} = Builder.announce(announcer, object)
+
+      %{
+        valid_announce: valid_announce,
+        user: user,
+        post_activity: post_activity,
+        announcer: announcer
+      }
+    end
+
+    test "returns ok for a valid announce", %{valid_announce: valid_announce} do
+      assert {:ok, _object, _meta} = ObjectValidator.validate(valid_announce, [])
+    end
+
+    test "returns an error if the object can't be found", %{valid_announce: valid_announce} do
+      without_object =
+        valid_announce
+        |> Map.delete("object")
+
+      {:error, cng} = ObjectValidator.validate(without_object, [])
+
+      assert {:object, {"can't be blank", [validation: :required]}} in cng.errors
+
+      nonexisting_object =
+        valid_announce
+        |> Map.put("object", "https://gensokyo.2hu/objects/99999999")
+
+      {:error, cng} = ObjectValidator.validate(nonexisting_object, [])
+
+      assert {:object, {"can't find object", []}} in cng.errors
+    end
+
+    test "returns an error if we don't have the actor", %{valid_announce: valid_announce} do
+      nonexisting_actor =
+        valid_announce
+        |> Map.put("actor", "https://gensokyo.2hu/users/raymoo")
+
+      {:error, cng} = ObjectValidator.validate(nonexisting_actor, [])
+
+      assert {:actor, {"can't find user", []}} in cng.errors
+    end
+
+    test "returns an error if the actor already announced the object", %{
+      valid_announce: valid_announce,
+      announcer: announcer,
+      post_activity: post_activity
+    } do
+      _announce = CommonAPI.repeat(post_activity.id, announcer)
+
+      {:error, cng} = ObjectValidator.validate(valid_announce, [])
+
+      assert {:actor, {"already announced this object", []}} in cng.errors
+      assert {:object, {"already announced by this actor", []}} in cng.errors
+    end
+
+    test "returns an error if the actor can't announce the object", %{
+      announcer: announcer,
+      user: user
+    } do
+      {:ok, post_activity} =
+        CommonAPI.post(user, %{status: "a secret post", visibility: "private"})
+
+      object = Object.normalize(post_activity, false)
+
+      # Another user can't announce it
+      {:ok, announce, []} = Builder.announce(announcer, object, public: false)
+
+      {:error, cng} = ObjectValidator.validate(announce, [])
+
+      assert {:actor, {"can not announce this object", []}} in cng.errors
+
+      # The actor of the object can announce it
+      {:ok, announce, []} = Builder.announce(user, object, public: false)
+
+      assert {:ok, _, _} = ObjectValidator.validate(announce, [])
+
+      # The actor of the object can not announce it publicly
+      {:ok, announce, []} = Builder.announce(user, object, public: true)
+
+      {:error, cng} = ObjectValidator.validate(announce, [])
+
+      assert {:actor, {"can not announce this object publicly", []}} in cng.errors
+    end
+  end
+end