[#948] /api/v1/account_search added optional parameters (limit, offset, following)
[akkoma] / test / web / mastodon_api / search_controller_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do
6 use Pleroma.Web.ConnCase
7
8 alias Pleroma.Object
9 alias Pleroma.Web.CommonAPI
10 import Pleroma.Factory
11 import ExUnit.CaptureLog
12 import Tesla.Mock
13
14 setup do
15 mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
16 :ok
17 end
18
19 test "account search", %{conn: conn} do
20 user = insert(:user)
21 user_two = insert(:user, %{nickname: "shp@shitposter.club"})
22 user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"})
23
24 results =
25 conn
26 |> assign(:user, user)
27 |> get("/api/v1/accounts/search", %{"q" => "shp"})
28 |> json_response(200)
29
30 result_ids = for result <- results, do: result["acct"]
31
32 assert user_two.nickname in result_ids
33 assert user_three.nickname in result_ids
34
35 results =
36 conn
37 |> assign(:user, user)
38 |> get("/api/v1/accounts/search", %{"q" => "2hu"})
39 |> json_response(200)
40
41 result_ids = for result <- results, do: result["acct"]
42
43 assert user_three.nickname in result_ids
44 end
45
46 test "search", %{conn: conn} do
47 user = insert(:user)
48 user_two = insert(:user, %{nickname: "shp@shitposter.club"})
49 user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"})
50
51 {:ok, activity} = CommonAPI.post(user, %{"status" => "This is about 2hu"})
52
53 {:ok, _activity} =
54 CommonAPI.post(user, %{
55 "status" => "This is about 2hu, but private",
56 "visibility" => "private"
57 })
58
59 {:ok, _} = CommonAPI.post(user_two, %{"status" => "This isn't"})
60
61 conn =
62 conn
63 |> get("/api/v1/search", %{"q" => "2hu"})
64
65 assert results = json_response(conn, 200)
66
67 [account | _] = results["accounts"]
68 assert account["id"] == to_string(user_three.id)
69
70 assert results["hashtags"] == []
71
72 [status] = results["statuses"]
73 assert status["id"] == to_string(activity.id)
74 end
75
76 test "search fetches remote statuses", %{conn: conn} do
77 capture_log(fn ->
78 conn =
79 conn
80 |> get("/api/v1/search", %{"q" => "https://shitposter.club/notice/2827873"})
81
82 assert results = json_response(conn, 200)
83
84 [status] = results["statuses"]
85 assert status["uri"] == "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment"
86 end)
87 end
88
89 test "search doesn't show statuses that it shouldn't", %{conn: conn} do
90 {:ok, activity} =
91 CommonAPI.post(insert(:user), %{
92 "status" => "This is about 2hu, but private",
93 "visibility" => "private"
94 })
95
96 capture_log(fn ->
97 conn =
98 conn
99 |> get("/api/v1/search", %{"q" => Object.normalize(activity).data["id"]})
100
101 assert results = json_response(conn, 200)
102
103 [] = results["statuses"]
104 end)
105 end
106
107 test "search fetches remote accounts", %{conn: conn} do
108 user = insert(:user)
109
110 conn =
111 conn
112 |> assign(:user, user)
113 |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "true"})
114
115 assert results = json_response(conn, 200)
116 [account] = results["accounts"]
117 assert account["acct"] == "shp@social.heldscal.la"
118 end
119
120 test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do
121 conn =
122 conn
123 |> get("/api/v1/search", %{"q" => "shp@social.heldscal.la", "resolve" => "false"})
124
125 assert results = json_response(conn, 200)
126 assert [] == results["accounts"]
127 end
128 end