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
|> 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
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
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
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"})
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
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