Add unfavoriting to TwAPI.
authorRoger Braun <roger@rogerbraun.net>
Fri, 14 Apr 2017 16:15:15 +0000 (18:15 +0200)
committerRoger Braun <roger@rogerbraun.net>
Fri, 14 Apr 2017 16:15:15 +0000 (18:15 +0200)
lib/pleroma/web/twitter_api/twitter_api.ex
test/web/twitter_api/twitter_api_test.exs

index d6ef0f4ed1b5bdf7ae759cca073ca06eba352f26..a23f465d41043fd12870990b48606f42623804a2 100644 (file)
@@ -137,6 +137,19 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
     {:ok, status}
   end
 
+  def unfavorite(%User{} = user, %Activity{data: %{"object" => object}} = activity) do
+    object = Object.get_by_ap_id(object["id"])
+
+    {:ok, object} = ActivityPub.unlike(user, object)
+    new_data = activity.data
+    |> Map.put("object", object.data)
+
+    status = %{activity | data: new_data}
+    |> activity_to_status(%{for: user})
+
+    {:ok, status}
+  end
+
   def upload(%Plug.Upload{} = file, format \\ "xml") do
     {:ok, object} = ActivityPub.upload(file)
 
index 040a392e5ec30a35c84bd0a7d980403a5ba91cac..88e6dd6841bde419abc97f016ce687aceed3e6f5 100644 (file)
@@ -4,6 +4,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
   alias Pleroma.Web.TwitterAPI.TwitterAPI
   alias Pleroma.{Activity, User, Object, Repo}
   alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
+  alias Pleroma.Web.ActivityPub.ActivityPub
 
   import Pleroma.Factory
 
@@ -191,6 +192,22 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
     assert status == ActivityRepresenter.to_map(updated_activity, %{user: activity_user, for: user})
   end
 
+  test "it unfavorites a status, returns the updated status" do
+    user = insert(:user)
+    note_activity = insert(:note_activity)
+    activity_user = Repo.get_by!(User, ap_id: note_activity.data["actor"])
+    object = Object.get_by_ap_id(note_activity.data["object"]["id"])
+
+    {:ok, like_activity, object } = ActivityPub.like(user, object)
+    updated_activity = Activity.get_by_ap_id(note_activity.data["id"])
+    assert ActivityRepresenter.to_map(updated_activity, %{user: activity_user, for: user})["fave_num"] == 1
+
+    {:ok, status} = TwitterAPI.unfavorite(user, note_activity)
+    updated_activity = Activity.get_by_ap_id(note_activity.data["id"])
+
+    assert status["fave_num"] == 0
+  end
+
   setup do
     Supervisor.terminate_child(Pleroma.Supervisor, ConCache)
     Supervisor.restart_child(Pleroma.Supervisor, ConCache)