Merge branch 'develop' into 'remove-twitter-api'
[akkoma] / test / web / mastodon_api / controllers / filter_controller_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 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
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 query = %Pleroma.Filter{
68 user_id: user.id,
69 filter_id: 2,
70 phrase: "knight",
71 context: ["home"]
72 }
73
74 {:ok, filter} = Pleroma.Filter.create(query)
75
76 conn = get(conn, "/api/v1/filters/#{filter.filter_id}")
77
78 assert response = json_response_and_validate_schema(conn, 200)
79 end
80
81 test "update a filter" do
82 %{user: user, conn: conn} = oauth_access(["write:filters"])
83
84 query = %Pleroma.Filter{
85 user_id: user.id,
86 filter_id: 2,
87 phrase: "knight",
88 context: ["home"],
89 hide: true
90 }
91
92 {:ok, _filter} = Pleroma.Filter.create(query)
93
94 new = %Pleroma.Filter{
95 phrase: "nii",
96 context: ["home"]
97 }
98
99 conn =
100 conn
101 |> put_req_header("content-type", "application/json")
102 |> put("/api/v1/filters/#{query.filter_id}", %{
103 phrase: new.phrase,
104 context: new.context
105 })
106
107 assert response = json_response_and_validate_schema(conn, 200)
108 assert response["phrase"] == new.phrase
109 assert response["context"] == new.context
110 assert response["irreversible"] == true
111 end
112
113 test "delete a filter" do
114 %{user: user, conn: conn} = oauth_access(["write:filters"])
115
116 query = %Pleroma.Filter{
117 user_id: user.id,
118 filter_id: 2,
119 phrase: "knight",
120 context: ["home"]
121 }
122
123 {:ok, filter} = Pleroma.Filter.create(query)
124
125 conn = delete(conn, "/api/v1/filters/#{filter.filter_id}")
126
127 assert json_response_and_validate_schema(conn, 200) == %{}
128 end
129 end