Merge remote-tracking branch 'remotes/origin/develop' into ostatus-controller-no...
[akkoma] / test / pleroma / filter_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.FilterTest do
6 use Pleroma.DataCase
7
8 import Pleroma.Factory
9
10 alias Pleroma.Filter
11 alias Pleroma.Repo
12
13 describe "creating filters" do
14 test "creating one filter" do
15 user = insert(:user)
16
17 query = %Filter{
18 user_id: user.id,
19 filter_id: 42,
20 phrase: "knights",
21 context: ["home"]
22 }
23
24 {:ok, %Filter{} = filter} = Filter.create(query)
25 result = Filter.get(filter.filter_id, user)
26 assert query.phrase == result.phrase
27 end
28
29 test "creating one filter without a pre-defined filter_id" do
30 user = insert(:user)
31
32 query = %Filter{
33 user_id: user.id,
34 phrase: "knights",
35 context: ["home"]
36 }
37
38 {:ok, %Filter{} = filter} = Filter.create(query)
39 # Should start at 1
40 assert filter.filter_id == 1
41 end
42
43 test "creating additional filters uses previous highest filter_id + 1" do
44 user = insert(:user)
45
46 query_one = %Filter{
47 user_id: user.id,
48 filter_id: 42,
49 phrase: "knights",
50 context: ["home"]
51 }
52
53 {:ok, %Filter{} = filter_one} = Filter.create(query_one)
54
55 query_two = %Filter{
56 user_id: user.id,
57 # No filter_id
58 phrase: "who",
59 context: ["home"]
60 }
61
62 {:ok, %Filter{} = filter_two} = Filter.create(query_two)
63 assert filter_two.filter_id == filter_one.filter_id + 1
64 end
65
66 test "filter_id is unique per user" do
67 user_one = insert(:user)
68 user_two = insert(:user)
69
70 query_one = %Filter{
71 user_id: user_one.id,
72 phrase: "knights",
73 context: ["home"]
74 }
75
76 {:ok, %Filter{} = filter_one} = Filter.create(query_one)
77
78 query_two = %Filter{
79 user_id: user_two.id,
80 phrase: "who",
81 context: ["home"]
82 }
83
84 {:ok, %Filter{} = filter_two} = Filter.create(query_two)
85
86 assert filter_one.filter_id == 1
87 assert filter_two.filter_id == 1
88
89 result_one = Filter.get(filter_one.filter_id, user_one)
90 assert result_one.phrase == filter_one.phrase
91
92 result_two = Filter.get(filter_two.filter_id, user_two)
93 assert result_two.phrase == filter_two.phrase
94 end
95 end
96
97 test "deleting a filter" do
98 user = insert(:user)
99
100 query = %Filter{
101 user_id: user.id,
102 filter_id: 0,
103 phrase: "knights",
104 context: ["home"]
105 }
106
107 {:ok, _filter} = Filter.create(query)
108 {:ok, filter} = Filter.delete(query)
109 assert is_nil(Repo.get(Filter, filter.filter_id))
110 end
111
112 test "getting all filters by an user" do
113 user = insert(:user)
114
115 query_one = %Filter{
116 user_id: user.id,
117 filter_id: 1,
118 phrase: "knights",
119 context: ["home"]
120 }
121
122 query_two = %Filter{
123 user_id: user.id,
124 filter_id: 2,
125 phrase: "who",
126 context: ["home"]
127 }
128
129 {:ok, filter_one} = Filter.create(query_one)
130 {:ok, filter_two} = Filter.create(query_two)
131 filters = Filter.get_filters(user)
132 assert filter_one in filters
133 assert filter_two in filters
134 end
135
136 test "updating a filter" do
137 user = insert(:user)
138
139 query_one = %Filter{
140 user_id: user.id,
141 filter_id: 1,
142 phrase: "knights",
143 context: ["home"]
144 }
145
146 changes = %{
147 phrase: "who",
148 context: ["home", "timeline"]
149 }
150
151 {:ok, filter_one} = Filter.create(query_one)
152 {:ok, filter_two} = Filter.update(filter_one, changes)
153
154 assert filter_one != filter_two
155 assert filter_two.phrase == changes.phrase
156 assert filter_two.context == changes.context
157 end
158 end