Merge remote-tracking branch 'origin/develop' into reactions
[akkoma] / test / web / activity_pub / views / user_view_test.exs
index a2aa5238126ba2bc519092d000be941f23aa52c0..3155749aac87c9f21504b80763e89675a987e951 100644 (file)
@@ -24,19 +24,30 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do
 
   test "Renders profile fields" do
     fields = [
-      %{"name" => "foo", "value" => "bar"},
-      %{"name" => "website", "value" => "cofe.my"}
+      %{"name" => "foo", "value" => "bar"}
     ]
 
-    user = insert(:user, info: %{fields: fields})
+    {:ok, user} =
+      insert(:user)
+      |> User.upgrade_changeset(%{info: %{fields: fields}})
+      |> User.update_and_set_cache()
 
     assert %{
-             "attachment" => [
-               %{"name" => "foo", "type" => "PropertyValue", "value" => "bar"},
+             "attachment" => [%{"name" => "foo", "type" => "PropertyValue", "value" => "bar"}]
+           } = UserView.render("user.json", %{user: user})
+  end
+
+  test "Renders with emoji tags" do
+    user = insert(:user, %{info: %{emoji: [%{"bib" => "/test"}]}})
+
+    assert %{
+             "tag" => [
                %{
-                 "name" => "website",
-                 "type" => "PropertyValue",
-                 "value" => "<a href=\"http://cofe.my\">cofe.my</a>"
+                 "icon" => %{"type" => "Image", "url" => "/test"},
+                 "id" => "/test",
+                 "name" => ":bib:",
+                 "type" => "Emoji",
+                 "updated" => "1970-01-01T00:00:00Z"
                }
              ]
            } = UserView.render("user.json", %{user: user})
@@ -110,10 +121,20 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do
       other_user = insert(:user)
       {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user)
       assert %{"totalItems" => 1} = UserView.render("followers.json", %{user: user})
-      info = Map.put(user.info, :hide_followers, true)
+      info = Map.merge(user.info, %{hide_followers_count: true, hide_followers: true})
       user = Map.put(user, :info, info)
       assert %{"totalItems" => 0} = UserView.render("followers.json", %{user: user})
     end
+
+    test "sets correct totalItems when followers are hidden but the follower counter is not" do
+      user = insert(:user)
+      other_user = insert(:user)
+      {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user)
+      assert %{"totalItems" => 1} = UserView.render("followers.json", %{user: user})
+      info = Map.merge(user.info, %{hide_followers_count: false, hide_followers: true})
+      user = Map.put(user, :info, info)
+      assert %{"totalItems" => 1} = UserView.render("followers.json", %{user: user})
+    end
   end
 
   describe "following" do
@@ -122,9 +143,50 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do
       other_user = insert(:user)
       {:ok, user, _other_user, _activity} = CommonAPI.follow(user, other_user)
       assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
-      info = Map.put(user.info, :hide_follows, true)
+      info = Map.merge(user.info, %{hide_follows_count: true, hide_follows: true})
       user = Map.put(user, :info, info)
       assert %{"totalItems" => 0} = UserView.render("following.json", %{user: user})
     end
+
+    test "sets correct totalItems when follows are hidden but the follow counter is not" do
+      user = insert(:user)
+      other_user = insert(:user)
+      {:ok, user, _other_user, _activity} = CommonAPI.follow(user, other_user)
+      assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
+      info = Map.merge(user.info, %{hide_follows_count: false, hide_follows: true})
+      user = Map.put(user, :info, info)
+      assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
+    end
+  end
+
+  test "activity collection page aginates correctly" do
+    user = insert(:user)
+
+    posts =
+      for i <- 0..25 do
+        {:ok, activity} = CommonAPI.post(user, %{"status" => "post #{i}"})
+        activity
+      end
+
+    # outbox sorts chronologically, newest first, with ten per page
+    posts = Enum.reverse(posts)
+
+    %{"next" => next_url} =
+      UserView.render("activity_collection_page.json", %{
+        iri: "#{user.ap_id}/outbox",
+        activities: Enum.take(posts, 10)
+      })
+
+    next_id = Enum.at(posts, 9).id
+    assert next_url =~ next_id
+
+    %{"next" => next_url} =
+      UserView.render("activity_collection_page.json", %{
+        iri: "#{user.ap_id}/outbox",
+        activities: Enum.take(Enum.drop(posts, 10), 10)
+      })
+
+    next_id = Enum.at(posts, 19).id
+    assert next_url =~ next_id
   end
 end