Merge branch 'optimize-command_available' into 'develop'
[akkoma] / test / pleroma / web / mastodon_api / controllers / filter_controller_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do
6 use Pleroma.Web.ConnCase, async: true
7
8 alias Pleroma.Web.MastodonAPI.FilterView
9
10 test "creating a filter" do
11 %{conn: conn} = oauth_access(["write:filters"])
12
13 filter = %Pleroma.Filter{
14 phrase: "knights",
15 context: ["home"]
16 }
17
18 conn =
19 conn
20 |> put_req_header("content-type", "application/json")
21 |> post("/api/v1/filters", %{"phrase" => filter.phrase, context: filter.context})
22
23 assert response = json_response_and_validate_schema(conn, 200)
24 assert response["phrase"] == filter.phrase
25 assert response["context"] == filter.context
26 assert response["irreversible"] == false
27 assert response["id"] != nil
28 assert response["id"] != ""
29 end
30
31 test "fetching a list of filters" do
32 %{user: user, conn: conn} = oauth_access(["read:filters"])
33
34 query_one = %Pleroma.Filter{
35 user_id: user.id,
36 filter_id: 1,
37 phrase: "knights",
38 context: ["home"]
39 }
40
41 query_two = %Pleroma.Filter{
42 user_id: user.id,
43 filter_id: 2,
44 phrase: "who",
45 context: ["home"]
46 }
47
48 {:ok, filter_one} = Pleroma.Filter.create(query_one)
49 {:ok, filter_two} = Pleroma.Filter.create(query_two)
50
51 response =
52 conn
53 |> get("/api/v1/filters")
54 |> json_response_and_validate_schema(200)
55
56 assert response ==
57 render_json(
58 FilterView,
59 "index.json",
60 filters: [filter_two, filter_one]
61 )
62 end
63
64 test "get a filter" do
65 %{user: user, conn: conn} = oauth_access(["read:filters"])
66
67 # check whole_word false
68 query = %Pleroma.Filter{
69 user_id: user.id,
70 filter_id: 2,
71 phrase: "knight",
72 context: ["home"],
73 whole_word: false
74 }
75
76 {:ok, filter} = Pleroma.Filter.create(query)
77
78 conn = get(conn, "/api/v1/filters/#{filter.filter_id}")
79
80 assert response = json_response_and_validate_schema(conn, 200)
81 assert response["whole_word"] == false
82
83 # check whole_word true
84 %{user: user, conn: conn} = oauth_access(["read:filters"])
85
86 query = %Pleroma.Filter{
87 user_id: user.id,
88 filter_id: 3,
89 phrase: "knight",
90 context: ["home"],
91 whole_word: true
92 }
93
94 {:ok, filter} = Pleroma.Filter.create(query)
95
96 conn = get(conn, "/api/v1/filters/#{filter.filter_id}")
97
98 assert response = json_response_and_validate_schema(conn, 200)
99 assert response["whole_word"] == true
100 end
101
102 test "update a filter" do
103 %{user: user, conn: conn} = oauth_access(["write:filters"])
104
105 query = %Pleroma.Filter{
106 user_id: user.id,
107 filter_id: 2,
108 phrase: "knight",
109 context: ["home"],
110 hide: true,
111 whole_word: true
112 }
113
114 {:ok, _filter} = Pleroma.Filter.create(query)
115
116 new = %Pleroma.Filter{
117 phrase: "nii",
118 context: ["home"]
119 }
120
121 conn =
122 conn
123 |> put_req_header("content-type", "application/json")
124 |> put("/api/v1/filters/#{query.filter_id}", %{
125 phrase: new.phrase,
126 context: new.context
127 })
128
129 assert response = json_response_and_validate_schema(conn, 200)
130 assert response["phrase"] == new.phrase
131 assert response["context"] == new.context
132 assert response["irreversible"] == true
133 assert response["whole_word"] == true
134 end
135
136 test "delete a filter" do
137 %{user: user, conn: conn} = oauth_access(["write:filters"])
138
139 query = %Pleroma.Filter{
140 user_id: user.id,
141 filter_id: 2,
142 phrase: "knight",
143 context: ["home"]
144 }
145
146 {:ok, filter} = Pleroma.Filter.create(query)
147
148 conn = delete(conn, "/api/v1/filters/#{filter.filter_id}")
149
150 assert json_response_and_validate_schema(conn, 200) == %{}
151 end
152 end