1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do
6 use Pleroma.Web.ConnCase
10 alias Pleroma.Web.CommonAPI
11 import Pleroma.Factory
12 import ExUnit.CaptureLog
17 mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
21 describe ".search2" do
22 test "it returns empty result if user or status search return undefined error", %{conn: conn} do
24 {Pleroma.User, [], [search: fn _q, _o -> raise "Oops" end]},
25 {Pleroma.Activity, [], [search: fn _u, _q -> raise "Oops" end]}
27 conn = get(conn, "/api/v2/search", %{"q" => "2hu"})
29 assert results = json_response(conn, 200)
31 assert results["accounts"] == []
32 assert results["statuses"] == []
36 test "search", %{conn: conn} do
38 user_two = insert(:user, %{nickname: "shp@shitposter.club"})
39 user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"})
41 {:ok, activity} = CommonAPI.post(user, %{"status" => "This is about 2hu private"})
44 CommonAPI.post(user, %{
45 "status" => "This is about 2hu, but private",
46 "visibility" => "private"
49 {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"})
51 conn = get(conn, "/api/v2/search", %{"q" => "2hu #private"})
53 assert results = json_response(conn, 200)
56 [account | _] = results["accounts"]
57 assert account["id"] == to_string(user_three.id)
59 assert results["hashtags"] == [
60 %{"name" => "private", "url" => "#{Web.base_url()}/tag/private"}
63 [status] = results["statuses"]
64 assert status["id"] == to_string(activity.id)
68 describe ".account_search" do
69 test "account search", %{conn: conn} do
71 user_two = insert(:user, %{nickname: "shp@shitposter.club"})
72 user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"})
76 |> assign(:user, user)
77 |> get("/api/v1/accounts/search", %{"q" => "shp"})
80 result_ids = for result <- results, do: result["acct"]
82 assert user_two.nickname in result_ids
83 assert user_three.nickname in result_ids
87 |> assign(:user, user)
88 |> get("/api/v1/accounts/search", %{"q" => "2hu"})
91 result_ids = for result <- results, do: result["acct"]
93 assert user_three.nickname in result_ids
98 test "it returns empty result if user or status search return undefined error", %{conn: conn} do
100 {Pleroma.User, [], [search: fn _q, _o -> raise "Oops" end]},
101 {Pleroma.Activity, [], [search: fn _u, _q -> raise "Oops" end]}
105 |> get("/api/v1/search", %{"q" => "2hu"})
107 assert results = json_response(conn, 200)
109 assert results["accounts"] == []
110 assert results["statuses"] == []
114 test "search", %{conn: conn} do
116 user_two = insert(:user, %{nickname: "shp@shitposter.club"})
117 user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"})
119 {:ok, activity} = CommonAPI.post(user, %{"status" => "This is about 2hu"})
122 CommonAPI.post(user, %{
123 "status" => "This is about 2hu, but private",
124 "visibility" => "private"
127 {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"})
131 |> get("/api/v1/search", %{"q" => "2hu"})
133 assert results = json_response(conn, 200)
135 [account | _] = results["accounts"]
136 assert account["id"] == to_string(user_three.id)
138 assert results["hashtags"] == []
140 [status] = results["statuses"]
141 assert status["id"] == to_string(activity.id)
144 test "search fetches remote statuses", %{conn: conn} do
148 |> get("/api/v1/search", %{"q" => "https://shitposter.club/notice/2827873"})
150 assert results = json_response(conn, 200)
152 [status] = results["statuses"]
154 assert status["uri"] ==
155 "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
159 test "search doesn't show statuses that it shouldn't", %{conn: conn} do
161 CommonAPI.post(insert(:user), %{
162 "status" => "This is about 2hu, but private",
163 "visibility" => "private"
169 |> get("/api/v1/search", %{"q" => Object.normalize(activity).data["id"]})
171 assert results = json_response(conn, 200)
173 [] = results["statuses"]
177 test "search fetches remote accounts", %{conn: conn} do
182 |> assign(:user, user)
183 |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "true"})
185 assert results = json_response(conn, 200)
186 [account] = results["accounts"]
187 assert account["acct"] == "shp@social.heldscal.la"
190 test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do
193 |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "false"})
195 assert results = json_response(conn, 200)
196 assert [] == results["accounts"]