2hu
alert('xss')" assert object.data["source"] == post @@ -542,7 +569,7 @@ defmodule Pleroma.Web.CommonAPITest do content_type: "text/markdown" }) - object = Object.normalize(activity) + object = Object.normalize(activity, fetch: false) assert object.data["content"] == "2hu
alert('xss')" assert object.data["source"] == post @@ -615,14 +642,14 @@ defmodule Pleroma.Web.CommonAPITest do end test "it validates character limits are correctly enforced" do - Pleroma.Config.put([:instance, :limit], 5) + clear_config([:instance, :limit], 5) user = insert(:user) assert {:error, "The status is over the character limit"} = CommonAPI.post(user, %{status: "foobar"}) - assert {:ok, activity} = CommonAPI.post(user, %{status: "12345"}) + assert {:ok, _activity} = CommonAPI.post(user, %{status: "12345"}) end test "it can handle activities that expire" do @@ -717,6 +744,22 @@ defmodule Pleroma.Web.CommonAPITest do refute Visibility.visible_for_user?(announce_activity, nil) end + test "author can repeat own private statuses" do + author = insert(:user) + follower = insert(:user) + CommonAPI.follow(follower, author) + + {:ok, activity} = CommonAPI.post(author, %{status: "cofe", visibility: "private"}) + + {:ok, %Activity{} = announce_activity} = CommonAPI.repeat(activity.id, author) + + assert Visibility.is_private?(announce_activity) + refute Visibility.visible_for_user?(announce_activity, nil) + + assert Visibility.visible_for_user?(activity, follower) + assert {:error, :not_found} = CommonAPI.repeat(activity.id, follower) + end + test "favoriting a status" do user = insert(:user) other_user = insert(:user) @@ -750,7 +793,7 @@ defmodule Pleroma.Web.CommonAPITest do describe "pinned statuses" do setup do - Pleroma.Config.put([:instance, :max_pinned_statuses], 1) + clear_config([:instance, :max_pinned_statuses], 1) user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{status: "HI!!!"}) @@ -908,12 +951,34 @@ defmodule Pleroma.Web.CommonAPITest do assert CommonAPI.thread_muted?(user, activity) end + test "add expiring mute", %{user: user, activity: activity} do + {:ok, _} = CommonAPI.add_mute(user, activity, %{expires_in: 60}) + assert CommonAPI.thread_muted?(user, activity) + + worker = Pleroma.Workers.MuteExpireWorker + args = %{"op" => "unmute_conversation", "user_id" => user.id, "activity_id" => activity.id} + + assert_enqueued( + worker: worker, + args: args + ) + + assert :ok = perform_job(worker, args) + refute CommonAPI.thread_muted?(user, activity) + end + test "remove mute", %{user: user, activity: activity} do CommonAPI.add_mute(user, activity) {:ok, _} = CommonAPI.remove_mute(user, activity) refute CommonAPI.thread_muted?(user, activity) end + test "remove mute by ids", %{user: user, activity: activity} do + CommonAPI.add_mute(user, activity) + {:ok, _} = CommonAPI.remove_mute(user.id, activity.id) + refute CommonAPI.thread_muted?(user, activity) + end + test "check that mutes can't be duplicate", %{user: user, activity: activity} do CommonAPI.add_mute(user, activity) {:error, _} = CommonAPI.add_mute(user, activity) @@ -1175,7 +1240,7 @@ defmodule Pleroma.Web.CommonAPITest do poll: %{options: ["Yes", "No"], expires_in: 20} }) - object = Object.normalize(activity) + object = Object.normalize(activity, fetch: false) {:ok, _, object} = CommonAPI.vote(other_user, object, [0]) @@ -1195,7 +1260,7 @@ defmodule Pleroma.Web.CommonAPITest do length: 180_000 }) - object = Object.normalize(activity) + object = Object.normalize(activity, fetch: false) assert object.data["title"] == "lain radio episode 1" @@ -1214,7 +1279,7 @@ defmodule Pleroma.Web.CommonAPITest do visibility: "private" }) - object = Object.normalize(activity) + object = Object.normalize(activity, fetch: false) assert object.data["title"] == "lain radio episode 1" @@ -1242,16 +1307,16 @@ defmodule Pleroma.Web.CommonAPITest do end end - describe "with `local_only` enabled" do + describe "with `local` visibility" do setup do: clear_config([:instance, :federating], true) test "post" do user = insert(:user) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do - {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) assert_not_called(Pleroma.Web.Federator.publish(activity)) end end @@ -1260,13 +1325,13 @@ defmodule Pleroma.Web.CommonAPITest do user = insert(:user) {:ok, %Activity{id: activity_id}} = - CommonAPI.post(user, %{status: "#2hu #2HU", local_only: true}) + CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"deleted_activity_id" => ^activity_id}} = activity} = CommonAPI.delete(activity_id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) assert_not_called(Pleroma.Web.Federator.publish(activity)) end end @@ -1276,13 +1341,13 @@ defmodule Pleroma.Web.CommonAPITest do other_user = insert(:user) {:ok, %Activity{id: activity_id}} = - CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"type" => "Announce"}} = activity} = CommonAPI.repeat(activity_id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1292,7 +1357,7 @@ defmodule Pleroma.Web.CommonAPITest do other_user = insert(:user) {:ok, %Activity{id: activity_id}} = - CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) assert {:ok, _} = CommonAPI.repeat(activity_id, user) @@ -1300,7 +1365,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = CommonAPI.unrepeat(activity_id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1309,13 +1374,13 @@ defmodule Pleroma.Web.CommonAPITest do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"type" => "Like"}} = activity} = CommonAPI.favorite(user, activity.id) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1324,13 +1389,13 @@ defmodule Pleroma.Web.CommonAPITest do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) {:ok, %Activity{}} = CommonAPI.favorite(user, activity.id) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, activity} = CommonAPI.unfavorite(activity.id, user) - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1338,13 +1403,13 @@ defmodule Pleroma.Web.CommonAPITest do test "react_with_emoji" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) with_mock Pleroma.Web.Federator, publish: fn _ -> :ok end do assert {:ok, %Activity{data: %{"type" => "EmojiReact"}} = activity} = CommonAPI.react_with_emoji(activity.id, user, "ð") - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end @@ -1352,7 +1417,7 @@ defmodule Pleroma.Web.CommonAPITest do test "unreact_with_emoji" do user = insert(:user) other_user = insert(:user) - {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", local_only: true}) + {:ok, activity} = CommonAPI.post(other_user, %{status: "cofe", visibility: "local"}) {:ok, _reaction} = CommonAPI.react_with_emoji(activity.id, user, "ð") @@ -1360,7 +1425,7 @@ defmodule Pleroma.Web.CommonAPITest do assert {:ok, %Activity{data: %{"type" => "Undo"}} = activity} = CommonAPI.unreact_with_emoji(activity.id, user, "ð") - assert Activity.local_only?(activity) + assert Visibility.is_local_public?(activity) refute called(Pleroma.Web.Federator.publish(activity)) end end