Fix get_in_reply_to in OStatus' activity representer depending on embedded objects
authorrinpatch <rinpatch@sdf.org>
Thu, 9 May 2019 19:27:00 +0000 (22:27 +0300)
committerrinpatch <rinpatch@sdf.org>
Thu, 9 May 2019 19:27:00 +0000 (22:27 +0300)
lib/pleroma/web/ostatus/activity_representer.ex
test/web/ostatus/activity_representer_test.exs

index 166691a0980230cd630d5cedc92e44e97a391738..a7832a3d903bb377086f60057d84e054d5e8c7d5 100644 (file)
@@ -18,15 +18,18 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenter do
     end
   end
 
-  defp get_in_reply_to(%{"object" => %{"inReplyTo" => in_reply_to}}) do
-    [
-      {:"thr:in-reply-to",
-       [ref: to_charlist(in_reply_to), href: to_charlist(get_href(in_reply_to))], []}
-    ]
+  defp get_in_reply_to(activity) do
+    with %Object{data: %{"inReplyTo" => in_reply_to}} <- Object.normalize(activity) do
+      [
+        {:"thr:in-reply-to",
+         [ref: to_charlist(in_reply_to), href: to_charlist(get_href(in_reply_to))], []}
+      ]
+    else
+      _ ->
+        []
+    end
   end
 
-  defp get_in_reply_to(_), do: []
-
   defp get_mentions(to) do
     Enum.map(to, fn id ->
       cond do
@@ -98,7 +101,7 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenter do
          []}
       end)
 
-    in_reply_to = get_in_reply_to(activity.data)
+    in_reply_to = get_in_reply_to(activity)
     author = if with_author, do: [{:author, UserRepresenter.to_simple_form(user)}], else: []
     mentions = activity.recipients |> get_mentions
 
index a4bb68c4d9722aa82428b4770227160a34e33b56..16ee02abb667c4173dcd3f5b9256b2c70e630fcb 100644 (file)
@@ -67,37 +67,31 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do
   end
 
   test "a reply note" do
-    note = insert(:note_activity)
-    answer = insert(:note_activity)
-    object = answer.data["object"]
-    object = Map.put(object, "inReplyTo", note.data["object"]["id"])
-
-    data = %{answer.data | "object" => object}
-    answer = %{answer | data: data}
-
-    note_object = Object.get_by_ap_id(note.data["object"]["id"])
+    user = insert(:user)
+    note_object = insert(:note)
+    _note = insert(:note_activity, %{note: note_object})
+    object = insert(:note, %{data: %{"inReplyTo" => note_object.data["id"]}})
+    answer = insert(:note_activity, %{note: object})
 
     Repo.update!(
       Object.change(note_object, %{data: Map.put(note_object.data, "external_url", "someurl")})
     )
 
-    user = User.get_cached_by_ap_id(answer.data["actor"])
-
     expected = """
     <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
     <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
-    <id>#{answer.data["object"]["id"]}</id>
+    <id>#{object.data["id"]}</id>
     <title>New note by #{user.nickname}</title>
-    <content type="html">#{answer.data["object"]["content"]}</content>
-    <published>#{answer.data["object"]["published"]}</published>
-    <updated>#{answer.data["object"]["published"]}</updated>
+    <content type="html">#{object.data["content"]}</content>
+    <published>#{object.data["published"]}</published>
+    <updated>#{object.data["published"]}</updated>
     <ostatus:conversation ref="#{answer.data["context"]}">#{answer.data["context"]}</ostatus:conversation>
     <link ref="#{answer.data["context"]}" rel="ostatus:conversation" />
     <summary>2hu</summary>
-    <link type="application/atom+xml" href="#{answer.data["object"]["id"]}" rel="self" />
-    <link type="text/html" href="#{answer.data["object"]["id"]}" rel="alternate" />
+    <link type="application/atom+xml" href="#{object.data["id"]}" rel="self" />
+    <link type="text/html" href="#{object.data["id"]}" rel="alternate" />
     <category term="2hu"/>
-    <thr:in-reply-to ref="#{note.data["object"]["id"]}" href="someurl" />
+    <thr:in-reply-to ref="#{note_object.data["id"]}" href="someurl" />
     <link rel="mentioned" ostatus:object-type="http://activitystrea.ms/schema/1.0/collection" href="http://activityschema.org/collection/public"/>
     <link name="2hu" rel="emoji" href="corndog.png" />
     """