forked from AkkomaGang/akkoma
Announcements: Fix all tests.
This commit is contained in:
parent
d9d425708e
commit
23e248694d
21 changed files with 64 additions and 136 deletions
|
@ -4,9 +4,10 @@
|
||||||
|
|
||||||
defmodule Pleroma.Web.ActivityPub.Relay do
|
defmodule Pleroma.Web.ActivityPub.Relay do
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.Object
|
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
alias Pleroma.Web.ActivityPub.Visibility
|
||||||
|
alias Pleroma.Web.CommonAPI
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
@relay_nickname "relay"
|
@relay_nickname "relay"
|
||||||
|
@ -48,11 +49,11 @@ def unfollow(target_instance) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec publish(any()) :: {:ok, Activity.t(), Object.t()} | {:error, any()}
|
@spec publish(any()) :: {:ok, Activity.t()} | {:error, any()}
|
||||||
def publish(%Activity{data: %{"type" => "Create"}} = activity) do
|
def publish(%Activity{data: %{"type" => "Create"}} = activity) do
|
||||||
with %User{} = user <- get_actor(),
|
with %User{} = user <- get_actor(),
|
||||||
%Object{} = object <- Object.normalize(activity) do
|
true <- Visibility.is_public?(activity) do
|
||||||
ActivityPub.announce(user, object, nil, true, false)
|
CommonAPI.repeat(activity.id, user)
|
||||||
else
|
else
|
||||||
error -> format_error(error)
|
error -> format_error(error)
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,7 +11,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
alias Pleroma.Web.ActivityPub.Visibility
|
|
||||||
alias Pleroma.Web.ActivityPub.Utils
|
alias Pleroma.Web.ActivityPub.Utils
|
||||||
|
|
||||||
def handle(object, meta \\ [])
|
def handle(object, meta \\ [])
|
||||||
|
@ -35,9 +34,7 @@ def handle(%{data: %{"type" => "Like"}} = object, meta) do
|
||||||
def handle(%{data: %{"type" => "Announce"}} = object, meta) do
|
def handle(%{data: %{"type" => "Announce"}} = object, meta) do
|
||||||
announced_object = Object.get_by_ap_id(object.data["object"])
|
announced_object = Object.get_by_ap_id(object.data["object"])
|
||||||
|
|
||||||
if Visibility.is_public?(object) do
|
Utils.add_announce_to_object(object, announced_object)
|
||||||
Utils.add_announce_to_object(object, announced_object)
|
|
||||||
end
|
|
||||||
|
|
||||||
Notification.create_notifications(object)
|
Notification.create_notifications(object)
|
||||||
ActivityPub.stream_out(object)
|
ActivityPub.stream_out(object)
|
||||||
|
|
|
@ -210,7 +210,7 @@ def delete(%{assigns: %{user: user}} = conn, %{id: id}) do
|
||||||
|
|
||||||
@doc "POST /api/v1/statuses/:id/reblog"
|
@doc "POST /api/v1/statuses/:id/reblog"
|
||||||
def reblog(%{assigns: %{user: user}, body_params: params} = conn, %{id: ap_id_or_id}) do
|
def reblog(%{assigns: %{user: user}, body_params: params} = conn, %{id: ap_id_or_id}) do
|
||||||
with {:ok, announce, _activity} <- CommonAPI.repeat(ap_id_or_id, user, params),
|
with {:ok, announce} <- CommonAPI.repeat(ap_id_or_id, user, params),
|
||||||
%Activity{} = announce <- Activity.normalize(announce.data) do
|
%Activity{} = announce <- Activity.normalize(announce.data) do
|
||||||
try_render(conn, "show.json", %{activity: announce, for: user, as: :activity})
|
try_render(conn, "show.json", %{activity: announce, for: user, as: :activity})
|
||||||
end
|
end
|
||||||
|
|
|
@ -648,7 +648,7 @@ test "it does not send notification to mentioned users in announces" do
|
||||||
status: "hey @#{other_user.nickname}!"
|
status: "hey @#{other_user.nickname}!"
|
||||||
})
|
})
|
||||||
|
|
||||||
{:ok, activity_two, _} = CommonAPI.repeat(activity_one.id, third_user)
|
{:ok, activity_two} = CommonAPI.repeat(activity_one.id, third_user)
|
||||||
|
|
||||||
{enabled_receivers, _disabled_receivers} =
|
{enabled_receivers, _disabled_receivers} =
|
||||||
Notification.get_notified_from_activity(activity_two)
|
Notification.get_notified_from_activity(activity_two)
|
||||||
|
@ -778,7 +778,7 @@ test "repeating an activity results in 1 notification, then 0 if the activity is
|
||||||
|
|
||||||
assert Enum.empty?(Notification.for_user(user))
|
assert Enum.empty?(Notification.for_user(user))
|
||||||
|
|
||||||
{:ok, _, _} = CommonAPI.repeat(activity.id, other_user)
|
{:ok, _} = CommonAPI.repeat(activity.id, other_user)
|
||||||
|
|
||||||
assert length(Notification.for_user(user)) == 1
|
assert length(Notification.for_user(user)) == 1
|
||||||
|
|
||||||
|
@ -795,7 +795,7 @@ test "repeating an activity results in 1 notification, then 0 if the activity is
|
||||||
|
|
||||||
assert Enum.empty?(Notification.for_user(user))
|
assert Enum.empty?(Notification.for_user(user))
|
||||||
|
|
||||||
{:ok, _, _} = CommonAPI.repeat(activity.id, other_user)
|
{:ok, _} = CommonAPI.repeat(activity.id, other_user)
|
||||||
|
|
||||||
assert length(Notification.for_user(user)) == 1
|
assert length(Notification.for_user(user)) == 1
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,7 @@ test "user is not created" do
|
||||||
|
|
||||||
describe "running rm" do
|
describe "running rm" do
|
||||||
test "user is deleted" do
|
test "user is deleted" do
|
||||||
|
clear_config([:instance, :federating], true)
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
with_mock Pleroma.Web.Federator,
|
with_mock Pleroma.Web.Federator,
|
||||||
|
@ -108,8 +109,10 @@ test "user is deleted" do
|
||||||
|
|
||||||
test "a remote user's create activity is deleted when the object has been pruned" do
|
test "a remote user's create activity is deleted when the object has been pruned" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
{:ok, post} = CommonAPI.post(user, %{status: "uguu"})
|
{:ok, post} = CommonAPI.post(user, %{status: "uguu"})
|
||||||
|
|
||||||
|
clear_config([:instance, :federating], true)
|
||||||
|
|
||||||
object = Object.normalize(post)
|
object = Object.normalize(post)
|
||||||
Object.prune(object)
|
Object.prune(object)
|
||||||
|
|
||||||
|
|
|
@ -992,7 +992,7 @@ test "works for announces" do
|
||||||
user = insert(:user, local: true)
|
user = insert(:user, local: true)
|
||||||
|
|
||||||
{:ok, activity} = CommonAPI.post(actor, %{status: "hello"})
|
{:ok, activity} = CommonAPI.post(actor, %{status: "hello"})
|
||||||
{:ok, announce, _} = CommonAPI.repeat(activity.id, user)
|
{:ok, announce} = CommonAPI.repeat(activity.id, user)
|
||||||
|
|
||||||
recipients = User.get_recipients_from_activity(announce)
|
recipients = User.get_recipients_from_activity(announce)
|
||||||
|
|
||||||
|
@ -1147,7 +1147,7 @@ test "it deactivates a user, all follow relationships and all activities", %{use
|
||||||
|
|
||||||
{:ok, like} = CommonAPI.favorite(user, activity_two.id)
|
{:ok, like} = CommonAPI.favorite(user, activity_two.id)
|
||||||
{:ok, like_two} = CommonAPI.favorite(follower, activity.id)
|
{:ok, like_two} = CommonAPI.favorite(follower, activity.id)
|
||||||
{:ok, repeat, _} = CommonAPI.repeat(activity_two.id, user)
|
{:ok, repeat} = CommonAPI.repeat(activity_two.id, user)
|
||||||
|
|
||||||
{:ok, job} = User.delete(user)
|
{:ok, job} = User.delete(user)
|
||||||
{:ok, _user} = ObanHelpers.perform(job)
|
{:ok, _user} = ObanHelpers.perform(job)
|
||||||
|
|
|
@ -537,7 +537,7 @@ test "doesn't return blocked activities" do
|
||||||
assert Enum.member?(activities, activity_one)
|
assert Enum.member?(activities, activity_one)
|
||||||
|
|
||||||
{:ok, _user_relationship} = User.block(user, %{ap_id: activity_three.data["actor"]})
|
{:ok, _user_relationship} = User.block(user, %{ap_id: activity_three.data["actor"]})
|
||||||
{:ok, _announce, %{data: %{"id" => id}}} = CommonAPI.repeat(activity_three.id, booster)
|
{:ok, %{data: %{"object" => id}}} = CommonAPI.repeat(activity_three.id, booster)
|
||||||
%Activity{} = boost_activity = Activity.get_create_by_object_ap_id(id)
|
%Activity{} = boost_activity = Activity.get_create_by_object_ap_id(id)
|
||||||
activity_three = Activity.get_by_id(activity_three.id)
|
activity_three = Activity.get_by_id(activity_three.id)
|
||||||
|
|
||||||
|
@ -592,7 +592,7 @@ test "doesn't return announce activities concerning blocked users" do
|
||||||
|
|
||||||
{:ok, activity_two} = CommonAPI.post(blockee, %{status: "hey! @#{friend.nickname}"})
|
{:ok, activity_two} = CommonAPI.post(blockee, %{status: "hey! @#{friend.nickname}"})
|
||||||
|
|
||||||
{:ok, activity_three, _} = CommonAPI.repeat(activity_two.id, friend)
|
{:ok, activity_three} = CommonAPI.repeat(activity_two.id, friend)
|
||||||
|
|
||||||
activities =
|
activities =
|
||||||
ActivityPub.fetch_activities([], %{"blocking_user" => blocker})
|
ActivityPub.fetch_activities([], %{"blocking_user" => blocker})
|
||||||
|
@ -618,7 +618,7 @@ test "doesn't return activities from blocked domains" do
|
||||||
|
|
||||||
followed_user = insert(:user)
|
followed_user = insert(:user)
|
||||||
ActivityPub.follow(user, followed_user)
|
ActivityPub.follow(user, followed_user)
|
||||||
{:ok, repeat_activity, _} = CommonAPI.repeat(activity.id, followed_user)
|
{:ok, repeat_activity} = CommonAPI.repeat(activity.id, followed_user)
|
||||||
|
|
||||||
activities =
|
activities =
|
||||||
ActivityPub.fetch_activities([], %{"blocking_user" => user, "skip_preload" => true})
|
ActivityPub.fetch_activities([], %{"blocking_user" => user, "skip_preload" => true})
|
||||||
|
@ -651,7 +651,7 @@ test "does return activities from followed users on blocked domains" do
|
||||||
another_user = insert(:user, %{ap_id: "https://#{domain}/@meanie2"})
|
another_user = insert(:user, %{ap_id: "https://#{domain}/@meanie2"})
|
||||||
bad_note = insert(:note, %{data: %{"actor" => another_user.ap_id}})
|
bad_note = insert(:note, %{data: %{"actor" => another_user.ap_id}})
|
||||||
bad_activity = insert(:note_activity, %{note: bad_note})
|
bad_activity = insert(:note_activity, %{note: bad_note})
|
||||||
{:ok, repeat_activity, _} = CommonAPI.repeat(bad_activity.id, domain_user)
|
{:ok, repeat_activity} = CommonAPI.repeat(bad_activity.id, domain_user)
|
||||||
|
|
||||||
activities =
|
activities =
|
||||||
ActivityPub.fetch_activities([], %{"blocking_user" => blocker, "skip_preload" => true})
|
ActivityPub.fetch_activities([], %{"blocking_user" => blocker, "skip_preload" => true})
|
||||||
|
@ -699,7 +699,7 @@ test "doesn't return muted activities" do
|
||||||
|
|
||||||
activity_three_actor = User.get_by_ap_id(activity_three.data["actor"])
|
activity_three_actor = User.get_by_ap_id(activity_three.data["actor"])
|
||||||
{:ok, _user_relationships} = User.mute(user, activity_three_actor)
|
{:ok, _user_relationships} = User.mute(user, activity_three_actor)
|
||||||
{:ok, _announce, %{data: %{"id" => id}}} = CommonAPI.repeat(activity_three.id, booster)
|
{:ok, %{data: %{"object" => id}}} = CommonAPI.repeat(activity_three.id, booster)
|
||||||
%Activity{} = boost_activity = Activity.get_create_by_object_ap_id(id)
|
%Activity{} = boost_activity = Activity.get_create_by_object_ap_id(id)
|
||||||
activity_three = Activity.get_by_id(activity_three.id)
|
activity_three = Activity.get_by_id(activity_three.id)
|
||||||
|
|
||||||
|
@ -749,7 +749,7 @@ test "does include announces on request" do
|
||||||
|
|
||||||
{:ok, user} = User.follow(user, booster)
|
{:ok, user} = User.follow(user, booster)
|
||||||
|
|
||||||
{:ok, announce, _object} = CommonAPI.repeat(activity_three.id, booster)
|
{:ok, announce} = CommonAPI.repeat(activity_three.id, booster)
|
||||||
|
|
||||||
[announce_activity] = ActivityPub.fetch_activities([user.ap_id | User.following(user)])
|
[announce_activity] = ActivityPub.fetch_activities([user.ap_id | User.following(user)])
|
||||||
|
|
||||||
|
@ -846,7 +846,7 @@ test "doesn't return reblogs for users for whom reblogs have been muted" do
|
||||||
booster = insert(:user)
|
booster = insert(:user)
|
||||||
{:ok, _reblog_mute} = CommonAPI.hide_reblogs(user, booster)
|
{:ok, _reblog_mute} = CommonAPI.hide_reblogs(user, booster)
|
||||||
|
|
||||||
{:ok, activity, _} = CommonAPI.repeat(activity.id, booster)
|
{:ok, activity} = CommonAPI.repeat(activity.id, booster)
|
||||||
|
|
||||||
activities = ActivityPub.fetch_activities([], %{"muting_user" => user})
|
activities = ActivityPub.fetch_activities([], %{"muting_user" => user})
|
||||||
|
|
||||||
|
@ -860,7 +860,7 @@ test "returns reblogs for users for whom reblogs have not been muted" do
|
||||||
{:ok, _reblog_mute} = CommonAPI.hide_reblogs(user, booster)
|
{:ok, _reblog_mute} = CommonAPI.hide_reblogs(user, booster)
|
||||||
{:ok, _reblog_mute} = CommonAPI.show_reblogs(user, booster)
|
{:ok, _reblog_mute} = CommonAPI.show_reblogs(user, booster)
|
||||||
|
|
||||||
{:ok, activity, _} = CommonAPI.repeat(activity.id, booster)
|
{:ok, activity} = CommonAPI.repeat(activity.id, booster)
|
||||||
|
|
||||||
activities = ActivityPub.fetch_activities([], %{"muting_user" => user})
|
activities = ActivityPub.fetch_activities([], %{"muting_user" => user})
|
||||||
|
|
||||||
|
@ -868,75 +868,6 @@ test "returns reblogs for users for whom reblogs have not been muted" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "announcing an object" do
|
|
||||||
test "adds an announce activity to the db" do
|
|
||||||
note_activity = insert(:note_activity)
|
|
||||||
object = Object.normalize(note_activity)
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
{:ok, announce_activity, object} = ActivityPub.announce(user, object)
|
|
||||||
assert object.data["announcement_count"] == 1
|
|
||||||
assert object.data["announcements"] == [user.ap_id]
|
|
||||||
|
|
||||||
assert announce_activity.data["to"] == [
|
|
||||||
User.ap_followers(user),
|
|
||||||
note_activity.data["actor"]
|
|
||||||
]
|
|
||||||
|
|
||||||
assert announce_activity.data["object"] == object.data["id"]
|
|
||||||
assert announce_activity.data["actor"] == user.ap_id
|
|
||||||
assert announce_activity.data["context"] == object.data["context"]
|
|
||||||
end
|
|
||||||
|
|
||||||
test "reverts annouce from object on error" do
|
|
||||||
note_activity = insert(:note_activity)
|
|
||||||
object = Object.normalize(note_activity)
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do
|
|
||||||
assert {:error, :reverted} = ActivityPub.announce(user, object)
|
|
||||||
end
|
|
||||||
|
|
||||||
reloaded_object = Object.get_by_ap_id(object.data["id"])
|
|
||||||
assert reloaded_object == object
|
|
||||||
refute reloaded_object.data["announcement_count"]
|
|
||||||
refute reloaded_object.data["announcements"]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "announcing a private object" do
|
|
||||||
test "adds an announce activity to the db if the audience is not widened" do
|
|
||||||
user = insert(:user)
|
|
||||||
{:ok, note_activity} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
|
||||||
object = Object.normalize(note_activity)
|
|
||||||
|
|
||||||
{:ok, announce_activity, object} = ActivityPub.announce(user, object, nil, true, false)
|
|
||||||
|
|
||||||
assert announce_activity.data["to"] == [User.ap_followers(user)]
|
|
||||||
|
|
||||||
assert announce_activity.data["object"] == object.data["id"]
|
|
||||||
assert announce_activity.data["actor"] == user.ap_id
|
|
||||||
assert announce_activity.data["context"] == object.data["context"]
|
|
||||||
end
|
|
||||||
|
|
||||||
test "does not add an announce activity to the db if the audience is widened" do
|
|
||||||
user = insert(:user)
|
|
||||||
{:ok, note_activity} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
|
||||||
object = Object.normalize(note_activity)
|
|
||||||
|
|
||||||
assert {:error, _} = ActivityPub.announce(user, object, nil, true, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "does not add an announce activity to the db if the announcer is not the author" do
|
|
||||||
user = insert(:user)
|
|
||||||
announcer = insert(:user)
|
|
||||||
{:ok, note_activity} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
|
||||||
object = Object.normalize(note_activity)
|
|
||||||
|
|
||||||
assert {:error, _} = ActivityPub.announce(announcer, object, nil, true, false)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "uploading files" do
|
describe "uploading files" do
|
||||||
test "copies the file to the configured folder" do
|
test "copies the file to the configured folder" do
|
||||||
file = %Plug.Upload{
|
file = %Plug.Upload{
|
||||||
|
|
|
@ -6,7 +6,6 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do
|
||||||
use Pleroma.DataCase
|
use Pleroma.DataCase
|
||||||
|
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.Object
|
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
alias Pleroma.Web.ActivityPub.Relay
|
alias Pleroma.Web.ActivityPub.Relay
|
||||||
|
@ -95,21 +94,20 @@ test "returns error when object is unknown" do
|
||||||
end)
|
end)
|
||||||
|
|
||||||
assert capture_log(fn ->
|
assert capture_log(fn ->
|
||||||
assert Relay.publish(activity) == {:error, nil}
|
assert Relay.publish(activity) == {:error, false}
|
||||||
end) =~ "[error] error: nil"
|
end) =~ "[error] error: false"
|
||||||
end
|
end
|
||||||
|
|
||||||
test_with_mock "returns announce activity and publish to federate",
|
test_with_mock "returns announce activity and publish to federate",
|
||||||
Pleroma.Web.Federator,
|
Pleroma.Web.Federator,
|
||||||
[:passthrough],
|
[:passthrough],
|
||||||
[] do
|
[] do
|
||||||
Pleroma.Config.put([:instance, :federating], true)
|
clear_config([:instance, :federating], true)
|
||||||
service_actor = Relay.get_actor()
|
service_actor = Relay.get_actor()
|
||||||
note = insert(:note_activity)
|
note = insert(:note_activity)
|
||||||
assert {:ok, %Activity{} = activity, %Object{} = obj} = Relay.publish(note)
|
assert {:ok, %Activity{} = activity} = Relay.publish(note)
|
||||||
assert activity.data["type"] == "Announce"
|
assert activity.data["type"] == "Announce"
|
||||||
assert activity.data["actor"] == service_actor.ap_id
|
assert activity.data["actor"] == service_actor.ap_id
|
||||||
assert activity.data["object"] == obj.data["id"]
|
|
||||||
assert called(Pleroma.Web.Federator.publish(activity))
|
assert called(Pleroma.Web.Federator.publish(activity))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -117,13 +115,12 @@ test "returns error when object is unknown" do
|
||||||
Pleroma.Web.Federator,
|
Pleroma.Web.Federator,
|
||||||
[:passthrough],
|
[:passthrough],
|
||||||
[] do
|
[] do
|
||||||
Pleroma.Config.put([:instance, :federating], false)
|
clear_config([:instance, :federating], false)
|
||||||
service_actor = Relay.get_actor()
|
service_actor = Relay.get_actor()
|
||||||
note = insert(:note_activity)
|
note = insert(:note_activity)
|
||||||
assert {:ok, %Activity{} = activity, %Object{} = obj} = Relay.publish(note)
|
assert {:ok, %Activity{} = activity} = Relay.publish(note)
|
||||||
assert activity.data["type"] == "Announce"
|
assert activity.data["type"] == "Announce"
|
||||||
assert activity.data["actor"] == service_actor.ap_id
|
assert activity.data["actor"] == service_actor.ap_id
|
||||||
assert activity.data["object"] == obj.data["id"]
|
|
||||||
refute called(Pleroma.Web.Federator.publish(activity))
|
refute called(Pleroma.Web.Federator.publish(activity))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -325,14 +325,6 @@ test "adds the announce to the original object", %{announce: announce, user: use
|
||||||
assert user.ap_id in object.data["announcements"]
|
assert user.ap_id in object.data["announcements"]
|
||||||
end
|
end
|
||||||
|
|
||||||
test "does not add the announce to the original object if the announce is private", %{
|
|
||||||
private_announce: announce
|
|
||||||
} do
|
|
||||||
{:ok, announce, _} = SideEffects.handle(announce)
|
|
||||||
object = Object.get_by_ap_id(announce.data["object"])
|
|
||||||
assert object.data["announcement_count"] == nil
|
|
||||||
end
|
|
||||||
|
|
||||||
test "does not add the announce to the original object if the actor is a service actor", %{
|
test "does not add the announce to the original object if the actor is a service actor", %{
|
||||||
relay_announce: announce
|
relay_announce: announce
|
||||||
} do
|
} do
|
||||||
|
|
|
@ -1079,7 +1079,7 @@ test "it inlines private announced objects" do
|
||||||
|
|
||||||
{:ok, activity} = CommonAPI.post(user, %{status: "hey", visibility: "private"})
|
{:ok, activity} = CommonAPI.post(user, %{status: "hey", visibility: "private"})
|
||||||
|
|
||||||
{:ok, announce_activity, _} = CommonAPI.repeat(activity.id, user)
|
{:ok, announce_activity} = CommonAPI.repeat(activity.id, user)
|
||||||
|
|
||||||
{:ok, modified} = Transmogrifier.prepare_outgoing(announce_activity.data)
|
{:ok, modified} = Transmogrifier.prepare_outgoing(announce_activity.data)
|
||||||
|
|
||||||
|
|
|
@ -334,7 +334,7 @@ test "fetches existing announce" do
|
||||||
assert object = Object.normalize(note_activity)
|
assert object = Object.normalize(note_activity)
|
||||||
actor = insert(:user)
|
actor = insert(:user)
|
||||||
|
|
||||||
{:ok, announce, _object} = ActivityPub.announce(actor, object)
|
{:ok, announce} = CommonAPI.repeat(note_activity.id, actor)
|
||||||
assert Utils.get_existing_announce(actor.ap_id, object) == announce
|
assert Utils.get_existing_announce(actor.ap_id, object) == announce
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -73,7 +73,7 @@ test "renders an announce activity" do
|
||||||
object = Object.normalize(note)
|
object = Object.normalize(note)
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
{:ok, announce_activity, _} = CommonAPI.repeat(note.id, user)
|
{:ok, announce_activity} = CommonAPI.repeat(note.id, user)
|
||||||
|
|
||||||
result = ObjectView.render("object.json", %{object: announce_activity})
|
result = ObjectView.render("object.json", %{object: announce_activity})
|
||||||
|
|
||||||
|
|
|
@ -148,6 +148,7 @@ test "GET /api/pleroma/admin/users/:nickname requires " <>
|
||||||
describe "DELETE /api/pleroma/admin/users" do
|
describe "DELETE /api/pleroma/admin/users" do
|
||||||
test "single user", %{admin: admin, conn: conn} do
|
test "single user", %{admin: admin, conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
clear_config([:instance, :federating], true)
|
||||||
|
|
||||||
with_mock Pleroma.Web.Federator,
|
with_mock Pleroma.Web.Federator,
|
||||||
publish: fn _ -> nil end do
|
publish: fn _ -> nil end do
|
||||||
|
@ -2944,6 +2945,7 @@ test "proxy tuple ip", %{conn: conn} do
|
||||||
assert ":proxy_url" in db
|
assert ":proxy_url" in db
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@tag capture_log: true
|
||||||
test "doesn't set keys not in the whitelist", %{conn: conn} do
|
test "doesn't set keys not in the whitelist", %{conn: conn} do
|
||||||
clear_config(:database_config_whitelist, [
|
clear_config(:database_config_whitelist, [
|
||||||
{:pleroma, :key1},
|
{:pleroma, :key1},
|
||||||
|
@ -3096,7 +3098,7 @@ test "returns private statuses with godmode on", %{conn: conn, user: user} do
|
||||||
test "excludes reblogs by default", %{conn: conn, user: user} do
|
test "excludes reblogs by default", %{conn: conn, user: user} do
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
{:ok, activity} = CommonAPI.post(user, %{status: "."})
|
{:ok, activity} = CommonAPI.post(user, %{status: "."})
|
||||||
{:ok, %Activity{}, _} = CommonAPI.repeat(activity.id, other_user)
|
{:ok, %Activity{}} = CommonAPI.repeat(activity.id, other_user)
|
||||||
|
|
||||||
conn_res = get(conn, "/api/pleroma/admin/users/#{other_user.nickname}/statuses")
|
conn_res = get(conn, "/api/pleroma/admin/users/#{other_user.nickname}/statuses")
|
||||||
assert json_response(conn_res, 200) |> length() == 0
|
assert json_response(conn_res, 200) |> length() == 0
|
||||||
|
|
|
@ -41,6 +41,8 @@ test "it works with pruned objects" do
|
||||||
|
|
||||||
{:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"})
|
{:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"})
|
||||||
|
|
||||||
|
clear_config([:instance, :federating], true)
|
||||||
|
|
||||||
Object.normalize(post, false)
|
Object.normalize(post, false)
|
||||||
|> Object.prune()
|
|> Object.prune()
|
||||||
|
|
||||||
|
@ -59,6 +61,8 @@ test "it allows users to delete their posts" do
|
||||||
|
|
||||||
{:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"})
|
{:ok, post} = CommonAPI.post(user, %{status: "namu amida butsu"})
|
||||||
|
|
||||||
|
clear_config([:instance, :federating], true)
|
||||||
|
|
||||||
with_mock Pleroma.Web.Federator,
|
with_mock Pleroma.Web.Federator,
|
||||||
publish: fn _ -> nil end do
|
publish: fn _ -> nil end do
|
||||||
assert {:ok, delete} = CommonAPI.delete(post.id, user)
|
assert {:ok, delete} = CommonAPI.delete(post.id, user)
|
||||||
|
@ -440,6 +444,7 @@ test "repeating a status privately" do
|
||||||
CommonAPI.repeat(activity.id, user, %{visibility: "private"})
|
CommonAPI.repeat(activity.id, user, %{visibility: "private"})
|
||||||
|
|
||||||
assert Visibility.is_private?(announce_activity)
|
assert Visibility.is_private?(announce_activity)
|
||||||
|
refute Visibility.visible_for_user?(announce_activity, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "favoriting a status" do
|
test "favoriting a status" do
|
||||||
|
|
|
@ -256,7 +256,7 @@ test "respects blocks", %{user: user_one, conn: conn} do
|
||||||
User.block(user_one, user_two)
|
User.block(user_one, user_two)
|
||||||
|
|
||||||
{:ok, activity} = CommonAPI.post(user_two, %{status: "User one sux0rz"})
|
{:ok, activity} = CommonAPI.post(user_two, %{status: "User one sux0rz"})
|
||||||
{:ok, repeat, _} = CommonAPI.repeat(activity.id, user_three)
|
{:ok, repeat} = CommonAPI.repeat(activity.id, user_three)
|
||||||
|
|
||||||
assert resp =
|
assert resp =
|
||||||
conn
|
conn
|
||||||
|
@ -375,7 +375,7 @@ test "gets an users media", %{conn: conn} do
|
||||||
|
|
||||||
test "gets a user's statuses without reblogs", %{user: user, conn: conn} do
|
test "gets a user's statuses without reblogs", %{user: user, conn: conn} do
|
||||||
{:ok, %{id: post_id}} = CommonAPI.post(user, %{status: "HI!!!"})
|
{:ok, %{id: post_id}} = CommonAPI.post(user, %{status: "HI!!!"})
|
||||||
{:ok, _, _} = CommonAPI.repeat(post_id, user)
|
{:ok, _} = CommonAPI.repeat(post_id, user)
|
||||||
|
|
||||||
conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=true")
|
conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_reblogs=true")
|
||||||
assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200)
|
assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200)
|
||||||
|
@ -678,7 +678,7 @@ test "following without reblogs" do
|
||||||
assert %{"showing_reblogs" => false} = json_response_and_validate_schema(ret_conn, 200)
|
assert %{"showing_reblogs" => false} = json_response_and_validate_schema(ret_conn, 200)
|
||||||
|
|
||||||
{:ok, activity} = CommonAPI.post(other_user, %{status: "hey"})
|
{:ok, activity} = CommonAPI.post(other_user, %{status: "hey"})
|
||||||
{:ok, %{id: reblog_id}, _} = CommonAPI.repeat(activity.id, followed)
|
{:ok, %{id: reblog_id}} = CommonAPI.repeat(activity.id, followed)
|
||||||
|
|
||||||
assert [] ==
|
assert [] ==
|
||||||
conn
|
conn
|
||||||
|
|
|
@ -280,8 +280,8 @@ test "filters notifications for Announce activities" do
|
||||||
{:ok, unlisted_activity} =
|
{:ok, unlisted_activity} =
|
||||||
CommonAPI.post(other_user, %{status: ".", visibility: "unlisted"})
|
CommonAPI.post(other_user, %{status: ".", visibility: "unlisted"})
|
||||||
|
|
||||||
{:ok, _, _} = CommonAPI.repeat(public_activity.id, user)
|
{:ok, _} = CommonAPI.repeat(public_activity.id, user)
|
||||||
{:ok, _, _} = CommonAPI.repeat(unlisted_activity.id, user)
|
{:ok, _} = CommonAPI.repeat(unlisted_activity.id, user)
|
||||||
|
|
||||||
activity_ids =
|
activity_ids =
|
||||||
conn
|
conn
|
||||||
|
@ -301,7 +301,7 @@ test "filters notifications using exclude_types" do
|
||||||
{:ok, mention_activity} = CommonAPI.post(other_user, %{status: "hey @#{user.nickname}"})
|
{:ok, mention_activity} = CommonAPI.post(other_user, %{status: "hey @#{user.nickname}"})
|
||||||
{:ok, create_activity} = CommonAPI.post(user, %{status: "hey"})
|
{:ok, create_activity} = CommonAPI.post(user, %{status: "hey"})
|
||||||
{:ok, favorite_activity} = CommonAPI.favorite(other_user, create_activity.id)
|
{:ok, favorite_activity} = CommonAPI.favorite(other_user, create_activity.id)
|
||||||
{:ok, reblog_activity, _} = CommonAPI.repeat(create_activity.id, other_user)
|
{:ok, reblog_activity} = CommonAPI.repeat(create_activity.id, other_user)
|
||||||
{:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user)
|
{:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user)
|
||||||
|
|
||||||
mention_notification_id = get_notification_id_by_activity(mention_activity)
|
mention_notification_id = get_notification_id_by_activity(mention_activity)
|
||||||
|
@ -339,7 +339,7 @@ test "filters notifications using include_types" do
|
||||||
{:ok, mention_activity} = CommonAPI.post(other_user, %{status: "hey @#{user.nickname}"})
|
{:ok, mention_activity} = CommonAPI.post(other_user, %{status: "hey @#{user.nickname}"})
|
||||||
{:ok, create_activity} = CommonAPI.post(user, %{status: "hey"})
|
{:ok, create_activity} = CommonAPI.post(user, %{status: "hey"})
|
||||||
{:ok, favorite_activity} = CommonAPI.favorite(other_user, create_activity.id)
|
{:ok, favorite_activity} = CommonAPI.favorite(other_user, create_activity.id)
|
||||||
{:ok, reblog_activity, _} = CommonAPI.repeat(create_activity.id, other_user)
|
{:ok, reblog_activity} = CommonAPI.repeat(create_activity.id, other_user)
|
||||||
{:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user)
|
{:ok, _, _, follow_activity} = CommonAPI.follow(other_user, user)
|
||||||
|
|
||||||
mention_notification_id = get_notification_id_by_activity(mention_activity)
|
mention_notification_id = get_notification_id_by_activity(mention_activity)
|
||||||
|
|
|
@ -878,8 +878,8 @@ test "reblogged status for another user" do
|
||||||
user3 = insert(:user)
|
user3 = insert(:user)
|
||||||
{:ok, _} = CommonAPI.favorite(user2, activity.id)
|
{:ok, _} = CommonAPI.favorite(user2, activity.id)
|
||||||
{:ok, _bookmark} = Pleroma.Bookmark.create(user2.id, activity.id)
|
{:ok, _bookmark} = Pleroma.Bookmark.create(user2.id, activity.id)
|
||||||
{:ok, reblog_activity1, _object} = CommonAPI.repeat(activity.id, user1)
|
{:ok, reblog_activity1} = CommonAPI.repeat(activity.id, user1)
|
||||||
{:ok, _, _object} = CommonAPI.repeat(activity.id, user2)
|
{:ok, _} = CommonAPI.repeat(activity.id, user2)
|
||||||
|
|
||||||
conn_res =
|
conn_res =
|
||||||
build_conn()
|
build_conn()
|
||||||
|
@ -917,7 +917,7 @@ test "reblogged status for another user" do
|
||||||
test "unreblogs and returns the unreblogged status", %{user: user, conn: conn} do
|
test "unreblogs and returns the unreblogged status", %{user: user, conn: conn} do
|
||||||
activity = insert(:note_activity)
|
activity = insert(:note_activity)
|
||||||
|
|
||||||
{:ok, _, _} = CommonAPI.repeat(activity.id, user)
|
{:ok, _} = CommonAPI.repeat(activity.id, user)
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
conn
|
conn
|
||||||
|
@ -1427,7 +1427,7 @@ test "requires authentication for private posts", %{user: user} do
|
||||||
|
|
||||||
test "returns users who have reblogged the status", %{conn: conn, activity: activity} do
|
test "returns users who have reblogged the status", %{conn: conn, activity: activity} do
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
{:ok, _, _} = CommonAPI.repeat(activity.id, other_user)
|
{:ok, _} = CommonAPI.repeat(activity.id, other_user)
|
||||||
|
|
||||||
response =
|
response =
|
||||||
conn
|
conn
|
||||||
|
@ -1458,7 +1458,7 @@ test "does not return users who have reblogged the status but are blocked", %{
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
{:ok, _user_relationship} = User.block(user, other_user)
|
{:ok, _user_relationship} = User.block(user, other_user)
|
||||||
|
|
||||||
{:ok, _, _} = CommonAPI.repeat(activity.id, other_user)
|
{:ok, _} = CommonAPI.repeat(activity.id, other_user)
|
||||||
|
|
||||||
response =
|
response =
|
||||||
conn
|
conn
|
||||||
|
@ -1469,12 +1469,12 @@ test "does not return users who have reblogged the status but are blocked", %{
|
||||||
end
|
end
|
||||||
|
|
||||||
test "does not return users who have reblogged the status privately", %{
|
test "does not return users who have reblogged the status privately", %{
|
||||||
conn: conn,
|
conn: conn
|
||||||
activity: activity
|
|
||||||
} do
|
} do
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
{:ok, activity} = CommonAPI.post(other_user, %{status: "my secret post"})
|
||||||
|
|
||||||
{:ok, _, _} = CommonAPI.repeat(activity.id, other_user, %{visibility: "private"})
|
{:ok, _} = CommonAPI.repeat(activity.id, other_user, %{visibility: "private"})
|
||||||
|
|
||||||
response =
|
response =
|
||||||
conn
|
conn
|
||||||
|
@ -1486,7 +1486,7 @@ test "does not return users who have reblogged the status privately", %{
|
||||||
|
|
||||||
test "does not fail on an unauthenticated request", %{activity: activity} do
|
test "does not fail on an unauthenticated request", %{activity: activity} do
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
{:ok, _, _} = CommonAPI.repeat(activity.id, other_user)
|
{:ok, _} = CommonAPI.repeat(activity.id, other_user)
|
||||||
|
|
||||||
response =
|
response =
|
||||||
build_conn()
|
build_conn()
|
||||||
|
|
|
@ -78,7 +78,7 @@ test "Reblog notification" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
another_user = insert(:user)
|
another_user = insert(:user)
|
||||||
{:ok, create_activity} = CommonAPI.post(user, %{status: "hey"})
|
{:ok, create_activity} = CommonAPI.post(user, %{status: "hey"})
|
||||||
{:ok, reblog_activity, _object} = CommonAPI.repeat(create_activity.id, another_user)
|
{:ok, reblog_activity} = CommonAPI.repeat(create_activity.id, another_user)
|
||||||
{:ok, [notification]} = Notification.create_notifications(reblog_activity)
|
{:ok, [notification]} = Notification.create_notifications(reblog_activity)
|
||||||
reblog_activity = Activity.get_by_id(create_activity.id)
|
reblog_activity = Activity.get_by_id(create_activity.id)
|
||||||
|
|
||||||
|
|
|
@ -442,7 +442,7 @@ test "a reblog" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
activity = insert(:note_activity)
|
activity = insert(:note_activity)
|
||||||
|
|
||||||
{:ok, reblog, _} = CommonAPI.repeat(activity.id, user)
|
{:ok, reblog} = CommonAPI.repeat(activity.id, user)
|
||||||
|
|
||||||
represented = StatusView.render("show.json", %{for: user, activity: reblog})
|
represented = StatusView.render("show.json", %{for: user, activity: reblog})
|
||||||
|
|
||||||
|
@ -600,7 +600,7 @@ test "does not embed a relationship in the account in reposts" do
|
||||||
status: "˙˙ɐʎns"
|
status: "˙˙ɐʎns"
|
||||||
})
|
})
|
||||||
|
|
||||||
{:ok, activity, _object} = CommonAPI.repeat(activity.id, other_user)
|
{:ok, activity} = CommonAPI.repeat(activity.id, other_user)
|
||||||
|
|
||||||
result = StatusView.render("show.json", %{activity: activity, for: user})
|
result = StatusView.render("show.json", %{activity: activity, for: user})
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,7 @@ test "renders title and body for announce activity" do
|
||||||
"<span>Lorem ipsum dolor sit amet</span>, consectetur :firefox: adipiscing elit. Fusce sagittis finibus turpis."
|
"<span>Lorem ipsum dolor sit amet</span>, consectetur :firefox: adipiscing elit. Fusce sagittis finibus turpis."
|
||||||
})
|
})
|
||||||
|
|
||||||
{:ok, announce_activity, _} = CommonAPI.repeat(activity.id, user)
|
{:ok, announce_activity} = CommonAPI.repeat(activity.id, user)
|
||||||
object = Object.normalize(activity)
|
object = Object.normalize(activity)
|
||||||
|
|
||||||
assert Impl.format_body(%{activity: announce_activity}, user, object) ==
|
assert Impl.format_body(%{activity: announce_activity}, user, object) ==
|
||||||
|
|
|
@ -106,7 +106,7 @@ test "it streams boosts of the user in the 'user' stream", %{user: user} do
|
||||||
|
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
{:ok, activity} = CommonAPI.post(other_user, %{status: "hey"})
|
{:ok, activity} = CommonAPI.post(other_user, %{status: "hey"})
|
||||||
{:ok, announce, _} = CommonAPI.repeat(activity.id, user)
|
{:ok, announce} = CommonAPI.repeat(activity.id, user)
|
||||||
|
|
||||||
assert_receive {:render_with_user, Pleroma.Web.StreamerView, "update.json", ^announce}
|
assert_receive {:render_with_user, Pleroma.Web.StreamerView, "update.json", ^announce}
|
||||||
refute Streamer.filtered_by_user?(user, announce)
|
refute Streamer.filtered_by_user?(user, announce)
|
||||||
|
@ -427,7 +427,7 @@ test "it filters muted reblogs" do
|
||||||
{:ok, create_activity} = CommonAPI.post(user3, %{status: "I'm kawen"})
|
{:ok, create_activity} = CommonAPI.post(user3, %{status: "I'm kawen"})
|
||||||
|
|
||||||
Streamer.get_topic_and_add_socket("user", user1)
|
Streamer.get_topic_and_add_socket("user", user1)
|
||||||
{:ok, announce_activity, _} = CommonAPI.repeat(create_activity.id, user2)
|
{:ok, announce_activity} = CommonAPI.repeat(create_activity.id, user2)
|
||||||
assert_receive {:render_with_user, _, _, ^announce_activity}
|
assert_receive {:render_with_user, _, _, ^announce_activity}
|
||||||
assert Streamer.filtered_by_user?(user1, announce_activity)
|
assert Streamer.filtered_by_user?(user1, announce_activity)
|
||||||
end
|
end
|
||||||
|
@ -440,7 +440,7 @@ test "it filters reblog notification for reblog-muted actors" do
|
||||||
|
|
||||||
{:ok, create_activity} = CommonAPI.post(user1, %{status: "I'm kawen"})
|
{:ok, create_activity} = CommonAPI.post(user1, %{status: "I'm kawen"})
|
||||||
Streamer.get_topic_and_add_socket("user", user1)
|
Streamer.get_topic_and_add_socket("user", user1)
|
||||||
{:ok, _favorite_activity, _} = CommonAPI.repeat(create_activity.id, user2)
|
{:ok, _announce_activity} = CommonAPI.repeat(create_activity.id, user2)
|
||||||
|
|
||||||
assert_receive {:render_with_user, _, "notification.json", notif}
|
assert_receive {:render_with_user, _, "notification.json", notif}
|
||||||
assert Streamer.filtered_by_user?(user1, notif)
|
assert Streamer.filtered_by_user?(user1, notif)
|
||||||
|
|
Loading…
Reference in a new issue