logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: aaf3fc1575badd13ccbce267895492fa0b708bbb
parent: ad3181895c2ce14191ca4ada0d86346947428610
Author: eal <eal@waifu.club>
Date:   Sat, 20 Oct 2018 10:14:08 +0000

Merge branch 'pleroma-list-belongs' into 'develop'

Pleroma list belongs

Closes #333

See merge request pleroma/pleroma!382

Diffstat:

Mlib/pleroma/list.ex19+++++++++++++++++++
Mlib/pleroma/web/mastodon_api/mastodon_api_controller.ex6++++++
Mlib/pleroma/web/router.ex1+
Mtest/list_test.exs20++++++++++++++++++++
4 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/lib/pleroma/list.ex b/lib/pleroma/list.ex @@ -69,6 +69,25 @@ defmodule Pleroma.List do Repo.all(query) end + # Get lists to which the account belongs. + def get_lists_account_belongs(%User{} = owner, account_id) do + user = Repo.get(User, account_id) + + query = + from( + l in Pleroma.List, + where: + l.user_id == ^owner.id and + fragment( + "? = ANY(?)", + ^user.follower_address, + l.following + ) + ) + + Repo.all(query) + end + def rename(%Pleroma.List{} = list, title) do list |> title_changeset(%{title: title}) diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -770,6 +770,12 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end end + def account_lists(%{assigns: %{user: user}} = conn, %{"id" => account_id}) do + lists = Pleroma.List.get_lists_account_belongs(user, account_id) + res = ListView.render("lists.json", lists: lists) + json(conn, res) + end + def delete_list(%{assigns: %{user: user}} = conn, %{"id" => id}) do with %Pleroma.List{} = list <- Pleroma.List.get(id, user), {:ok, _list} <- Pleroma.List.delete(list) do diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex @@ -119,6 +119,7 @@ defmodule Pleroma.Web.Router do post("/accounts/:id/unblock", MastodonAPIController, :unblock) post("/accounts/:id/mute", MastodonAPIController, :relationship_noop) post("/accounts/:id/unmute", MastodonAPIController, :relationship_noop) + get("/accounts/:id/lists", MastodonAPIController, :account_lists) get("/follow_requests", MastodonAPIController, :follow_requests) post("/follow_requests/:id/authorize", MastodonAPIController, :authorize_follow_request) diff --git a/test/list_test.exs b/test/list_test.exs @@ -90,4 +90,24 @@ defmodule Pleroma.ListTest do assert list_two in lists refute list_three in lists end + + test "getting own lists a given user belongs to" do + owner = insert(:user) + not_owner = insert(:user) + member_1 = insert(:user) + member_2 = insert(:user) + {:ok, owned_list} = Pleroma.List.create("owned", owner) + {:ok, not_owned_list} = Pleroma.List.create("not owned", not_owner) + {:ok, owned_list} = Pleroma.List.follow(owned_list, member_1) + {:ok, owned_list} = Pleroma.List.follow(owned_list, member_2) + {:ok, not_owned_list} = Pleroma.List.follow(not_owned_list, member_1) + {:ok, not_owned_list} = Pleroma.List.follow(not_owned_list, member_2) + + lists_1 = Pleroma.List.get_lists_account_belongs(owner, member_1.id) + assert owned_list in lists_1 + refute not_owned_list in lists_1 + lists_2 = Pleroma.List.get_lists_account_belongs(owner, member_2.id) + assert owned_list in lists_2 + refute not_owned_list in lists_2 + end end