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