Mastodon API: Return `pleroma.direct_conversation_id` when viewing a status (`GET...
authoreugenijm <eugenijm@protonmail.com>
Wed, 9 Oct 2019 03:51:14 +0000 (06:51 +0300)
committereugenijm <eugenijm@protonmail.com>
Wed, 9 Oct 2019 04:27:09 +0000 (07:27 +0300)
CHANGELOG.md
lib/pleroma/web/mastodon_api/controllers/status_controller.ex
test/web/mastodon_api/controllers/status_controller_test.exs

index 8b24db7f4b37002a15c4729e6dfaf335ebcd7912..da921b98ea3c2f10047120b470ddff27bd77495f 100644 (file)
@@ -27,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Admin API: Return link alongside with token on password reset
 - MRF (Simple Policy): Also use `:accept`/`:reject` on the actors rather than only their activities
 - OStatus: Extract RSS functionality
+- Mastodon API: Add `pleroma.direct_conversation_id` to the status endpoint (`GET /api/v1/statuses/:id`)
 
 ### Fixed
 - Mastodon API: Fix private and direct statuses not being filtered out from the public timeline for an authenticated user (`GET /api/v1/timelines/public`)
index 0c16e9b0f22d7b262a1dbbfc4c46c1934d771073..e5d016f63711dc0f899172448ddbef138a5f4cbb 100644 (file)
@@ -167,7 +167,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
   def show(%{assigns: %{user: user}} = conn, %{"id" => id}) do
     with %Activity{} = activity <- Activity.get_by_id_with_object(id),
          true <- Visibility.visible_for_user?(activity, user) do
-      try_render(conn, "show.json", activity: activity, for: user)
+      try_render(conn, "show.json",
+        activity: activity,
+        for: user,
+        with_direct_conversation_id: true
+      )
     end
   end
 
index a4bbfe0557bc2b7ff22414e78343b3cd51e4abdf..2de2725e014023ae17e1f15068f2b9afc6c93931 100644 (file)
@@ -8,6 +8,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
   alias Pleroma.Activity
   alias Pleroma.ActivityExpiration
   alias Pleroma.Config
+  alias Pleroma.Conversation.Participation
   alias Pleroma.Object
   alias Pleroma.Repo
   alias Pleroma.ScheduledActivity
@@ -465,6 +466,24 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
     assert id == to_string(activity.id)
   end
 
+  test "get a direct status", %{conn: conn} do
+    user = insert(:user)
+    other_user = insert(:user)
+
+    {:ok, activity} =
+      CommonAPI.post(user, %{"status" => "@#{other_user.nickname}", "visibility" => "direct"})
+
+    conn =
+      conn
+      |> assign(:user, user)
+      |> get("/api/v1/statuses/#{activity.id}")
+
+    [participation] = Participation.for_user(user)
+
+    res = json_response(conn, 200)
+    assert res["pleroma"]["direct_conversation_id"] == participation.id
+  end
+
   test "get statuses by IDs", %{conn: conn} do
     %{id: id1} = insert(:note_activity)
     %{id: id2} = insert(:note_activity)