1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.MastodonAPI.ListControllerTest do
6 use Pleroma.Web.ConnCase
10 import Pleroma.Factory
12 test "creating a list", %{conn: conn} do
17 |> assign(:user, user)
18 |> post("/api/v1/lists", %{"title" => "cuties"})
20 assert %{"title" => title} = json_response(conn, 200)
21 assert title == "cuties"
24 test "renders error for invalid params", %{conn: conn} do
29 |> assign(:user, user)
30 |> post("/api/v1/lists", %{"title" => nil})
32 assert %{"error" => "can't be blank"} == json_response(conn, :unprocessable_entity)
35 test "listing a user's lists", %{conn: conn} do
39 |> assign(:user, user)
40 |> post("/api/v1/lists", %{"title" => "cuties"})
43 |> assign(:user, user)
44 |> post("/api/v1/lists", %{"title" => "cofe"})
48 |> assign(:user, user)
49 |> get("/api/v1/lists")
52 %{"id" => _, "title" => "cofe"},
53 %{"id" => _, "title" => "cuties"}
54 ] = json_response(conn, :ok)
57 test "adding users to a list", %{conn: conn} do
59 other_user = insert(:user)
60 {:ok, list} = Pleroma.List.create("name", user)
64 |> assign(:user, user)
65 |> post("/api/v1/lists/#{list.id}/accounts", %{"account_ids" => [other_user.id]})
67 assert %{} == json_response(conn, 200)
68 %Pleroma.List{following: following} = Pleroma.List.get(list.id, user)
69 assert following == [other_user.follower_address]
72 test "removing users from a list", %{conn: conn} do
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)
82 |> assign(:user, user)
83 |> delete("/api/v1/lists/#{list.id}/accounts", %{"account_ids" => [other_user.id]})
85 assert %{} == json_response(conn, 200)
86 %Pleroma.List{following: following} = Pleroma.List.get(list.id, user)
87 assert following == [third_user.follower_address]
90 test "listing users in a list", %{conn: conn} do
92 other_user = insert(:user)
93 {:ok, list} = Pleroma.List.create("name", user)
94 {:ok, list} = Pleroma.List.follow(list, other_user)
98 |> assign(:user, user)
99 |> get("/api/v1/lists/#{list.id}/accounts", %{"account_ids" => [other_user.id]})
101 assert [%{"id" => id}] = json_response(conn, 200)
102 assert id == to_string(other_user.id)
105 test "retrieving a list", %{conn: conn} do
107 {:ok, list} = Pleroma.List.create("name", user)
111 |> assign(:user, user)
112 |> get("/api/v1/lists/#{list.id}")
114 assert %{"id" => id} = json_response(conn, 200)
115 assert id == to_string(list.id)
118 test "renders 404 if list is not found", %{conn: conn} do
123 |> assign(:user, user)
124 |> get("/api/v1/lists/666")
126 assert %{"error" => "List not found"} = json_response(conn, :not_found)
129 test "renaming a list", %{conn: conn} do
131 {:ok, list} = Pleroma.List.create("name", user)
135 |> assign(:user, user)
136 |> put("/api/v1/lists/#{list.id}", %{"title" => "newname"})
138 assert %{"title" => name} = json_response(conn, 200)
139 assert name == "newname"
142 test "validates title when renaming a list", %{conn: conn} do
144 {:ok, list} = Pleroma.List.create("name", user)
148 |> assign(:user, user)
149 |> put("/api/v1/lists/#{list.id}", %{"title" => " "})
151 assert %{"error" => "can't be blank"} == json_response(conn, :unprocessable_entity)
154 test "deleting a list", %{conn: conn} do
156 {:ok, list} = Pleroma.List.create("name", user)
160 |> assign(:user, user)
161 |> delete("/api/v1/lists/#{list.id}")
163 assert %{} = json_response(conn, 200)
164 assert is_nil(Repo.get(Pleroma.List, list.id))