DeleteValidator: Improve code readability
[akkoma] / test / web / activity_pub / transmogrifier / delete_handling_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.Transmogrifier.DeleteHandlingTest do
6 use Oban.Testing, repo: Pleroma.Repo
7 use Pleroma.DataCase
8
9 alias Pleroma.Activity
10 alias Pleroma.Object
11 alias Pleroma.Tests.ObanHelpers
12 alias Pleroma.User
13 alias Pleroma.Web.ActivityPub.Transmogrifier
14
15 import Pleroma.Factory
16 import ExUnit.CaptureLog
17
18 setup_all do
19 Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
20 :ok
21 end
22
23 test "it works for incoming deletes" do
24 activity = insert(:note_activity)
25 deleting_user = insert(:user)
26
27 data =
28 File.read!("test/fixtures/mastodon-delete.json")
29 |> Poison.decode!()
30
31 object =
32 data["object"]
33 |> Map.put("id", activity.data["object"])
34
35 data =
36 data
37 |> Map.put("object", object)
38 |> Map.put("actor", deleting_user.ap_id)
39
40 {:ok, %Activity{actor: actor, local: false, data: %{"id" => id}}} =
41 Transmogrifier.handle_incoming(data)
42
43 assert id == data["id"]
44
45 # We delete the Create activity because base our timelines on it.
46 # This should be changed after we unify objects and activities
47 refute Activity.get_by_id(activity.id)
48 assert actor == deleting_user.ap_id
49
50 # Objects are replaced by a tombstone object.
51 object = Object.normalize(activity.data["object"])
52 assert object.data["type"] == "Tombstone"
53 end
54
55 test "it fails for incoming deletes with spoofed origin" do
56 activity = insert(:note_activity)
57
58 data =
59 File.read!("test/fixtures/mastodon-delete.json")
60 |> Poison.decode!()
61
62 object =
63 data["object"]
64 |> Map.put("id", activity.data["object"])
65
66 data =
67 data
68 |> Map.put("object", object)
69
70 assert capture_log(fn ->
71 {:error, _} = Transmogrifier.handle_incoming(data)
72 end) =~
73 "[error] Could not decode user at fetch http://mastodon.example.org/users/gargron, {:error, :nxdomain}"
74
75 assert Activity.get_by_id(activity.id)
76 end
77
78 @tag capture_log: true
79 test "it works for incoming user deletes" do
80 %{ap_id: ap_id} = insert(:user, ap_id: "http://mastodon.example.org/users/admin")
81
82 data =
83 File.read!("test/fixtures/mastodon-delete-user.json")
84 |> Poison.decode!()
85
86 {:ok, _} = Transmogrifier.handle_incoming(data)
87 ObanHelpers.perform_all()
88
89 refute User.get_cached_by_ap_id(ap_id)
90 end
91
92 test "it fails for incoming user deletes with spoofed origin" do
93 %{ap_id: ap_id} = insert(:user)
94
95 data =
96 File.read!("test/fixtures/mastodon-delete-user.json")
97 |> Poison.decode!()
98 |> Map.put("actor", ap_id)
99
100 assert match?({:error, _}, Transmogrifier.handle_incoming(data))
101
102 assert User.get_cached_by_ap_id(ap_id)
103 end
104 end