Support private pinned posts from Mastodon
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
84dcb55b0f
commit
88c21b9282
3 changed files with 95 additions and 1 deletions
|
@ -1664,7 +1664,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
||||||
"orderedItems" => objects
|
"orderedItems" => objects
|
||||||
})
|
})
|
||||||
when type in ["OrderedCollection", "Collection"] do
|
when type in ["OrderedCollection", "Collection"] do
|
||||||
Map.new(objects, fn %{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()} end)
|
Map.new(objects, fn
|
||||||
|
%{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()}
|
||||||
|
object_ap_id when is_binary(object_ap_id) -> {object_ap_id, NaiveDateTime.utc_now()}
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_and_prepare_featured_from_ap_id(nil) do
|
def fetch_and_prepare_featured_from_ap_id(nil) do
|
||||||
|
|
14
test/fixtures/mastodon/collections/external_featured.json
vendored
Normal file
14
test/fixtures/mastodon/collections/external_featured.json
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"@context": [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://{{domain}}/schemas/litepub-0.1.jsonld",
|
||||||
|
{
|
||||||
|
"@language": "und"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": "https://{{domain}}/users/{{nickname}}/collections/featured",
|
||||||
|
"orderedItems": [
|
||||||
|
"https://{{domain}}/objects/{{object_id}}"
|
||||||
|
],
|
||||||
|
"type": "OrderedCollection"
|
||||||
|
}
|
|
@ -312,6 +312,83 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
|
||||||
|
|
||||||
assert %{data: %{"id" => ^object_url}} = Object.get_by_ap_id(object_url)
|
assert %{data: %{"id" => ^object_url}} = Object.get_by_ap_id(object_url)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "fetches user featured collection without embedded object" do
|
||||||
|
ap_id = "https://example.com/users/lain"
|
||||||
|
|
||||||
|
featured_url = "https://example.com/users/lain/collections/featured"
|
||||||
|
|
||||||
|
user_data =
|
||||||
|
"test/fixtures/users_mock/user.json"
|
||||||
|
|> File.read!()
|
||||||
|
|> String.replace("{{nickname}}", "lain")
|
||||||
|
|> Jason.decode!()
|
||||||
|
|> Map.put("featured", featured_url)
|
||||||
|
|> Jason.encode!()
|
||||||
|
|
||||||
|
object_id = Ecto.UUID.generate()
|
||||||
|
|
||||||
|
featured_data =
|
||||||
|
"test/fixtures/mastodon/collections/external_featured.json"
|
||||||
|
|> File.read!()
|
||||||
|
|> String.replace("{{domain}}", "example.com")
|
||||||
|
|> String.replace("{{nickname}}", "lain")
|
||||||
|
|> String.replace("{{object_id}}", object_id)
|
||||||
|
|
||||||
|
object_url = "https://example.com/objects/#{object_id}"
|
||||||
|
|
||||||
|
object_data =
|
||||||
|
"test/fixtures/statuses/note.json"
|
||||||
|
|> File.read!()
|
||||||
|
|> String.replace("{{object_id}}", object_id)
|
||||||
|
|> String.replace("{{nickname}}", "lain")
|
||||||
|
|
||||||
|
Tesla.Mock.mock(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: ^ap_id
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: user_data,
|
||||||
|
headers: [{"content-type", "application/activity+json"}]
|
||||||
|
}
|
||||||
|
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: ^featured_url
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: featured_data,
|
||||||
|
headers: [{"content-type", "application/activity+json"}]
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
Tesla.Mock.mock_global(fn
|
||||||
|
%{
|
||||||
|
method: :get,
|
||||||
|
url: ^object_url
|
||||||
|
} ->
|
||||||
|
%Tesla.Env{
|
||||||
|
status: 200,
|
||||||
|
body: object_data,
|
||||||
|
headers: [{"content-type", "application/activity+json"}]
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
||||||
|
{:ok, user} = ActivityPub.make_user_from_ap_id(ap_id)
|
||||||
|
Process.sleep(50)
|
||||||
|
|
||||||
|
assert user.featured_address == featured_url
|
||||||
|
assert Map.has_key?(user.pinned_objects, object_url)
|
||||||
|
|
||||||
|
in_db = Pleroma.User.get_by_ap_id(ap_id)
|
||||||
|
assert in_db.featured_address == featured_url
|
||||||
|
assert Map.has_key?(user.pinned_objects, object_url)
|
||||||
|
|
||||||
|
assert %{data: %{"id" => ^object_url}} = Object.get_by_ap_id(object_url)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it fetches the appropriate tag-restricted posts" do
|
test "it fetches the appropriate tag-restricted posts" do
|
||||||
|
|
Loading…
Reference in a new issue