From e2e0cd75b77778cb7adf911cf279d0ccc008dab1 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Wed, 22 Mar 2017 17:25:59 +0100 Subject: [PATCH] Add friends timeline. --- lib/pleroma/web/router.ex | 1 + .../web/twitter_api/twitter_api_controller.ex | 8 +++++ test/support/builders/activity_builder.ex | 2 +- .../twitter_api_controller_test.exs | 31 +++++++++++++++++-- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index aa2f7865e..c34f03cbb 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -30,5 +30,6 @@ def user_fetcher(username) do post "/account/verify_credentials.json", TwitterAPI.Controller, :verify_credentials post "/statuses/update.json", TwitterAPI.Controller, :status_update + get "/statuses/friends_timeline.json", TwitterAPI.Controller, :friends_timeline 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 404afef6d..088439f48 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -24,6 +24,14 @@ def public_timeline(conn, params) do |> json_reply(200, json) end + def friends_timeline(%{assigns: %{user: user}} = conn, params) do + statuses = TwitterAPI.fetch_friend_statuses(user, params) + {:ok, json} = Poison.encode(statuses) + + conn + |> json_reply(200, json) + end + defp json_reply(conn, status, json) do conn |> put_resp_content_type("application/json") diff --git a/test/support/builders/activity_builder.ex b/test/support/builders/activity_builder.ex index b44afa896..a82dc29d4 100644 --- a/test/support/builders/activity_builder.ex +++ b/test/support/builders/activity_builder.ex @@ -23,7 +23,7 @@ def insert(data \\ %{}, opts \\ %{}) do def insert_list(times, data \\ %{}, opts \\ %{}) do Enum.map(1..times, fn (n) -> - {:ok, activity} = insert(%{"id" => n}) + {:ok, activity} = insert(Map.merge(data, %{"id" => n})) activity end) end diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index e243942c6..86c03c652 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -2,7 +2,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do use Pleroma.Web.ConnCase alias Pleroma.Web.TwitterAPI.Representers.{UserRepresenter, ActivityRepresenter} alias Pleroma.Builders.{ActivityBuilder, UserBuilder} - alias Pleroma.{Repo, Activity} + alias Pleroma.{Repo, Activity, User} describe "POST /api/account/verify_credentials" do setup [:valid_user] @@ -52,8 +52,35 @@ test "returns statuses", %{conn: conn} do end end + describe "GET /statuses/friends_timeline.json" do + setup [:valid_user] + test "without valid credentials", %{conn: conn} do + conn = get conn, "/api/statuses/friends_timeline.json" + assert json_response(conn, 403) == %{"error" => "Invalid credentials."} + end + + test "with credentials", %{conn: conn, user: current_user} do + {:ok, user} = UserBuilder.insert + activities = ActivityBuilder.insert_list(30, %{"to" => [User.ap_followers(user)]}, %{user: user}) + ActivityBuilder.insert_list(10, %{"to" => [User.ap_followers(user)]}, %{user: user}) + {:ok, other_user} = UserBuilder.insert(%{ap_id: "glimmung", nickname: "nockame"}) + ActivityBuilder.insert_list(10, %{}, %{user: other_user}) + since_id = List.last(activities).id + + current_user = Ecto.Changeset.change(current_user, following: [User.ap_followers(user)]) |> Repo.update! + + conn = conn + |> with_credentials(current_user.nickname, "test") + |> get("/api/statuses/friends_timeline.json", %{since_id: since_id}) + + response = json_response(conn, 200) + + assert length(response) == 10 + end + end + defp valid_user(_context) do - { :ok, user } = UserBuilder.insert + { :ok, user } = UserBuilder.insert(%{nickname: "lambda", ap_id: "lambda"}) [user: user] end