akkoma/test/web/mastodon_api/mastodon_api_controller_test.exs

273 lines
6.9 KiB
Elixir
Raw Normal View History

2018-12-23 20:11:29 +00:00
# Pleroma: A lightweight social networking server
2019-01-09 12:54:37 +00:00
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
2018-12-23 20:11:29 +00:00
# SPDX-License-Identifier: AGPL-3.0-only
2017-09-09 11:15:01 +00:00
defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
use Pleroma.Web.ConnCase
alias Pleroma.Config
2019-02-10 21:57:38 +00:00
alias Pleroma.Notification
alias Pleroma.Repo
alias Pleroma.User
alias Pleroma.Web.CommonAPI
import Pleroma.Factory
import Tesla.Mock
2018-12-03 18:37:55 +00:00
setup do
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
:ok
end
2017-09-09 11:15:01 +00:00
clear_config([:instance, :public])
clear_config([:rich_media, :enabled])
2018-09-01 21:34:15 +00:00
test "getting a list of mutes", %{conn: conn} do
user = insert(:user)
other_user = insert(:user)
{:ok, user} = User.mute(user, other_user)
conn =
conn
|> assign(:user, user)
|> get("/api/v1/mutes")
other_user_id = to_string(other_user.id)
assert [%{"id" => ^other_user_id}] = json_response(conn, 200)
end
2017-11-03 07:51:17 +00:00
test "getting a list of blocks", %{conn: conn} do
user = insert(:user)
other_user = insert(:user)
{:ok, user} = User.block(user, other_user)
2018-03-30 13:01:53 +00:00
conn =
conn
|> assign(:user, user)
|> get("/api/v1/blocks")
2017-11-03 07:51:17 +00:00
2017-11-10 16:18:19 +00:00
other_user_id = to_string(other_user.id)
2017-11-03 07:51:17 +00:00
assert [%{"id" => ^other_user_id}] = json_response(conn, 200)
end
2018-09-01 21:34:15 +00:00
test "unimplemented follow_requests, blocks, domain blocks" do
2017-09-14 16:30:05 +00:00
user = insert(:user)
2018-09-01 21:34:15 +00:00
["blocks", "domain_blocks", "follow_requests"]
2018-03-30 13:01:53 +00:00
|> Enum.each(fn endpoint ->
conn =
build_conn()
|> assign(:user, user)
|> get("/api/v1/#{endpoint}")
2017-09-14 16:30:05 +00:00
assert [] = json_response(conn, 200)
end)
end
2017-09-16 08:42:24 +00:00
test "returns the favorites of a user", %{conn: conn} do
user = insert(:user)
other_user = insert(:user)
{:ok, _} = CommonAPI.post(other_user, %{"status" => "bla"})
{:ok, activity} = CommonAPI.post(other_user, %{"status" => "traps are happy"})
{:ok, _, _} = CommonAPI.favorite(activity.id, user)
first_conn =
2018-03-30 13:01:53 +00:00
conn
|> assign(:user, user)
|> get("/api/v1/favourites")
assert [status] = json_response(first_conn, 200)
2017-10-31 16:57:26 +00:00
assert status["id"] == to_string(activity.id)
2019-01-16 04:09:01 +00:00
assert [{"link", _link_header}] =
Enum.filter(first_conn.resp_headers, fn element -> match?({"link", _}, element) end)
# Honours query params
{:ok, second_activity} =
CommonAPI.post(other_user, %{
"status" =>
"Trees Are Never Sad Look At Them Every Once In Awhile They're Quite Beautiful."
})
{:ok, _, _} = CommonAPI.favorite(second_activity.id, user)
last_like = status["id"]
second_conn =
conn
|> assign(:user, user)
|> get("/api/v1/favourites?since_id=#{last_like}")
assert [second_status] = json_response(second_conn, 200)
assert second_status["id"] == to_string(second_activity.id)
third_conn =
conn
|> assign(:user, user)
|> get("/api/v1/favourites?limit=0")
assert [] = json_response(third_conn, 200)
end
test "put settings", %{conn: conn} do
user = insert(:user)
conn =
conn
|> assign(:user, user)
|> put("/api/web/settings", %{"data" => %{"programming" => "socks"}})
2019-01-16 04:09:01 +00:00
assert _result = json_response(conn, 200)
user = User.get_cached_by_ap_id(user.ap_id)
assert user.info.settings == %{"programming" => "socks"}
end
2019-01-07 13:45:33 +00:00
describe "link headers" do
test "preserves parameters in link headers", %{conn: conn} do
user = insert(:user)
other_user = insert(:user)
{:ok, activity1} =
CommonAPI.post(other_user, %{
"status" => "hi @#{user.nickname}",
"visibility" => "public"
})
2019-03-28 09:39:10 +00:00
{:ok, activity2} =
CommonAPI.post(other_user, %{
"status" => "hi @#{user.nickname}",
"visibility" => "public"
})
2019-03-28 09:39:10 +00:00
notification1 = Repo.get_by(Notification, activity_id: activity1.id)
notification2 = Repo.get_by(Notification, activity_id: activity2.id)
2019-03-28 09:39:10 +00:00
conn =
2019-03-28 09:39:10 +00:00
conn
|> assign(:user, user)
|> get("/api/v1/notifications", %{media_only: true})
2019-03-28 09:39:10 +00:00
assert [link_header] = get_resp_header(conn, "link")
assert link_header =~ ~r/media_only=true/
assert link_header =~ ~r/min_id=#{notification2.id}/
assert link_header =~ ~r/max_id=#{notification1.id}/
2019-03-28 09:39:10 +00:00
end
end
2019-03-28 09:39:10 +00:00
describe "custom emoji" do
test "with tags", %{conn: conn} do
[emoji | _body] =
2019-03-28 09:39:10 +00:00
conn
|> get("/api/v1/custom_emojis")
|> json_response(200)
2019-03-28 09:39:10 +00:00
assert Map.has_key?(emoji, "shortcode")
assert Map.has_key?(emoji, "static_url")
assert Map.has_key?(emoji, "tags")
assert is_list(emoji["tags"])
assert Map.has_key?(emoji, "category")
assert Map.has_key?(emoji, "url")
assert Map.has_key?(emoji, "visible_in_picker")
2019-03-28 09:39:10 +00:00
end
end
2019-03-28 09:39:10 +00:00
describe "index/2 redirections" do
setup %{conn: conn} do
session_opts = [
store: :cookie,
key: "_test",
signing_salt: "cooldude"
]
2019-03-28 09:39:10 +00:00
conn =
2019-03-28 09:39:10 +00:00
conn
|> Plug.Session.call(Plug.Session.init(session_opts))
|> fetch_session()
2019-03-28 09:39:10 +00:00
test_path = "/web/statuses/test"
%{conn: conn, path: test_path}
end
2019-03-28 09:39:10 +00:00
test "redirects not logged-in users to the login page", %{conn: conn, path: path} do
conn = get(conn, path)
2019-03-28 09:39:10 +00:00
assert conn.status == 302
assert redirected_to(conn) == "/web/login"
2019-03-28 09:39:10 +00:00
end
2019-04-12 02:21:32 +00:00
test "redirects not logged-in users to the login page on private instances", %{
conn: conn,
path: path
} do
Config.put([:instance, :public], false)
conn = get(conn, path)
2019-04-12 02:21:32 +00:00
assert conn.status == 302
assert redirected_to(conn) == "/web/login"
end
2019-04-12 02:21:32 +00:00
test "does not redirect logged in users to the login page", %{conn: conn, path: path} do
token = insert(:oauth_token)
2019-04-12 02:21:32 +00:00
conn =
conn
|> assign(:user, token.user)
|> put_session(:oauth_token, token.token)
|> get(path)
2019-04-12 02:21:32 +00:00
assert conn.status == 200
end
2019-04-12 02:21:32 +00:00
test "saves referer path to session", %{conn: conn, path: path} do
conn = get(conn, path)
return_to = Plug.Conn.get_session(conn, :return_to)
2019-04-12 02:21:32 +00:00
assert return_to == path
end
2019-09-06 18:50:00 +00:00
end
describe "empty_array, stubs for mastodon api" do
test "GET /api/v1/accounts/:id/identity_proofs", %{conn: conn} do
user = insert(:user)
res =
conn
|> assign(:user, user)
|> get("/api/v1/accounts/#{user.id}/identity_proofs")
|> json_response(200)
assert res == []
end
test "GET /api/v1/endorsements", %{conn: conn} do
user = insert(:user)
res =
conn
|> assign(:user, user)
|> get("/api/v1/endorsements")
|> json_response(200)
assert res == []
end
test "GET /api/v1/trends", %{conn: conn} do
user = insert(:user)
res =
conn
|> assign(:user, user)
|> get("/api/v1/trends")
|> json_response(200)
assert res == []
end
end
2017-09-09 11:15:01 +00:00
end