summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlexander Strizhakov <alex.strizhakov@gmail.com>2021-03-03 18:04:06 +0300
committerAlexander Strizhakov <alex.strizhakov@gmail.com>2021-03-25 13:03:41 +0300
commit3adb43cc20751540ea590645b31b985807684202 (patch)
tree5c90e74689605d5fb09368f383309bf20031d573 /test
parentd1d2744ee3e6015064cf50ac5725bfe45b682466 (diff)
downloadpleroma-3adb43cc20751540ea590645b31b985807684202.tar.gz
pleroma-3adb43cc20751540ea590645b31b985807684202.zip
refetch user on incoming add/remove activity
if featured_address is nil
Diffstat (limited to 'test')
-rw-r--r--test/pleroma/web/activity_pub/transmogrifier_test.exs78
-rw-r--r--test/support/factory.ex4
2 files changed, 81 insertions, 1 deletions
diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs
index fb8284aaf..07ed3920f 100644
--- a/test/pleroma/web/activity_pub/transmogrifier_test.exs
+++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs
@@ -191,6 +191,84 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
user = refresh_record(user)
refute user.pinned_objects[object_url]
end
+
+ test "Add/Remove activities for remote users without featured address" do
+ user = insert(:user, local: false, domain: "example.com")
+
+ user =
+ user
+ |> Ecto.Changeset.change(featured_address: nil)
+ |> Repo.update!()
+
+ %{host: host} = URI.parse(user.ap_id)
+
+ user_data =
+ "test/fixtures/users_mock/user.json"
+ |> File.read!()
+ |> String.replace("{{nickname}}", user.nickname)
+
+ object_id = "c61d6733-e256-4fe1-ab13-1e369789423f"
+
+ object =
+ "test/fixtures/statuses/note.json"
+ |> File.read!()
+ |> String.replace("{{nickname}}", user.nickname)
+ |> String.replace("{{object_id}}", object_id)
+
+ object_url = "https://#{host}/objects/#{object_id}"
+
+ actor = "https://#{host}/users/#{user.nickname}"
+
+ featured = "https://#{host}/users/#{user.nickname}/collections/featured"
+
+ Tesla.Mock.mock(fn
+ %{
+ method: :get,
+ url: ^actor
+ } ->
+ %Tesla.Env{
+ status: 200,
+ body: user_data,
+ headers: [{"content-type", "application/activity+json"}]
+ }
+
+ %{
+ method: :get,
+ url: ^object_url
+ } ->
+ %Tesla.Env{
+ status: 200,
+ body: object,
+ headers: [{"content-type", "application/activity+json"}]
+ }
+
+ %{method: :get, url: ^featured} ->
+ %Tesla.Env{
+ status: 200,
+ body:
+ "test/fixtures/users_mock/masto_featured.json"
+ |> File.read!()
+ |> String.replace("{{domain}}", "#{host}")
+ |> String.replace("{{nickname}}", user.nickname),
+ headers: [{"content-type", "application/activity+json"}]
+ }
+ end)
+
+ message = %{
+ "id" => "https://#{host}/objects/d61d6733-e256-4fe1-ab13-1e369789423f",
+ "actor" => actor,
+ "object" => object_url,
+ "target" => "https://#{host}/users/#{user.nickname}/collections/featured",
+ "type" => "Add",
+ "to" => [Pleroma.Constants.as_public()],
+ "cc" => ["https://#{host}/users/#{user.nickname}/followers"]
+ }
+
+ assert {:ok, activity} = Transmogrifier.handle_incoming(message)
+ assert activity.data == message
+ user = User.get_cached_by_ap_id(actor)
+ assert user.pinned_objects[object_url]
+ end
end
describe "prepare outgoing" do
diff --git a/test/support/factory.ex b/test/support/factory.ex
index 883cedf3c..867076d6a 100644
--- a/test/support/factory.ex
+++ b/test/support/factory.ex
@@ -41,7 +41,7 @@ defmodule Pleroma.Factory do
urls =
if attrs[:local] == false do
- base_domain = Enum.random(["domain1.com", "domain2.com", "domain3.com"])
+ base_domain = attrs[:domain] || Enum.random(["domain1.com", "domain2.com", "domain3.com"])
ap_id = "https://#{base_domain}/users/#{user.nickname}"
@@ -60,6 +60,8 @@ defmodule Pleroma.Factory do
}
end
+ attrs = Map.delete(attrs, :domain)
+
user
|> Map.put(:raw_bio, user.bio)
|> Map.merge(urls)