Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into feature/pinned...
[akkoma] / test / support / factory.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Factory do
6 use ExMachina.Ecto, repo: Pleroma.Repo
7
8 def user_factory do
9 user = %Pleroma.User{
10 name: sequence(:name, &"Test テスト User #{&1}"),
11 email: sequence(:email, &"user#{&1}@example.com"),
12 nickname: sequence(:nickname, &"nick#{&1}"),
13 password_hash: Comeonin.Pbkdf2.hashpwsalt("test"),
14 bio: sequence(:bio, &"Tester Number #{&1}"),
15 info: %{}
16 }
17
18 %{
19 user
20 | ap_id: Pleroma.User.ap_id(user),
21 follower_address: Pleroma.User.ap_followers(user),
22 following: [Pleroma.User.ap_id(user)]
23 }
24 end
25
26 def note_factory do
27 text = sequence(:text, &"This is :moominmamma: note #{&1}")
28
29 user = insert(:user)
30
31 data = %{
32 "type" => "Note",
33 "content" => text,
34 "id" => Pleroma.Web.ActivityPub.Utils.generate_object_id(),
35 "actor" => user.ap_id,
36 "to" => ["https://www.w3.org/ns/activitystreams#Public"],
37 "published" => DateTime.utc_now() |> DateTime.to_iso8601(),
38 "likes" => [],
39 "like_count" => 0,
40 "context" => "2hu",
41 "summary" => "2hu",
42 "tag" => ["2hu"],
43 "emoji" => %{
44 "2hu" => "corndog.png"
45 }
46 }
47
48 %Pleroma.Object{
49 data: data
50 }
51 end
52
53 def direct_note_factory do
54 user2 = insert(:user)
55
56 %Pleroma.Object{data: data} = note_factory()
57 %Pleroma.Object{data: Map.merge(data, %{"to" => [user2.ap_id]})}
58 end
59
60 def tombstone_factory do
61 data = %{
62 "type" => "Tombstone",
63 "id" => Pleroma.Web.ActivityPub.Utils.generate_object_id(),
64 "formerType" => "Note",
65 "deleted" => DateTime.utc_now() |> DateTime.to_iso8601()
66 }
67
68 %Pleroma.Object{
69 data: data
70 }
71 end
72
73 def direct_note_activity_factory do
74 dm = insert(:direct_note)
75
76 data = %{
77 "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
78 "type" => "Create",
79 "actor" => dm.data["actor"],
80 "to" => dm.data["to"],
81 "object" => dm.data,
82 "published" => DateTime.utc_now() |> DateTime.to_iso8601(),
83 "context" => dm.data["context"]
84 }
85
86 %Pleroma.Activity{
87 data: data,
88 actor: data["actor"],
89 recipients: data["to"]
90 }
91 end
92
93 def note_activity_factory do
94 note = insert(:note)
95
96 data = %{
97 "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
98 "type" => "Create",
99 "actor" => note.data["actor"],
100 "to" => note.data["to"],
101 "object" => note.data,
102 "published" => DateTime.utc_now() |> DateTime.to_iso8601(),
103 "context" => note.data["context"]
104 }
105
106 %Pleroma.Activity{
107 data: data,
108 actor: data["actor"],
109 recipients: data["to"]
110 }
111 end
112
113 def announce_activity_factory do
114 note_activity = insert(:note_activity)
115 user = insert(:user)
116
117 data = %{
118 "type" => "Announce",
119 "actor" => note_activity.actor,
120 "object" => note_activity.data["id"],
121 "to" => [user.follower_address, note_activity.data["actor"]],
122 "cc" => ["https://www.w3.org/ns/activitystreams#Public"],
123 "context" => note_activity.data["context"]
124 }
125
126 %Pleroma.Activity{
127 data: data,
128 actor: user.ap_id,
129 recipients: data["to"]
130 }
131 end
132
133 def like_activity_factory do
134 note_activity = insert(:note_activity)
135 user = insert(:user)
136
137 data = %{
138 "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
139 "actor" => user.ap_id,
140 "type" => "Like",
141 "object" => note_activity.data["object"]["id"],
142 "published_at" => DateTime.utc_now() |> DateTime.to_iso8601()
143 }
144
145 %Pleroma.Activity{
146 data: data
147 }
148 end
149
150 def follow_activity_factory do
151 follower = insert(:user)
152 followed = insert(:user)
153
154 data = %{
155 "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
156 "actor" => follower.ap_id,
157 "type" => "Follow",
158 "object" => followed.ap_id,
159 "published_at" => DateTime.utc_now() |> DateTime.to_iso8601()
160 }
161
162 %Pleroma.Activity{
163 data: data,
164 actor: follower.ap_id
165 }
166 end
167
168 def websub_subscription_factory do
169 %Pleroma.Web.Websub.WebsubServerSubscription{
170 topic: "http://example.org",
171 callback: "http://example/org/callback",
172 secret: "here's a secret",
173 valid_until: NaiveDateTime.add(NaiveDateTime.utc_now(), 100),
174 state: "requested"
175 }
176 end
177
178 def websub_client_subscription_factory do
179 %Pleroma.Web.Websub.WebsubClientSubscription{
180 topic: "http://example.org",
181 secret: "here's a secret",
182 valid_until: nil,
183 state: "requested",
184 subscribers: []
185 }
186 end
187
188 def oauth_app_factory do
189 %Pleroma.Web.OAuth.App{
190 client_name: "Some client",
191 redirect_uris: "https://example.com/callback",
192 scopes: "read",
193 website: "https://example.com",
194 client_id: "aaabbb==",
195 client_secret: "aaa;/&bbb"
196 }
197 end
198 end