Add favoriting to twitter api.

This commit is contained in:
Roger Braun 2017-04-13 16:19:07 +02:00
parent 1388054796
commit 653d605e14
4 changed files with 34 additions and 4 deletions

View file

@ -25,6 +25,7 @@ def to_map(%Activity{} = activity, %{user: user} = opts) do
content = get_in(activity.data, ["object", "content"]) content = get_in(activity.data, ["object", "content"])
created_at = get_in(activity.data, ["object", "published"]) created_at = get_in(activity.data, ["object", "published"])
|> date_to_asctime |> date_to_asctime
like_count = get_in(activity.data, ["object", "like_count"]) || 0
mentions = opts[:mentioned] || [] mentions = opts[:mentioned] || []
@ -45,14 +46,15 @@ def to_map(%Activity{} = activity, %{user: user} = opts) do
"in_reply_to_status_id" => activity.data["object"]["inReplyToStatusId"], "in_reply_to_status_id" => activity.data["object"]["inReplyToStatusId"],
"statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"], "statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"],
"attachments" => (activity.data["object"]["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts), "attachments" => (activity.data["object"]["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts),
"attentions" => attentions "attentions" => attentions,
"fave_num" => like_count
} }
end end
defp date_to_asctime(date) do defp date_to_asctime(date) do
with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do
Calendar.Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y") Calendar.Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y")
else e -> else _e ->
"" ""
end end
end end

View file

@ -124,6 +124,19 @@ def unfollow(%User{} = follower, followed_id) do
end end
end end
def favorite(%User{} = user, %Activity{data: %{"object" => object}} = activity) do
object = Object.get_by_ap_id(object["id"])
{:ok, _like_activity, object} = ActivityPub.like(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) do def upload(%Plug.Upload{} = file) do
{:ok, object} = ActivityPub.upload(file) {:ok, object} = ActivityPub.upload(file)

View file

@ -45,7 +45,8 @@ test "an activity" do
"statusnetConversationId" => 4711, "statusnetConversationId" => 4711,
"attachment" => [ "attachment" => [
object object
] ],
"like_count" => 5
}, },
"published" => date "published" => date
} }
@ -68,7 +69,8 @@ test "an activity" do
], ],
"attentions" => [ "attentions" => [
UserRepresenter.to_map(mentioned_user, %{for: follower}) UserRepresenter.to_map(mentioned_user, %{for: follower})
] ],
"fave_num" => 5
} }
assert ActivityRepresenter.to_map(activity, %{user: user, for: follower, mentioned: [mentioned_user]}) == expected_status assert ActivityRepresenter.to_map(activity, %{user: user, for: follower, mentioned: [mentioned_user]}) == expected_status

View file

@ -5,6 +5,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
alias Pleroma.{Activity, User, Object, Repo} alias Pleroma.{Activity, User, Object, Repo}
alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
import Pleroma.Factory
test "create a status" do test "create a status" do
user = UserBuilder.build(%{ap_id: "142344"}) user = UserBuilder.build(%{ap_id: "142344"})
_mentioned_user = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"}) _mentioned_user = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"})
@ -177,4 +179,15 @@ test "it adds user links to an existing text" do
assert TwitterAPI.add_user_links(text, mentions) == expected_text assert TwitterAPI.add_user_links(text, mentions) == expected_text
end end
test "it favorites 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"])
{:ok, status} = TwitterAPI.favorite(user, note_activity)
updated_activity = Activity.get_by_ap_id(note_activity.data["id"])
assert status == ActivityRepresenter.to_map(updated_activity, %{user: activity_user, for: user})
end
end end