|
|
@@ -35,7 +35,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
user = insert(:user) |
|
|
|
following = insert(:user) |
|
|
|
|
|
|
|
{:ok, _activity} = TwitterAPI.create_status(following, %{"status" => "test"}) |
|
|
|
{:ok, _activity} = CommonAPI.post(following, %{"status" => "test"}) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
@@ -58,7 +58,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
following = insert(:user) |
|
|
|
|
|
|
|
capture_log(fn -> |
|
|
|
{:ok, _activity} = TwitterAPI.create_status(following, %{"status" => "test"}) |
|
|
|
{:ok, _activity} = CommonAPI.post(following, %{"status" => "test"}) |
|
|
|
|
|
|
|
{:ok, [_activity]} = |
|
|
|
OStatus.fetch_activity_from_url("https://shitposter.club/notice/2827873") |
|
|
@@ -1004,8 +1004,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
test "list timeline", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
{:ok, _activity_one} = TwitterAPI.create_status(user, %{"status" => "Marisa is cute."}) |
|
|
|
{:ok, activity_two} = TwitterAPI.create_status(other_user, %{"status" => "Marisa is cute."}) |
|
|
|
{:ok, _activity_one} = CommonAPI.post(user, %{"status" => "Marisa is cute."}) |
|
|
|
{:ok, activity_two} = CommonAPI.post(other_user, %{"status" => "Marisa is cute."}) |
|
|
|
{:ok, list} = Pleroma.List.create("name", user) |
|
|
|
{:ok, list} = Pleroma.List.follow(list, other_user) |
|
|
|
|
|
|
@@ -1022,10 +1022,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
test "list timeline does not leak non-public statuses for unfollowed users", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
{:ok, activity_one} = TwitterAPI.create_status(other_user, %{"status" => "Marisa is cute."}) |
|
|
|
{:ok, activity_one} = CommonAPI.post(other_user, %{"status" => "Marisa is cute."}) |
|
|
|
|
|
|
|
{:ok, _activity_two} = |
|
|
|
TwitterAPI.create_status(other_user, %{ |
|
|
|
CommonAPI.post(other_user, %{ |
|
|
|
"status" => "Marisa is cute.", |
|
|
|
"visibility" => "private" |
|
|
|
}) |
|
|
@@ -1049,8 +1049,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
|
|
|
|
{:ok, activity} = |
|
|
|
TwitterAPI.create_status(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
{:ok, activity} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
|
|
|
|
{:ok, [_notification]} = Notification.create_notifications(activity) |
|
|
|
|
|
|
@@ -1072,8 +1071,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
|
|
|
|
{:ok, activity} = |
|
|
|
TwitterAPI.create_status(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
{:ok, activity} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
|
|
|
|
{:ok, [notification]} = Notification.create_notifications(activity) |
|
|
|
|
|
|
@@ -1095,8 +1093,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
|
|
|
|
{:ok, activity} = |
|
|
|
TwitterAPI.create_status(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
{:ok, activity} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
|
|
|
|
{:ok, [notification]} = Notification.create_notifications(activity) |
|
|
|
|
|
|
@@ -1112,8 +1109,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
|
|
|
|
{:ok, activity} = |
|
|
|
TwitterAPI.create_status(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
{:ok, activity} = CommonAPI.post(other_user, %{"status" => "hi @#{user.nickname}"}) |
|
|
|
|
|
|
|
{:ok, [_notification]} = Notification.create_notifications(activity) |
|
|
|
|
|
|
@@ -1395,6 +1391,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|
|
|
|
assert to_string(activity.id) == id |
|
|
|
end |
|
|
|
|
|
|
|
test "returns 400 error when activity is not exist", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/statuses/foo/reblog") |
|
|
|
|
|
|
|
assert json_response(conn, 400) == %{"error" => "Could not repeat"} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
describe "unreblogging" do |
|
|
@@ -1413,6 +1420,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|
|
|
|
assert to_string(activity.id) == id |
|
|
|
end |
|
|
|
|
|
|
|
test "returns 400 error when activity is not exist", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/statuses/foo/unreblog") |
|
|
|
|
|
|
|
assert json_response(conn, 400) == %{"error" => "Could not unrepeat"} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
describe "favoriting" do |
|
|
@@ -1431,16 +1449,15 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
assert to_string(activity.id) == id |
|
|
|
end |
|
|
|
|
|
|
|
test "returns 500 for a wrong id", %{conn: conn} do |
|
|
|
test "returns 400 error for a wrong id", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
|
|
|
|
resp = |
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/statuses/1/favourite") |
|
|
|
|> json_response(500) |
|
|
|
|
|
|
|
assert resp == "Something went wrong" |
|
|
|
assert json_response(conn, 400) == %{"error" => "Could not favorite"} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
@@ -1461,6 +1478,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|
|
|
|
assert to_string(activity.id) == id |
|
|
|
end |
|
|
|
|
|
|
|
test "returns 400 error for a wrong id", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/statuses/1/unfavourite") |
|
|
|
|
|
|
|
assert json_response(conn, 400) == %{"error" => "Could not unfavorite"} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
describe "user timelines" do |
|
|
@@ -1531,10 +1559,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|
|
|
|
media = |
|
|
|
TwitterAPI.upload(file, user, "json") |
|
|
|
|> Poison.decode!() |
|
|
|
|> Jason.decode!() |
|
|
|
|
|
|
|
{:ok, image_post} = |
|
|
|
TwitterAPI.create_status(user, %{"status" => "cofe", "media_ids" => [media["media_id"]]}) |
|
|
|
CommonAPI.post(user, %{"status" => "cofe", "media_ids" => [media["media_id"]]}) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
@@ -1857,7 +1885,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
following = insert(:user) |
|
|
|
|
|
|
|
capture_log(fn -> |
|
|
|
{:ok, activity} = TwitterAPI.create_status(following, %{"status" => "test #2hu"}) |
|
|
|
{:ok, activity} = CommonAPI.post(following, %{"status" => "test #2hu"}) |
|
|
|
|
|
|
|
{:ok, [_activity]} = |
|
|
|
OStatus.fetch_activity_from_url("https://shitposter.club/notice/2827873") |
|
|
@@ -2616,7 +2644,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
insert(:user, %{local: false, nickname: "u@peer1.com"}) |
|
|
|
insert(:user, %{local: false, nickname: "u@peer2.com"}) |
|
|
|
|
|
|
|
{:ok, _} = TwitterAPI.create_status(user, %{"status" => "cofe"}) |
|
|
|
{:ok, _} = CommonAPI.post(user, %{"status" => "cofe"}) |
|
|
|
|
|
|
|
# Stats should count users with missing or nil `info.deactivated` value |
|
|
|
user = User.get_cached_by_id(user.id) |
|
|
@@ -2709,6 +2737,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|> json_response(200) |
|
|
|
end |
|
|
|
|
|
|
|
test "/pin: returns 400 error when activity is not public", %{conn: conn, user: user} do |
|
|
|
{:ok, dm} = CommonAPI.post(user, %{"status" => "test", "visibility" => "direct"}) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/statuses/#{dm.id}/pin") |
|
|
|
|
|
|
|
assert json_response(conn, 400) == %{"error" => "Could not pin"} |
|
|
|
end |
|
|
|
|
|
|
|
test "unpin status", %{conn: conn, user: user, activity: activity} do |
|
|
|
{:ok, _} = CommonAPI.pin(activity.id, user) |
|
|
|
|
|
|
@@ -2728,6 +2767,15 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|> json_response(200) |
|
|
|
end |
|
|
|
|
|
|
|
test "/unpin: returns 400 error when activity is not exist", %{conn: conn, user: user} do |
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/statuses/1/unpin") |
|
|
|
|
|
|
|
assert json_response(conn, 400) == %{"error" => "Could not unpin"} |
|
|
|
end |
|
|
|
|
|
|
|
test "max pinned statuses", %{conn: conn, user: user, activity: activity_one} do |
|
|
|
{:ok, activity_two} = CommonAPI.post(user, %{"status" => "HI!!!"}) |
|
|
|
|
|
|
@@ -2902,6 +2950,17 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|> json_response(200) |
|
|
|
end |
|
|
|
|
|
|
|
test "cannot mute already muted conversation", %{conn: conn, user: user, activity: activity} do |
|
|
|
{:ok, _} = CommonAPI.add_mute(user, activity) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/statuses/#{activity.id}/mute") |
|
|
|
|
|
|
|
assert json_response(conn, 400) == %{"error" => "conversation is already muted"} |
|
|
|
end |
|
|
|
|
|
|
|
test "unmute conversation", %{conn: conn, user: user, activity: activity} do |
|
|
|
{:ok, _} = CommonAPI.add_mute(user, activity) |
|
|
|
|
|
|
@@ -2946,7 +3005,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|> post("/api/v1/reports", %{ |
|
|
|
"account_id" => target_user.id, |
|
|
|
"status_ids" => [activity.id], |
|
|
|
"comment" => "bad status!" |
|
|
|
"comment" => "bad status!", |
|
|
|
"forward" => "false" |
|
|
|
}) |
|
|
|
|> json_response(200) |
|
|
|
end |
|
|
@@ -2979,6 +3039,19 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
|> post("/api/v1/reports", %{"account_id" => target_user.id, "comment" => comment}) |
|
|
|
|> json_response(400) |
|
|
|
end |
|
|
|
|
|
|
|
test "returns error when account is not exist", %{ |
|
|
|
conn: conn, |
|
|
|
reporter: reporter, |
|
|
|
activity: activity |
|
|
|
} do |
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, reporter) |
|
|
|
|> post("/api/v1/reports", %{"status_ids" => [activity.id], "account_id" => "foo"}) |
|
|
|
|
|
|
|
assert json_response(conn, 400) == %{"error" => "Account not found"} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
describe "link headers" do |
|
|
@@ -3338,7 +3411,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
user2 = insert(:user) |
|
|
|
user3 = insert(:user) |
|
|
|
|
|
|
|
{:ok, replied_to} = TwitterAPI.create_status(user1, %{"status" => "cofe"}) |
|
|
|
{:ok, replied_to} = CommonAPI.post(user1, %{"status" => "cofe"}) |
|
|
|
|
|
|
|
# Reply to status from another user |
|
|
|
conn1 = |
|
|
@@ -3603,5 +3676,135 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do |
|
|
|
total_items == 1 |
|
|
|
end) |
|
|
|
end |
|
|
|
|
|
|
|
test "does not allow choice index to be greater than options count", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
|
|
|
|
{:ok, activity} = |
|
|
|
CommonAPI.post(user, %{ |
|
|
|
"status" => "Am I cute?", |
|
|
|
"poll" => %{"options" => ["Yes", "No"], "expires_in" => 20} |
|
|
|
}) |
|
|
|
|
|
|
|
object = Object.normalize(activity) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, other_user) |
|
|
|
|> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [2]}) |
|
|
|
|
|
|
|
assert json_response(conn, 422) == %{"error" => "Invalid indices"} |
|
|
|
end |
|
|
|
|
|
|
|
test "returns 404 error when object is not exist", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, user) |
|
|
|
|> post("/api/v1/polls/1/votes", %{"choices" => [0]}) |
|
|
|
|
|
|
|
assert json_response(conn, 404) == %{"error" => "Record not found"} |
|
|
|
end |
|
|
|
|
|
|
|
test "returns 404 when poll is private and not available for user", %{conn: conn} do |
|
|
|
user = insert(:user) |
|
|
|
other_user = insert(:user) |
|
|
|
|
|
|
|
{:ok, activity} = |
|
|
|
CommonAPI.post(user, %{ |
|
|
|
"status" => "Am I cute?", |
|
|
|
"poll" => %{"options" => ["Yes", "No"], "expires_in" => 20}, |
|
|
|
"visibility" => "private" |
|
|
|
}) |
|
|
|
|
|
|
|
object = Object.normalize(activity) |
|
|
|
|
|
|
|
conn = |
|
|
|
conn |
|
|
|
|> assign(:user, other_user) |
|
|
|
|> post("/api/v1/polls/#{object.id}/votes", %{"choices" => [0]}) |
|
|
|
|
|
|
|
assert json_response(conn, 404) == %{"error" => "Record not found"} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
describe "GET /api/v1/statuses/:id/favourited_by" do |
|
|
|
setup do |
|
|
|
user = insert(:user) |
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "test"}) |
|
|
|
|
|
|
|
conn = |
|
|
|
build_conn() |
|
|
|
|> assign(:user, user) |
|
|
|
|
|
|
|
[conn: conn, activity: activity] |
|
|
|
end |
|
|
|
|
|
|
|
test "returns users who have favorited the status", %{conn: conn, activity: activity} do |
|
|
|
other_user = insert(:user) |
|
|
|
{:ok, _, _} = CommonAPI.favorite(activity.id, other_user) |
|
|
|
|
|
|
|
response = |
|
|
|
conn |
|
|
|
|> get("/api/v1/statuses/#{activity.id}/favourited_by") |
|
|
|
|> json_response(:ok) |
|
|
|
|
|
|
|
[%{"id" => id}] = response |
|
|
|
|
|
|
|
assert id == other_user.id |
|
|
|
end |
|
|
|
|
|
|
|
test "returns empty array when status has not been favorited yet", %{ |
|
|
|
conn: conn, |
|
|
|
activity: activity |
|
|
|
} do |
|
|
|
response = |
|
|
|
conn |
|
|
|
|> get("/api/v1/statuses/#{activity.id}/favourited_by") |
|
|
|
|> json_response(:ok) |
|
|
|
|
|
|
|
assert Enum.empty?(response) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
describe "GET /api/v1/statuses/:id/reblogged_by" do |
|
|
|
setup do |
|
|
|
user = insert(:user) |
|
|
|
{:ok, activity} = CommonAPI.post(user, %{"status" => "test"}) |
|
|
|
|
|
|
|
conn = |
|
|
|
build_conn() |
|
|
|
|> assign(:user, user) |
|
|
|
|
|
|
|
[conn: conn, activity: activity] |
|
|
|
end |
|
|
|
|
|
|
|
test "returns users who have reblogged the status", %{conn: conn, activity: activity} do |
|
|
|
other_user = insert(:user) |
|
|
|
{:ok, _, _} = CommonAPI.repeat(activity.id, other_user) |
|
|
|
|
|
|
|
response = |
|
|
|
conn |
|
|
|
|> get("/api/v1/statuses/#{activity.id}/reblogged_by") |
|
|
|
|> json_response(:ok) |
|
|
|
|
|
|
|
[%{"id" => id}] = response |
|
|
|
|
|
|
|
assert id == other_user.id |
|
|
|
end |
|
|
|
|
|
|
|
test "returns empty array when status has not been reblogged yet", %{ |
|
|
|
conn: conn, |
|
|
|
activity: activity |
|
|
|
} do |
|
|
|
response = |
|
|
|
conn |
|
|
|
|> get("/api/v1/statuses/#{activity.id}/reblogged_by") |
|
|
|
|> json_response(:ok) |
|
|
|
|
|
|
|
assert Enum.empty?(response) |
|
|
|
end |
|
|
|
end |
|
|
|
end |