Skip to content
Snippets Groups Projects
Commit 49929321 authored by Roger Braun's avatar Roger Braun
Browse files

Add relationships to masto api.

parent f0352480
Branches
No related tags found
No related merge requests found
......@@ -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, [])
......
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
......@@ -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
......
......@@ -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
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment