From 5cb446a148ab7f935b4fc90e4d353d10e18f9f7d Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Thu, 13 Apr 2017 17:22:44 +0200 Subject: [PATCH] Add favoriting to TwAPI controller. --- TODO.txt | 7 +++++++ lib/pleroma/web/router.ex | 1 + .../web/twitter_api/twitter_api_controller.ex | 10 +++++++++ .../twitter_api_controller_test.exs | 21 +++++++++++++++++++ 4 files changed, 39 insertions(+) diff --git a/TODO.txt b/TODO.txt index 42501a637..78cb92e2c 100644 --- a/TODO.txt +++ b/TODO.txt @@ -1 +1,8 @@ - Add cache for user fetching / representing. (mostly in TwitterAPI.activity_to_status) + +Favorites: +- Add 'likes' to activity, collection of ids of people who liked it. +- show if you favorited something or not. +- Don't allow double favorites +- Address favorites to the followers of the liked activity's author. + diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 40350ad0c..a61e32b40 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -39,5 +39,6 @@ def user_fetcher(username) do post "/friendships/create", TwitterAPI.Controller, :follow post "/friendships/destroy", TwitterAPI.Controller, :unfollow post "/statusnet/media/upload", TwitterAPI.Controller, :upload + post "/favorites/create/:id", TwitterAPI.Controller, :favorite end end diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 3f299a941..3969e92a6 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -2,6 +2,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do use Pleroma.Web, :controller alias Pleroma.Web.TwitterAPI.TwitterAPI alias Pleroma.Web.TwitterAPI.Representers.{UserRepresenter, ActivityRepresenter} + alias Pleroma.{Repo, Activity} def verify_credentials(%{assigns: %{user: user}} = conn, _params) do response = user |> UserRepresenter.to_json(%{for: user}) @@ -97,6 +98,15 @@ def config(conn, _params) do |> json_reply(200, response) end + def favorite(%{assigns: %{user: user}} = conn, %{"id" => id}) do + activity = Repo.get(Activity, id) + {:ok, status} = TwitterAPI.favorite(user, activity) + response = Poison.encode!(status) + + conn + |> json_reply(200, response) + end + defp json_reply(conn, status, json) do conn |> put_resp_content_type("application/json") diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index 7c75ff757..728a1b6a8 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -4,6 +4,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do alias Pleroma.Builders.{ActivityBuilder, UserBuilder} alias Pleroma.{Repo, Activity, User} + import Pleroma.Factory + describe "POST /api/account/verify_credentials" do setup [:valid_user] test "without valid credentials", %{conn: conn} do @@ -154,6 +156,25 @@ test "with credentials", %{conn: conn, user: current_user} do end end + describe "POST /api/favorites/create/:id" do + setup [:valid_user] + test "without valid credentials", %{conn: conn} do + note_activity = insert(:note_activity) + conn = post conn, "/api/favorites/create/#{note_activity.id}.json" + assert json_response(conn, 403) == %{"error" => "Invalid credentials."} + end + + test "with credentials", %{conn: conn, user: current_user} do + note_activity = insert(:note_activity) + + conn = conn + |> with_credentials(current_user.nickname, "test") + |> post("/api/favorites/create/#{note_activity.id}.json") + + assert json_response(conn, 200) + end + end + defp valid_user(_context) do { :ok, user } = UserBuilder.insert(%{nickname: "lambda", ap_id: "lambda"}) [user: user]