pleroma/test/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_...

149 lines
4.2 KiB
Elixir

# Pleroma: A lightweight social networking server
# Copyright © 2017-2024 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.PleromaAPI.BookmarkFolderControllerTest do
use Pleroma.Web.ConnCase
alias Pleroma.BookmarkFolder
# alias Pleroma.Object
# alias Pleroma.Tests.Helpers
# alias Pleroma.UnstubbedConfigMock, as: ConfigMock
# alias Pleroma.User
# alias Pleroma.Web.ActivityPub.ActivityPub
# alias Pleroma.Web.CommonAPI
# import Mox
import Pleroma.Factory
describe "GET /api/v1/pleroma/bookmark_folders" do
setup do: oauth_access(["read:bookmarks"])
test "it lists bookmark folders", %{conn: conn, user: user} do
{:ok, folder} = BookmarkFolder.create(user.id, "Bookmark folder")
folder_id = folder.id
result =
conn
|> get("/api/v1/pleroma/bookmark_folders")
|> json_response_and_validate_schema(200)
assert [
%{
"id" => ^folder_id,
"name" => "Bookmark folder",
"emoji" => nil,
"source" => %{
"emoji" => nil
}
}
] = result
end
end
describe "POST /api/v1/pleroma/bookmark_folders" do
setup do: oauth_access(["write:bookmarks"])
test "it creates a bookmark folder", %{conn: conn} do
result =
conn
|> put_req_header("content-type", "application/json")
|> post("/api/v1/pleroma/bookmark_folders", %{
name: "Bookmark folder",
emoji: "📁"
})
|> json_response_and_validate_schema(200)
assert %{
"name" => "Bookmark folder",
"emoji" => "📁",
"source" => %{
"emoji" => "📁"
}
} = result
end
test "it returns error for invalid emoji", %{conn: conn} do
result =
conn
|> put_req_header("content-type", "application/json")
|> post("/api/v1/pleroma/bookmark_folders", %{
name: "Bookmark folder",
emoji: "not an emoji"
})
|> json_response_and_validate_schema(422)
assert %{"error" => "Invalid emoji"} = result
end
end
describe "PATCH /api/v1/pleroma/bookmark_folders/:id" do
setup do: oauth_access(["write:bookmarks"])
test "it updates a bookmark folder", %{conn: conn, user: user} do
{:ok, folder} = BookmarkFolder.create(user.id, "Bookmark folder")
result =
conn
|> put_req_header("content-type", "application/json")
|> patch("/api/v1/pleroma/bookmark_folders/#{folder.id}", %{
name: "bookmark folder"
})
|> json_response_and_validate_schema(200)
assert %{
"name" => "bookmark folder"
} = result
end
test "it returns error when updating others' folders", %{conn: conn} do
other_user = insert(:user)
{:ok, folder} = BookmarkFolder.create(other_user.id, "Bookmark folder")
result =
conn
|> put_req_header("content-type", "application/json")
|> patch("/api/v1/pleroma/bookmark_folders/#{folder.id}", %{
name: "bookmark folder"
})
|> json_response_and_validate_schema(403)
assert %{
"error" => "Access denied"
} = result
end
end
describe "DELETE /api/v1/pleroma/bookmark_folders/:id" do
setup do: oauth_access(["write:bookmarks"])
test "it deleting a bookmark folder", %{conn: conn, user: user} do
{:ok, folder} = BookmarkFolder.create(user.id, "Bookmark folder")
assert conn
|> delete("/api/v1/pleroma/bookmark_folders/#{folder.id}")
|> json_response_and_validate_schema(200)
folders = BookmarkFolder.for_user(user.id)
assert length(folders) == 0
end
test "it returns error when deleting others' folders", %{conn: conn} do
other_user = insert(:user)
{:ok, folder} = BookmarkFolder.create(other_user.id, "Bookmark folder")
result =
conn
|> patch("/api/v1/pleroma/bookmark_folders/#{folder.id}")
|> json_response_and_validate_schema(403)
assert %{
"error" => "Access denied"
} = result
end
end
end