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

index 699cb8bf84ec7abea77d22d85f7a71e9d6250dbe..2b5d6e9fef1b2f1c420154c37b86b4987a213dfd 100644 (file)
@@ -8,8 +8,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do
   alias Pleroma.Object
   alias Pleroma.Web.ActivityPub.Builder
   alias Pleroma.Web.ActivityPub.ObjectValidator
-  alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator
-  alias Pleroma.Web.ActivityPub.Utils
   alias Pleroma.Web.CommonAPI
 
   import Pleroma.Factory
@@ -54,105 +52,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do
     end
   end
 
-  describe "likes" do
-    setup do
-      user = insert(:user)
-      {:ok, post_activity} = CommonAPI.post(user, %{status: "uguu"})
-
-      valid_like = %{
-        "to" => [user.ap_id],
-        "cc" => [],
-        "type" => "Like",
-        "id" => Utils.generate_activity_id(),
-        "object" => post_activity.data["object"],
-        "actor" => user.ap_id,
-        "context" => "a context"
-      }
-
-      %{valid_like: valid_like, user: user, post_activity: post_activity}
-    end
-
-    test "returns ok when called in the ObjectValidator", %{valid_like: valid_like} do
-      {:ok, object, _meta} = ObjectValidator.validate(valid_like, [])
-
-      assert "id" in Map.keys(object)
-    end
-
-    test "is valid for a valid object", %{valid_like: valid_like} do
-      assert LikeValidator.cast_and_validate(valid_like).valid?
-    end
-
-    test "sets the 'to' field to the object actor if no recipients are given", %{
-      valid_like: valid_like,
-      user: user
-    } do
-      without_recipients =
-        valid_like
-        |> Map.delete("to")
-
-      {:ok, object, _meta} = ObjectValidator.validate(without_recipients, [])
-
-      assert object["to"] == [user.ap_id]
-    end
-
-    test "sets the context field to the context of the object if no context is given", %{
-      valid_like: valid_like,
-      post_activity: post_activity
-    } do
-      without_context =
-        valid_like
-        |> Map.delete("context")
-
-      {:ok, object, _meta} = ObjectValidator.validate(without_context, [])
-
-      assert object["context"] == post_activity.data["context"]
-    end
-
-    test "it errors when the actor is missing or not known", %{valid_like: valid_like} do
-      without_actor = Map.delete(valid_like, "actor")
-
-      refute LikeValidator.cast_and_validate(without_actor).valid?
-
-      with_invalid_actor = Map.put(valid_like, "actor", "invalidactor")
-
-      refute LikeValidator.cast_and_validate(with_invalid_actor).valid?
-    end
-
-    test "it errors when the object is missing or not known", %{valid_like: valid_like} do
-      without_object = Map.delete(valid_like, "object")
-
-      refute LikeValidator.cast_and_validate(without_object).valid?
-
-      with_invalid_object = Map.put(valid_like, "object", "invalidobject")
-
-      refute LikeValidator.cast_and_validate(with_invalid_object).valid?
-    end
-
-    test "it errors when the actor has already like the object", %{
-      valid_like: valid_like,
-      user: user,
-      post_activity: post_activity
-    } do
-      _like = CommonAPI.favorite(user, post_activity.id)
-
-      refute LikeValidator.cast_and_validate(valid_like).valid?
-    end
-
-    test "it works when actor or object are wrapped in maps", %{valid_like: valid_like} do
-      wrapped_like =
-        valid_like
-        |> Map.put("actor", %{"id" => valid_like["actor"]})
-        |> Map.put("object", %{"id" => valid_like["object"]})
-
-      validated = LikeValidator.cast_and_validate(wrapped_like)
-
-      assert validated.valid?
-
-      assert {:actor, valid_like["actor"]} in validated.changes
-      assert {:object, valid_like["object"]} in validated.changes
-    end
-  end
-
   describe "announces" do
     setup do
       user = insert(:user)
diff --git a/test/web/activity_pub/object_validators/like_validation_test.exs b/test/web/activity_pub/object_validators/like_validation_test.exs
new file mode 100644 (file)
index 0000000..2c033b7
--- /dev/null
@@ -0,0 +1,113 @@
+# 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.LikeValidationTest do
+  use Pleroma.DataCase
+
+  alias Pleroma.Web.ActivityPub.ObjectValidator
+  alias Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator
+  alias Pleroma.Web.ActivityPub.Utils
+  alias Pleroma.Web.CommonAPI
+
+  import Pleroma.Factory
+
+  describe "likes" do
+    setup do
+      user = insert(:user)
+      {:ok, post_activity} = CommonAPI.post(user, %{status: "uguu"})
+
+      valid_like = %{
+        "to" => [user.ap_id],
+        "cc" => [],
+        "type" => "Like",
+        "id" => Utils.generate_activity_id(),
+        "object" => post_activity.data["object"],
+        "actor" => user.ap_id,
+        "context" => "a context"
+      }
+
+      %{valid_like: valid_like, user: user, post_activity: post_activity}
+    end
+
+    test "returns ok when called in the ObjectValidator", %{valid_like: valid_like} do
+      {:ok, object, _meta} = ObjectValidator.validate(valid_like, [])
+
+      assert "id" in Map.keys(object)
+    end
+
+    test "is valid for a valid object", %{valid_like: valid_like} do
+      assert LikeValidator.cast_and_validate(valid_like).valid?
+    end
+
+    test "sets the 'to' field to the object actor if no recipients are given", %{
+      valid_like: valid_like,
+      user: user
+    } do
+      without_recipients =
+        valid_like
+        |> Map.delete("to")
+
+      {:ok, object, _meta} = ObjectValidator.validate(without_recipients, [])
+
+      assert object["to"] == [user.ap_id]
+    end
+
+    test "sets the context field to the context of the object if no context is given", %{
+      valid_like: valid_like,
+      post_activity: post_activity
+    } do
+      without_context =
+        valid_like
+        |> Map.delete("context")
+
+      {:ok, object, _meta} = ObjectValidator.validate(without_context, [])
+
+      assert object["context"] == post_activity.data["context"]
+    end
+
+    test "it errors when the actor is missing or not known", %{valid_like: valid_like} do
+      without_actor = Map.delete(valid_like, "actor")
+
+      refute LikeValidator.cast_and_validate(without_actor).valid?
+
+      with_invalid_actor = Map.put(valid_like, "actor", "invalidactor")
+
+      refute LikeValidator.cast_and_validate(with_invalid_actor).valid?
+    end
+
+    test "it errors when the object is missing or not known", %{valid_like: valid_like} do
+      without_object = Map.delete(valid_like, "object")
+
+      refute LikeValidator.cast_and_validate(without_object).valid?
+
+      with_invalid_object = Map.put(valid_like, "object", "invalidobject")
+
+      refute LikeValidator.cast_and_validate(with_invalid_object).valid?
+    end
+
+    test "it errors when the actor has already like the object", %{
+      valid_like: valid_like,
+      user: user,
+      post_activity: post_activity
+    } do
+      _like = CommonAPI.favorite(user, post_activity.id)
+
+      refute LikeValidator.cast_and_validate(valid_like).valid?
+    end
+
+    test "it works when actor or object are wrapped in maps", %{valid_like: valid_like} do
+      wrapped_like =
+        valid_like
+        |> Map.put("actor", %{"id" => valid_like["actor"]})
+        |> Map.put("object", %{"id" => valid_like["object"]})
+
+      validated = LikeValidator.cast_and_validate(wrapped_like)
+
+      assert validated.valid?
+
+      assert {:actor, valid_like["actor"]} in validated.changes
+      assert {:object, valid_like["object"]} in validated.changes
+    end
+  end
+end