search: fix 'following' query parameter

The parameter included the accounts that are following you (followers)
instead of those you are actually following.

Co-Authored-By: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
This commit is contained in:
Karol Kosek 2020-09-01 19:56:32 +02:00 committed by Haelwenn (lanodan) Monnier
parent d48755791d
commit 868057871a
No known key found for this signature in database
GPG Key ID: D5B7A8E43C997DEE
3 changed files with 18 additions and 13 deletions

View File

@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## unreleased-patch - ???
### Fixed
- Mastodon API: Search parameter `following` now correctly returns the followings rather than the followers
## [2.1.0] - 2020-08-28 ## [2.1.0] - 2020-08-28
### Changed ### Changed

View File

@ -116,7 +116,7 @@ defmodule Pleroma.User.Search do
end end
defp base_query(_user, false), do: User defp base_query(_user, false), do: User
defp base_query(user, true), do: User.get_followers_query(user) defp base_query(user, true), do: User.get_friends_query(user)
defp filter_invisible_users(query) do defp filter_invisible_users(query) do
from(q in query, where: q.invisible == false) from(q in query, where: q.invisible == false)

View File

@ -109,22 +109,22 @@ defmodule Pleroma.UserSearchTest do
Enum.map(User.search("doe", resolve: false, for_user: u1), & &1.id) == [] Enum.map(User.search("doe", resolve: false, for_user: u1), & &1.id) == []
end end
test "finds followers of user by partial name" do test "finds followings of user by partial name" do
u1 = insert(:user) lizz = insert(:user, %{name: "Lizz"})
u2 = insert(:user, %{name: "Jimi"}) jimi = insert(:user, %{name: "Jimi"})
follower_jimi = insert(:user, %{name: "Jimi Hendrix"}) following_lizz = insert(:user, %{name: "Jimi Hendrix"})
follower_lizz = insert(:user, %{name: "Lizz Wright"}) following_jimi = insert(:user, %{name: "Lizz Wright"})
friend = insert(:user, %{name: "Jimi"}) follower_lizz = insert(:user, %{name: "Jimi"})
{:ok, follower_jimi} = User.follow(follower_jimi, u1) {:ok, lizz} = User.follow(lizz, following_lizz)
{:ok, _follower_lizz} = User.follow(follower_lizz, u2) {:ok, _jimi} = User.follow(jimi, following_jimi)
{:ok, u1} = User.follow(u1, friend) {:ok, _follower_lizz} = User.follow(follower_lizz, lizz)
assert Enum.map(User.search("jimi", following: true, for_user: u1), & &1.id) == [ assert Enum.map(User.search("jimi", following: true, for_user: lizz), & &1.id) == [
follower_jimi.id following_lizz.id
] ]
assert User.search("lizz", following: true, for_user: u1) == [] assert User.search("lizz", following: true, for_user: lizz) == []
end end
test "find local and remote users for authenticated users" do test "find local and remote users for authenticated users" do