aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex9
-rw-r--r--lib/pleroma/web/mastodon_api/views/account_view.ex17
-rw-r--r--lib/pleroma/web/router.ex2
-rw-r--r--test/web/mastodon_api/account_view_test.exs20
-rw-r--r--test/web/mastodon_api/mastodon_api_controller_test.exs17
5 files changed, 65 insertions, 0 deletions
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
index 219d860a9..69b559a09 100644
--- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
+++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
@@ -7,6 +7,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.TwitterAPI.TwitterAPI
alias Pleroma.Web.CommonAPI
+ import Ecto.Query
import Logger
def create_app(conn, params) do
@@ -177,6 +178,14 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|> json(result)
end
+ def relationships(%{assigns: %{user: user}} = conn, %{"id" => id}) do
+ id = List.wrap(id)
+ q = from u in User,
+ where: u.id in ^id
+ targets = Repo.all(q)
+ render conn, AccountView, "relationships.json", %{user: user, targets: targets}
+ end
+
def empty_array(conn, _) do
Logger.debug("Unimplemented, returning an empty array")
json(conn, [])
diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex
index 85cce754a..4e9ee4132 100644
--- a/lib/pleroma/web/mastodon_api/views/account_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/account_view.ex
@@ -1,6 +1,7 @@
defmodule Pleroma.Web.MastodonAPI.AccountView do
use Pleroma.Web, :view
alias Pleroma.User
+ alias Pleroma.Web.MastodonAPI.AccountView
defp image_url(%{"url" => [ %{ "href" => href } | t ]}), do: href
defp image_url(_), do: nil
@@ -38,4 +39,20 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
url: user.ap_id
}
end
+
+ def render("relationship.json", %{user: user, target: target}) do
+ %{
+ id: target.id,
+ following: User.following?(target, user),
+ followed_by: User.following?(user, target),
+ blocking: false,
+ muting: false,
+ requested: false,
+ domain_blocking: false
+ }
+ end
+
+ def render("relationships.json", %{user: user, targets: targets}) do
+ render_many(targets, AccountView, "relationship.json", user: user, as: :target)
+ end
end
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 161635558..883fd56f4 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -56,6 +56,8 @@ defmodule Pleroma.Web.Router do
pipe_through :authenticated_api
get "/accounts/verify_credentials", MastodonAPIController, :verify_credentials
+ get "/accounts/relationships", MastodonAPIController, :relationships
+
get "/timelines/home", MastodonAPIController, :home_timeline
post "/statuses", MastodonAPIController, :post_status
diff --git a/test/web/mastodon_api/account_view_test.exs b/test/web/mastodon_api/account_view_test.exs
index 0106fbcc0..259258281 100644
--- a/test/web/mastodon_api/account_view_test.exs
+++ b/test/web/mastodon_api/account_view_test.exs
@@ -2,6 +2,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.Web.MastodonAPI.AccountView
+ alias Pleroma.User
test "Represent a user account" do
user = insert(:user, %{info: %{"note_count" => 5, "follower_count" => 3}, nickname: "shp@shitposter.club"})
@@ -39,4 +40,23 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
assert expected == AccountView.render("mention.json", %{user: user})
end
+
+ test "represent a relationship" do
+ user = insert(:user)
+ other_user = insert(:user)
+
+ {:ok, user} = User.follow(user, other_user)
+
+ expected = %{
+ id: other_user.id,
+ following: false,
+ followed_by: true,
+ blocking: false,
+ muting: false,
+ requested: false,
+ domain_blocking: false
+ }
+
+ assert expected == AccountView.render("relationship.json", %{user: user, target: other_user})
+ end
end
diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs
index e87430d3f..52415bb50 100644
--- a/test/web/mastodon_api/mastodon_api_controller_test.exs
+++ b/test/web/mastodon_api/mastodon_api_controller_test.exs
@@ -181,4 +181,21 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
assert id == note_two.id
end
end
+
+ describe "user relationships" do
+ test "returns the relationships for the current user", %{conn: conn} do
+ user = insert(:user)
+ other_user = insert(:user)
+
+ {:ok, user} = User.follow(user, other_user)
+
+ conn = conn
+ |> assign(:user, user)
+ |> get("/api/v1/accounts/relationships", %{"id" => [other_user.id]})
+
+ assert [relationship] = json_response(conn, 200)
+
+ assert other_user.id == relationship["id"]
+ end
+ end
end