1 defmodule Pleroma.Web.ActivityPub.Transmogrifier.AddRemoveHandlingTest do
2 use Oban.Testing, repo: Pleroma.Repo
3 use Pleroma.DataCase, async: true
5 require Pleroma.Constants
10 alias Pleroma.Web.ActivityPub.Transmogrifier
12 test "it accepts Add/Remove activities" do
14 "test/fixtures/users_mock/user.json"
16 |> String.replace("{{nickname}}", "lain")
18 object_id = "c61d6733-e256-4fe1-ab13-1e369789423f"
21 "test/fixtures/statuses/note.json"
23 |> String.replace("{{nickname}}", "lain")
24 |> String.replace("{{object_id}}", object_id)
26 object_url = "https://example.com/objects/#{object_id}"
28 actor = "https://example.com/users/lain"
38 headers: [{"content-type", "application/activity+json"}]
48 headers: [{"content-type", "application/activity+json"}]
51 %{method: :get, url: "https://example.com/users/lain/collections/featured"} ->
55 "test/fixtures/users_mock/masto_featured.json"
57 |> String.replace("{{domain}}", "example.com")
58 |> String.replace("{{nickname}}", "lain"),
59 headers: [{"content-type", "application/activity+json"}]
64 "id" => "https://example.com/objects/d61d6733-e256-4fe1-ab13-1e369789423f",
66 "object" => object_url,
67 "target" => "https://example.com/users/lain/collections/featured",
69 "to" => [Pleroma.Constants.as_public()],
70 "cc" => ["https://example.com/users/lain/followers"]
73 assert {:ok, activity} = Transmogrifier.handle_incoming(message)
74 assert activity.data == message
75 user = User.get_cached_by_ap_id(actor)
76 assert user.pinned_objects[object_url]
79 "id" => "http://localhost:400/objects/d61d6733-e256-4fe1-ab13-1e369789423d",
81 "object" => object_url,
82 "target" => "https://example.com/users/lain/collections/featured",
84 "to" => [Pleroma.Constants.as_public()],
85 "cc" => ["https://example.com/users/lain/followers"]
88 assert {:ok, activity} = Transmogrifier.handle_incoming(remove)
89 assert activity.data == remove
91 user = refresh_record(user)
92 refute user.pinned_objects[object_url]
95 test "Add/Remove activities for remote users without featured address" do
96 user = insert(:user, local: false, domain: "example.com")
100 |> Ecto.Changeset.change(featured_address: nil)
103 %{host: host} = URI.parse(user.ap_id)
106 "test/fixtures/users_mock/user.json"
108 |> String.replace("{{nickname}}", user.nickname)
110 object_id = "c61d6733-e256-4fe1-ab13-1e369789423f"
113 "test/fixtures/statuses/note.json"
115 |> String.replace("{{nickname}}", user.nickname)
116 |> String.replace("{{object_id}}", object_id)
118 object_url = "https://#{host}/objects/#{object_id}"
120 actor = "https://#{host}/users/#{user.nickname}"
122 featured = "https://#{host}/users/#{user.nickname}/collections/featured"
132 headers: [{"content-type", "application/activity+json"}]
142 headers: [{"content-type", "application/activity+json"}]
145 %{method: :get, url: ^featured} ->
149 "test/fixtures/users_mock/masto_featured.json"
151 |> String.replace("{{domain}}", "#{host}")
152 |> String.replace("{{nickname}}", user.nickname),
153 headers: [{"content-type", "application/activity+json"}]
158 "id" => "https://#{host}/objects/d61d6733-e256-4fe1-ab13-1e369789423f",
160 "object" => object_url,
161 "target" => "https://#{host}/users/#{user.nickname}/collections/featured",
163 "to" => [Pleroma.Constants.as_public()],
164 "cc" => ["https://#{host}/users/#{user.nickname}/followers"]
167 assert {:ok, activity} = Transmogrifier.handle_incoming(message)
168 assert activity.data == message
169 user = User.get_cached_by_ap_id(actor)
170 assert user.pinned_objects[object_url]