logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: 5d6ec6e5fc9b00d367568dd111816b90cddad02b
parent: 7aa6c82937090ca6f2298dee0ef894954ca2f129
Author: feld <feld@feld.me>
Date:   Thu, 11 Jun 2020 14:04:51 +0000

Merge branch '1794-hashtags-construction-from-uri' into 'develop'

[#1794] Hashtags search fix for URI as query string

Closes #1794

See merge request pleroma/pleroma!2641

Diffstat:

Mlib/pleroma/web/mastodon_api/controllers/search_controller.ex14++++++++++++++
Mtest/web/mastodon_api/controllers/search_controller_test.exs9+++++++++
2 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -124,6 +124,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do defp prepare_tags(query, add_joined_tag \\ true) do tags = query + |> preprocess_uri_query() |> String.split(~r/[^#\w]+/u, trim: true) |> Enum.uniq_by(&String.downcase/1) @@ -147,6 +148,19 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do end end + # If `query` is a URI, returns last component of its path, otherwise returns `query` + defp preprocess_uri_query(query) do + if query =~ ~r/https?:\/\// do + query + |> URI.parse() + |> Map.get(:path) + |> String.split("/") + |> Enum.at(-1) + else + query + end + end + defp joined_tag(tags) do tags |> Enum.map(fn tag -> String.capitalize(tag) end) diff --git a/test/web/mastodon_api/controllers/search_controller_test.exs b/test/web/mastodon_api/controllers/search_controller_test.exs @@ -111,6 +111,15 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do %{"name" => "prone", "url" => "#{Web.base_url()}/tag/prone"}, %{"name" => "AccidentProne", "url" => "#{Web.base_url()}/tag/AccidentProne"} ] + + results = + conn + |> get("/api/v2/search?#{URI.encode_query(%{q: "https://shpposter.club/users/shpuld"})}") + |> json_response_and_validate_schema(200) + + assert results["hashtags"] == [ + %{"name" => "shpuld", "url" => "#{Web.base_url()}/tag/shpuld"} + ] end test "excludes a blocked users from search results", %{conn: conn} do