Browse Source

CommonAPI: Replies to conversations also get the correct context id.

tags/v1.1.4
lain 4 years ago
parent
commit
b64b6fee2a
3 changed files with 22 additions and 3 deletions
  1. +1
    -1
      lib/pleroma/web/common_api/common_api.ex
  2. +6
    -2
      lib/pleroma/web/common_api/utils.ex
  3. +15
    -0
      test/web/common_api/common_api_test.exs

+ 1
- 1
lib/pleroma/web/common_api/common_api.ex View File

@@ -223,7 +223,7 @@ defmodule Pleroma.Web.CommonAPI do
{poll, poll_emoji} <- make_poll_data(data),
{to, cc} <-
get_to_and_cc(user, addressed_users, in_reply_to, visibility, in_reply_to_conversation),
context <- make_context(in_reply_to),
context <- make_context(in_reply_to, in_reply_to_conversation),
cw <- data["spoiler_text"] || "",
sensitive <- data["sensitive"] || Enum.member?(tags, {"#nsfw", "nsfw"}),
full_payload <- String.trim(status <> cw),


+ 6
- 2
lib/pleroma/web/common_api/utils.ex View File

@@ -244,8 +244,12 @@ defmodule Pleroma.Web.CommonAPI.Utils do

defp maybe_add_nsfw_tag(data, _), do: data

def make_context(%Activity{data: %{"context" => context}}), do: context
def make_context(_), do: Utils.generate_context_id()
def make_context(_, %Participation{} = participation) do
Repo.preload(participation, :conversation).conversation.ap_id
end

def make_context(%Activity{data: %{"context" => context}}, _), do: context
def make_context(_, _), do: Utils.generate_context_id()

def maybe_add_attachments(parsed, _attachments, true = _no_links), do: parsed



+ 15
- 0
test/web/common_api/common_api_test.exs View File

@@ -9,10 +9,25 @@ defmodule Pleroma.Web.CommonAPITest do
alias Pleroma.Object
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.ActivityPub.Visibility
alias Pleroma.Web.CommonAPI

import Pleroma.Factory

test "when replying to a conversation / participation, it will set the correct context id even if no explicit reply_to is given" do
user = insert(:user)
{:ok, activity} = CommonAPI.post(user, %{"status" => ".", "visibility" => "direct"})

[participation] = Participation.for_user(user)

{:ok, convo_reply} =
CommonAPI.post(user, %{"status" => ".", "in_reply_to_conversation_id" => participation.id})

assert Visibility.is_direct?(convo_reply)

assert activity.data["context"] == convo_reply.data["context"]
end

test "when replying to a conversation / participation, it only mentions the recipients explicitly declared in the participation" do
har = insert(:user)
jafnhar = insert(:user)


Loading…
Cancel
Save