From e679da4c34194b366624e31356d534ab73b11d2d Mon Sep 17 00:00:00 2001
From: Egor Kislitsyn <egor@kislitsyn.com>
Date: Tue, 8 Jan 2019 15:27:02 +0700
Subject: [PATCH] add `pinned` property to `StatusView`

---
 lib/pleroma/web/mastodon_api/views/status_view.ex      |  5 +++++
 test/web/mastodon_api/mastodon_api_controller_test.exs | 10 +++++-----
 test/web/mastodon_api/status_view_test.exs             |  1 +
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex
index 8e8fa8121..db543ffe5 100644
--- a/lib/pleroma/web/mastodon_api/views/status_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/status_view.ex
@@ -76,6 +76,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       reblogged: false,
       favourited: false,
       muted: false,
+      pinned: pinned?(activity, user),
       sensitive: false,
       spoiler_text: "",
       visibility: "public",
@@ -142,6 +143,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       reblogged: present?(repeated),
       favourited: present?(favorited),
       muted: false,
+      pinned: pinned?(activity, user),
       sensitive: sensitive,
       spoiler_text: object["summary"] || "",
       visibility: get_visibility(object),
@@ -295,4 +297,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
   defp present?(nil), do: false
   defp present?(false), do: false
   defp present?(_), do: true
+
+  defp pinned?(%Activity{id: id}, %User{info: %{pinned_activities: pinned_activities}}),
+    do: id in pinned_activities
 end
diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs
index e7e42dd24..4a8c70b3b 100644
--- a/test/web/mastodon_api/mastodon_api_controller_test.exs
+++ b/test/web/mastodon_api/mastodon_api_controller_test.exs
@@ -1489,7 +1489,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
 
       id_str = Integer.to_string(activity.id)
 
-      assert [%{"id" => ^id_str}] = result
+      assert [%{"id" => ^id_str, "pinned" => true}] = result
     end
 
     test "pin status", %{conn: conn} do
@@ -1499,14 +1499,14 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
       {:ok, activity} = CommonAPI.post(user, %{"status" => "HI!!!"})
       id_str = Integer.to_string(activity.id)
 
-      assert %{"id" => ^id_str} =
+      assert %{"id" => ^id_str, "pinned" => true} =
                conn
                |> assign(:user, user)
                |> post("/api/v1/statuses/#{activity.id}/pin")
                |> Map.get(:resp_body)
                |> Jason.decode!()
 
-      assert [%{"id" => ^id_str}] =
+      assert [%{"id" => ^id_str, "pinned" => true}] =
                conn
                |> assign(:user, user)
                |> get("/api/v1/accounts/#{user.id}/statuses?pinned=true")
@@ -1524,7 +1524,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
       id_str = Integer.to_string(activity.id)
       user = User.get_by_ap_id(user.ap_id)
 
-      assert %{"id" => ^id_str} =
+      assert %{"id" => ^id_str, "pinned" => false} =
                conn
                |> assign(:user, user)
                |> post("/api/v1/statuses/#{activity.id}/unpin")
@@ -1549,7 +1549,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
 
       id_str_one = Integer.to_string(activity_one.id)
 
-      assert %{"id" => ^id_str_one} =
+      assert %{"id" => ^id_str_one, "pinned" => true} =
                conn
                |> assign(:user, user)
                |> post("/api/v1/statuses/#{id_str_one}/pin")
diff --git a/test/web/mastodon_api/status_view_test.exs b/test/web/mastodon_api/status_view_test.exs
index b953ccd76..1076b5002 100644
--- a/test/web/mastodon_api/status_view_test.exs
+++ b/test/web/mastodon_api/status_view_test.exs
@@ -63,6 +63,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
       reblogged: false,
       favourited: false,
       muted: false,
+      pinned: false,
       sensitive: false,
       spoiler_text: note.data["object"]["summary"],
       visibility: "public",
-- 
2.49.0