Merge branch 'bugfix/verify_credentials_get' into 'develop'
[akkoma] / test / web / activity_pub / activity_pub_test.exs
1 defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
2 use Pleroma.DataCase
3 alias Pleroma.Web.ActivityPub.ActivityPub
4 alias Pleroma.{Activity, Object}
5 alias Pleroma.Builders.ActivityBuilder
6
7 describe "insertion" do
8 test "inserts a given map into the activity database, giving it an id if it has none." do
9 data = %{
10 "ok" => true
11 }
12
13 {:ok, %Activity{} = activity} = ActivityPub.insert(data)
14 assert activity.data["ok"] == data["ok"]
15 assert is_binary(activity.data["id"])
16
17 given_id = "bla"
18 data = %{
19 "ok" => true,
20 "id" => given_id
21 }
22
23 {:ok, %Activity{} = activity} = ActivityPub.insert(data)
24 assert activity.data["ok"] == data["ok"]
25 assert activity.data["id"] == given_id
26 end
27
28 test "adds an id to a given object if it lacks one and inserts it to the object database" do
29 data = %{
30 "object" => %{
31 "ok" => true
32 }
33 }
34
35 {:ok, %Activity{} = activity} = ActivityPub.insert(data)
36 assert is_binary(activity.data["object"]["id"])
37 assert %Object{} = Object.get_by_ap_id(activity.data["object"]["id"])
38 end
39 end
40
41 describe "fetch activities for recipients" do
42 test "retrieve the activities for certain recipients" do
43 {:ok, activity_one} = ActivityBuilder.insert(%{"to" => ["someone"]})
44 {:ok, activity_two} = ActivityBuilder.insert(%{"to" => ["someone_else"]})
45 {:ok, _activity_three} = ActivityBuilder.insert(%{"to" => ["noone"]})
46
47 activities = ActivityPub.fetch_activities(["someone", "someone_else"])
48 assert length(activities) == 2
49 assert activities == [activity_one, activity_two]
50 end
51 end
52
53 describe "fetch activities in context" do
54 test "retrieves activities that have a given context" do
55 {:ok, activity} = ActivityBuilder.insert(%{"context" => "2hu"})
56 {:ok, activity_two} = ActivityBuilder.insert(%{"context" => "2hu"})
57 {:ok, _activity_three} = ActivityBuilder.insert(%{"context" => "3hu"})
58
59 activities = ActivityPub.fetch_activities_for_context("2hu")
60
61 assert activities == [activity, activity_two]
62 end
63 end
64
65 describe "public fetch activities" do
66 test "retrieves public activities" do
67 %{public: public} = ActivityBuilder.public_and_non_public
68
69 activities = ActivityPub.fetch_public_activities
70 assert length(activities) == 1
71 assert Enum.at(activities, 0) == public
72 end
73
74 test "retrieves a maximum of 20 activities" do
75 activities = ActivityBuilder.insert_list(30)
76 last_expected = List.last(activities)
77
78 activities = ActivityPub.fetch_public_activities
79 last = List.last(activities)
80
81 assert length(activities) == 20
82 assert last == last_expected
83 end
84
85 test "retrieves ids starting from a since_id" do
86 activities = ActivityBuilder.insert_list(30)
87 later_activities = ActivityBuilder.insert_list(10)
88 since_id = List.last(activities).id
89 last_expected = List.last(later_activities)
90
91 activities = ActivityPub.fetch_public_activities(%{"since_id" => since_id})
92 last = List.last(activities)
93
94 assert length(activities) == 10
95 assert last == last_expected
96 end
97
98 test "retrieves ids up to max_id" do
99 _first_activities = ActivityBuilder.insert_list(10)
100 activities = ActivityBuilder.insert_list(20)
101 later_activities = ActivityBuilder.insert_list(10)
102 max_id = List.first(later_activities).id
103 last_expected = List.last(activities)
104
105 activities = ActivityPub.fetch_public_activities(%{"max_id" => max_id})
106 last = List.last(activities)
107
108 assert length(activities) == 20
109 assert last == last_expected
110 end
111 end
112
113 describe "uploading files" do
114 test "copies the file to the configured folder" do
115 file = %Plug.Upload{content_type: "image/jpg", path: Path.absname("test/fixtures/image.jpg"), filename: "an_image.jpg"}
116
117 {:ok, %Object{} = object} = ActivityPub.upload(file)
118 assert object.data["name"] == "an_image.jpg"
119 end
120 end
121 end