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
9 alias Pleroma.Web.CommonAPI
10 import Pleroma.Factory
11 import ExUnit.CaptureLog
15 mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
19 test "account search", %{conn: conn} do
21 user_two = insert(:user, %{nickname: "shp@shitposter.club"})
22 user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"})
26 |> assign(:user, user)
27 |> get("/api/v1/accounts/search", %{"q" => "shp"})
30 result_ids = for result <- results, do: result["acct"]
32 assert user_two.nickname in result_ids
33 assert user_three.nickname in result_ids
37 |> assign(:user, user)
38 |> get("/api/v1/accounts/search", %{"q" => "2hu"})
41 result_ids = for result <- results, do: result["acct"]
43 assert user_three.nickname in result_ids
46 test "search", %{conn: conn} do
48 user_two = insert(:user, %{nickname: "shp@shitposter.club"})
49 user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"})
51 {:ok, activity} = CommonAPI.post(user, %{"status" => "This is about 2hu"})
54 CommonAPI.post(user, %{
55 "status" => "This is about 2hu, but private",
56 "visibility" => "private"
59 {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"})
63 |> get("/api/v1/search", %{"q" => "2hu"})
65 assert results = json_response(conn, 200)
67 [account | _] = results["accounts"]
68 assert account["id"] == to_string(user_three.id)
70 assert results["hashtags"] == []
72 [status] = results["statuses"]
73 assert status["id"] == to_string(activity.id)
76 test "search fetches remote statuses", %{conn: conn} do
80 |> get("/api/v1/search", %{"q" => "https://shitposter.club/notice/2827873"})
82 assert results = json_response(conn, 200)
84 [status] = results["statuses"]
85 assert status["uri"] == "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
89 test "search doesn't show statuses that it shouldn't", %{conn: conn} do
91 CommonAPI.post(insert(:user), %{
92 "status" => "This is about 2hu, but private",
93 "visibility" => "private"
99 |> get("/api/v1/search", %{"q" => Object.normalize(activity).data["id"]})
101 assert results = json_response(conn, 200)
103 [] = results["statuses"]
107 test "search fetches remote accounts", %{conn: conn} do
112 |> assign(:user, user)
113 |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "true"})
115 assert results = json_response(conn, 200)
116 [account] = results["accounts"]
117 assert account["acct"] == "shp@social.heldscal.la"
120 test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do
123 |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "false"})
125 assert results = json_response(conn, 200)
126 assert [] == results["accounts"]