branch
[akkoma] / test / web / mastodon_api / controllers / list_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.ListControllerTest do
6 use Pleroma.Web.ConnCase
7
8 alias Pleroma.Repo
9
10 import Pleroma.Factory
11
12 test "creating a list", %{conn: conn} do
13 user = insert(:user)
14
15 conn =
16 conn
17 |> assign(:user, user)
18 |> post("/api/v1/lists", %{"title" => "cuties"})
19
20 assert %{"title" => title} = json_response(conn, 200)
21 assert title == "cuties"
22 end
23
24 test "renders error for invalid params", %{conn: conn} do
25 user = insert(:user)
26
27 conn =
28 conn
29 |> assign(:user, user)
30 |> post("/api/v1/lists", %{"title" => nil})
31
32 assert %{"error" => "can't be blank"} == json_response(conn, :unprocessable_entity)
33 end
34
35 test "listing a user's lists", %{conn: conn} do
36 user = insert(:user)
37
38 conn
39 |> assign(:user, user)
40 |> post("/api/v1/lists", %{"title" => "cuties"})
41
42 conn
43 |> assign(:user, user)
44 |> post("/api/v1/lists", %{"title" => "cofe"})
45
46 conn =
47 conn
48 |> assign(:user, user)
49 |> get("/api/v1/lists")
50
51 assert [
52 %{"id" => _, "title" => "cofe"},
53 %{"id" => _, "title" => "cuties"}
54 ] = json_response(conn, :ok)
55 end
56
57 test "adding users to a list", %{conn: conn} do
58 user = insert(:user)
59 other_user = insert(:user)
60 {:ok, list} = Pleroma.List.create("name", user)
61
62 conn =
63 conn
64 |> assign(:user, user)
65 |> post("/api/v1/lists/#{list.id}/accounts", %{"account_ids" => [other_user.id]})
66
67 assert %{} == json_response(conn, 200)
68 %Pleroma.List{following: following} = Pleroma.List.get(list.id, user)
69 assert following == [other_user.follower_address]
70 end
71
72 test "removing users from a list", %{conn: conn} do
73 user = insert(:user)
74 other_user = insert(:user)
75 third_user = insert(:user)
76 {:ok, list} = Pleroma.List.create("name", user)
77 {:ok, list} = Pleroma.List.follow(list, other_user)
78 {:ok, list} = Pleroma.List.follow(list, third_user)
79
80 conn =
81 conn
82 |> assign(:user, user)
83 |> delete("/api/v1/lists/#{list.id}/accounts", %{"account_ids" => [other_user.id]})
84
85 assert %{} == json_response(conn, 200)
86 %Pleroma.List{following: following} = Pleroma.List.get(list.id, user)
87 assert following == [third_user.follower_address]
88 end
89
90 test "listing users in a list", %{conn: conn} do
91 user = insert(:user)
92 other_user = insert(:user)
93 {:ok, list} = Pleroma.List.create("name", user)
94 {:ok, list} = Pleroma.List.follow(list, other_user)
95
96 conn =
97 conn
98 |> assign(:user, user)
99 |> get("/api/v1/lists/#{list.id}/accounts", %{"account_ids" => [other_user.id]})
100
101 assert [%{"id" => id}] = json_response(conn, 200)
102 assert id == to_string(other_user.id)
103 end
104
105 test "retrieving a list", %{conn: conn} do
106 user = insert(:user)
107 {:ok, list} = Pleroma.List.create("name", user)
108
109 conn =
110 conn
111 |> assign(:user, user)
112 |> get("/api/v1/lists/#{list.id}")
113
114 assert %{"id" => id} = json_response(conn, 200)
115 assert id == to_string(list.id)
116 end
117
118 test "renders 404 if list is not found", %{conn: conn} do
119 user = insert(:user)
120
121 conn =
122 conn
123 |> assign(:user, user)
124 |> get("/api/v1/lists/666")
125
126 assert %{"error" => "List not found"} = json_response(conn, :not_found)
127 end
128
129 test "renaming a list", %{conn: conn} do
130 user = insert(:user)
131 {:ok, list} = Pleroma.List.create("name", user)
132
133 conn =
134 conn
135 |> assign(:user, user)
136 |> put("/api/v1/lists/#{list.id}", %{"title" => "newname"})
137
138 assert %{"title" => name} = json_response(conn, 200)
139 assert name == "newname"
140 end
141
142 test "validates title when renaming a list", %{conn: conn} do
143 user = insert(:user)
144 {:ok, list} = Pleroma.List.create("name", user)
145
146 conn =
147 conn
148 |> assign(:user, user)
149 |> put("/api/v1/lists/#{list.id}", %{"title" => " "})
150
151 assert %{"error" => "can't be blank"} == json_response(conn, :unprocessable_entity)
152 end
153
154 test "deleting a list", %{conn: conn} do
155 user = insert(:user)
156 {:ok, list} = Pleroma.List.create("name", user)
157
158 conn =
159 conn
160 |> assign(:user, user)
161 |> delete("/api/v1/lists/#{list.id}")
162
163 assert %{} = json_response(conn, 200)
164 assert is_nil(Repo.get(Pleroma.List, list.id))
165 end
166 end