Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
4.9KB

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