56019d53a8
While debugging the follow breakage, I observed that our sharedInbox usage did not match the rules in the specification. Accordingly, I have better aligned our usage of sharedInbox with the rules outlined in the ActivityPub specification.
112 lines
3.3 KiB
Elixir
112 lines
3.3 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2019 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.Web.ActivityPub.PublisherTest do
|
|
use Pleroma.DataCase
|
|
|
|
import Pleroma.Factory
|
|
|
|
alias Pleroma.Activity
|
|
alias Pleroma.Web.ActivityPub.Publisher
|
|
|
|
@as_public "https://www.w3.org/ns/activitystreams#Public"
|
|
|
|
describe "determine_inbox/2" do
|
|
test "it returns sharedInbox for messages involving as:Public in to" do
|
|
user =
|
|
insert(:user, %{
|
|
info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
|
|
})
|
|
|
|
activity = %Activity{
|
|
data: %{"to" => [@as_public], "cc" => [user.follower_address]}
|
|
}
|
|
|
|
assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
|
|
end
|
|
|
|
test "it returns sharedInbox for messages involving as:Public in cc" do
|
|
user =
|
|
insert(:user, %{
|
|
info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
|
|
})
|
|
|
|
activity = %Activity{
|
|
data: %{"cc" => [@as_public], "to" => [user.follower_address]}
|
|
}
|
|
|
|
assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
|
|
end
|
|
|
|
test "it returns sharedInbox for messages involving multiple recipients in to" do
|
|
user =
|
|
insert(:user, %{
|
|
info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
|
|
})
|
|
|
|
user_two = insert(:user)
|
|
user_three = insert(:user)
|
|
|
|
activity = %Activity{
|
|
data: %{"cc" => [], "to" => [user.ap_id, user_two.ap_id, user_three.ap_id]}
|
|
}
|
|
|
|
assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
|
|
end
|
|
|
|
test "it returns sharedInbox for messages involving multiple recipients in cc" do
|
|
user =
|
|
insert(:user, %{
|
|
info: %{source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}}}
|
|
})
|
|
|
|
user_two = insert(:user)
|
|
user_three = insert(:user)
|
|
|
|
activity = %Activity{
|
|
data: %{"to" => [], "cc" => [user.ap_id, user_two.ap_id, user_three.ap_id]}
|
|
}
|
|
|
|
assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
|
|
end
|
|
|
|
test "it returns sharedInbox for messages involving multiple recipients in total" do
|
|
user =
|
|
insert(:user, %{
|
|
info: %{
|
|
source_data: %{
|
|
"inbox" => "http://example.com/personal-inbox",
|
|
"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}
|
|
}
|
|
}
|
|
})
|
|
|
|
user_two = insert(:user)
|
|
|
|
activity = %Activity{
|
|
data: %{"to" => [user_two.ap_id], "cc" => [user.ap_id]}
|
|
}
|
|
|
|
assert Publisher.determine_inbox(activity, user) == "http://example.com/inbox"
|
|
end
|
|
|
|
test "it returns inbox for messages involving single recipients in total" do
|
|
user =
|
|
insert(:user, %{
|
|
info: %{
|
|
source_data: %{
|
|
"inbox" => "http://example.com/personal-inbox",
|
|
"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}
|
|
}
|
|
}
|
|
})
|
|
|
|
activity = %Activity{
|
|
data: %{"to" => [user.ap_id], "cc" => []}
|
|
}
|
|
|
|
assert Publisher.determine_inbox(activity, user) == "http://example.com/personal-inbox"
|
|
end
|
|
end
|
|
end
|