Browse Source

CommonAPI: Don't error out on double favs/repeats

revert/attachment-cleanup
lain 4 years ago
parent
commit
510776ba31
3 changed files with 25 additions and 10 deletions
  1. +12
    -4
      lib/pleroma/web/common_api/common_api.ex
  2. +6
    -6
      test/web/common_api/common_api_test.exs
  3. +7
    -0
      test/web/mastodon_api/controllers/status_controller_test.exs

+ 12
- 4
lib/pleroma/web/common_api/common_api.ex View File

@@ -85,9 +85,13 @@ defmodule Pleroma.Web.CommonAPI do
def repeat(id_or_ap_id, user, params \\ %{}) do
with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
object <- Object.normalize(activity),
nil <- Utils.get_existing_announce(user.ap_id, object),
announce_activity <- Utils.get_existing_announce(user.ap_id, object),
public <- public_announce?(object, params) do
ActivityPub.announce(user, object, nil, true, public)
if announce_activity do
{:ok, announce_activity, object}
else
ActivityPub.announce(user, object, nil, true, public)
end
else
_ -> {:error, dgettext("errors", "Could not repeat")}
end
@@ -105,8 +109,12 @@ defmodule Pleroma.Web.CommonAPI do
def favorite(id_or_ap_id, user) do
with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
object <- Object.normalize(activity),
nil <- Utils.get_existing_like(user.ap_id, object) do
ActivityPub.like(user, object)
like_activity <- Utils.get_existing_like(user.ap_id, object) do
if like_activity do
{:ok, like_activity, object}
else
ActivityPub.like(user, object)
end
else
_ -> {:error, dgettext("errors", "Could not favorite")}
end


+ 6
- 6
test/web/common_api/common_api_test.exs View File

@@ -284,22 +284,22 @@ defmodule Pleroma.Web.CommonAPITest do
{:ok, %Activity{}, _} = CommonAPI.favorite(activity.id, user)
end

test "retweeting a status twice returns an error" do
test "retweeting a status twice returns the status" do
user = insert(:user)
other_user = insert(:user)

{:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"})
{:ok, %Activity{}, _object} = CommonAPI.repeat(activity.id, user)
{:error, _} = CommonAPI.repeat(activity.id, user)
{:ok, %Activity{} = activity, object} = CommonAPI.repeat(activity.id, user)
{:ok, ^activity, ^object} = CommonAPI.repeat(activity.id, user)
end

test "favoriting a status twice returns an error" do
test "favoriting a status twice returns the status" do
user = insert(:user)
other_user = insert(:user)

{:ok, activity} = CommonAPI.post(other_user, %{"status" => "cofe"})
{:ok, %Activity{}, _object} = CommonAPI.favorite(activity.id, user)
{:error, _} = CommonAPI.favorite(activity.id, user)
{:ok, %Activity{} = activity, object} = CommonAPI.favorite(activity.id, user)
{:ok, ^activity, ^object} = CommonAPI.favorite(activity.id, user)
end
end



+ 7
- 0
test/web/mastodon_api/controllers/status_controller_test.exs View File

@@ -638,6 +638,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do
assert to_string(activity.id) == id
end

test "favoriting twice will just return 200", %{conn: conn} do
activity = insert(:note_activity)

post(conn, "/api/v1/statuses/#{activity.id}/favourite")
assert post(conn, "/api/v2/statuses/#{activity.id}/favourite") |> json_response(200)
end

test "returns 400 error for a wrong id", %{conn: conn} do
conn = post(conn, "/api/v1/statuses/1/favourite")



Loading…
Cancel
Save