Add favoriting to twitter api.
This commit is contained in:
		
							parent
							
								
									1388054796
								
							
						
					
					
						commit
						653d605e14
					
				
					 4 changed files with 34 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -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 a new issue