Add favoriting to twitter api.
This commit is contained in:
parent
1388054796
commit
653d605e14
|
@ -25,6 +25,7 @@ def to_map(%Activity{} = activity, %{user: user} = opts) do
|
|||
content = get_in(activity.data, ["object", "content"])
|
||||
created_at = get_in(activity.data, ["object", "published"])
|
||||
|> date_to_asctime
|
||||
like_count = get_in(activity.data, ["object", "like_count"]) || 0
|
||||
|
||||
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"],
|
||||
"statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"],
|
||||
"attachments" => (activity.data["object"]["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts),
|
||||
"attentions" => attentions
|
||||
"attentions" => attentions,
|
||||
"fave_num" => like_count
|
||||
}
|
||||
end
|
||||
|
||||
defp date_to_asctime(date) do
|
||||
with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do
|
||||
Calendar.Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y")
|
||||
else e ->
|
||||
else _e ->
|
||||
""
|
||||
end
|
||||
end
|
||||
|
|
|
@ -124,6 +124,19 @@ def unfollow(%User{} = follower, followed_id) do
|
|||
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
|
||||
{:ok, object} = ActivityPub.upload(file)
|
||||
|
||||
|
|
|
@ -45,7 +45,8 @@ test "an activity" do
|
|||
"statusnetConversationId" => 4711,
|
||||
"attachment" => [
|
||||
object
|
||||
]
|
||||
],
|
||||
"like_count" => 5
|
||||
},
|
||||
"published" => date
|
||||
}
|
||||
|
@ -68,7 +69,8 @@ test "an activity" do
|
|||
],
|
||||
"attentions" => [
|
||||
UserRepresenter.to_map(mentioned_user, %{for: follower})
|
||||
]
|
||||
],
|
||||
"fave_num" => 5
|
||||
}
|
||||
|
||||
assert ActivityRepresenter.to_map(activity, %{user: user, for: follower, mentioned: [mentioned_user]}) == expected_status
|
||||
|
|
|
@ -5,6 +5,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
|
|||
alias Pleroma.{Activity, User, Object, Repo}
|
||||
alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
|
||||
|
||||
import Pleroma.Factory
|
||||
|
||||
test "create a status" do
|
||||
user = UserBuilder.build(%{ap_id: "142344"})
|
||||
_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
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue