logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

database_test.exs (5031B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Mix.Tasks.Pleroma.DatabaseTest do
  5. use Pleroma.DataCase, async: true
  6. use Oban.Testing, repo: Pleroma.Repo
  7. alias Pleroma.Activity
  8. alias Pleroma.Object
  9. alias Pleroma.Repo
  10. alias Pleroma.User
  11. alias Pleroma.Web.CommonAPI
  12. import Pleroma.Factory
  13. setup_all do
  14. Mix.shell(Mix.Shell.Process)
  15. on_exit(fn ->
  16. Mix.shell(Mix.Shell.IO)
  17. end)
  18. :ok
  19. end
  20. describe "running remove_embedded_objects" do
  21. test "it replaces objects with references" do
  22. user = insert(:user)
  23. {:ok, activity} = CommonAPI.post(user, %{status: "test"})
  24. new_data = Map.put(activity.data, "object", activity.object.data)
  25. {:ok, activity} =
  26. activity
  27. |> Activity.change(%{data: new_data})
  28. |> Repo.update()
  29. assert is_map(activity.data["object"])
  30. Mix.Tasks.Pleroma.Database.run(["remove_embedded_objects"])
  31. activity = Activity.get_by_id_with_object(activity.id)
  32. assert is_binary(activity.data["object"])
  33. end
  34. end
  35. describe "prune_objects" do
  36. test "it prunes old objects from the database" do
  37. insert(:note)
  38. deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1
  39. date =
  40. Timex.now()
  41. |> Timex.shift(days: -deadline)
  42. |> Timex.to_naive_datetime()
  43. |> NaiveDateTime.truncate(:second)
  44. %{id: id} =
  45. :note
  46. |> insert()
  47. |> Ecto.Changeset.change(%{inserted_at: date})
  48. |> Repo.update!()
  49. assert length(Repo.all(Object)) == 2
  50. Mix.Tasks.Pleroma.Database.run(["prune_objects"])
  51. assert length(Repo.all(Object)) == 1
  52. refute Object.get_by_id(id)
  53. end
  54. end
  55. describe "running update_users_following_followers_counts" do
  56. test "following and followers count are updated" do
  57. [user, user2] = insert_pair(:user)
  58. {:ok, %User{} = user, _user2} = User.follow(user, user2)
  59. following = User.following(user)
  60. assert length(following) == 2
  61. assert user.follower_count == 0
  62. {:ok, user} =
  63. user
  64. |> Ecto.Changeset.change(%{follower_count: 3})
  65. |> Repo.update()
  66. assert user.follower_count == 3
  67. assert {:ok, :ok} ==
  68. Mix.Tasks.Pleroma.Database.run(["update_users_following_followers_counts"])
  69. user = User.get_by_id(user.id)
  70. assert length(User.following(user)) == 2
  71. assert user.follower_count == 0
  72. end
  73. end
  74. describe "running fix_likes_collections" do
  75. test "it turns OrderedCollection likes into empty arrays" do
  76. [user, user2] = insert_pair(:user)
  77. {:ok, %{id: id, object: object}} = CommonAPI.post(user, %{status: "test"})
  78. {:ok, %{object: object2}} = CommonAPI.post(user, %{status: "test test"})
  79. CommonAPI.favorite(user2, id)
  80. likes = %{
  81. "first" =>
  82. "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes?page=1",
  83. "id" => "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes",
  84. "totalItems" => 3,
  85. "type" => "OrderedCollection"
  86. }
  87. new_data = Map.put(object2.data, "likes", likes)
  88. object2
  89. |> Ecto.Changeset.change(%{data: new_data})
  90. |> Repo.update()
  91. assert length(Object.get_by_id(object.id).data["likes"]) == 1
  92. assert is_map(Object.get_by_id(object2.id).data["likes"])
  93. assert :ok == Mix.Tasks.Pleroma.Database.run(["fix_likes_collections"])
  94. assert length(Object.get_by_id(object.id).data["likes"]) == 1
  95. assert Enum.empty?(Object.get_by_id(object2.id).data["likes"])
  96. end
  97. end
  98. describe "ensure_expiration" do
  99. test "it adds to expiration old statuses" do
  100. activity1 = insert(:note_activity)
  101. {:ok, inserted_at, 0} = DateTime.from_iso8601("2015-01-23T23:50:07Z")
  102. activity2 = insert(:note_activity, %{inserted_at: inserted_at})
  103. %{id: activity_id3} = insert(:note_activity)
  104. expires_at = DateTime.add(DateTime.utc_now(), 60 * 61)
  105. Pleroma.Workers.PurgeExpiredActivity.enqueue(%{
  106. activity_id: activity_id3,
  107. expires_at: expires_at
  108. })
  109. Mix.Tasks.Pleroma.Database.run(["ensure_expiration"])
  110. assert_enqueued(
  111. worker: Pleroma.Workers.PurgeExpiredActivity,
  112. args: %{activity_id: activity1.id},
  113. scheduled_at:
  114. activity1.inserted_at
  115. |> DateTime.from_naive!("Etc/UTC")
  116. |> Timex.shift(days: 365)
  117. )
  118. assert_enqueued(
  119. worker: Pleroma.Workers.PurgeExpiredActivity,
  120. args: %{activity_id: activity2.id},
  121. scheduled_at:
  122. activity2.inserted_at
  123. |> DateTime.from_naive!("Etc/UTC")
  124. |> Timex.shift(days: 365)
  125. )
  126. assert_enqueued(
  127. worker: Pleroma.Workers.PurgeExpiredActivity,
  128. args: %{activity_id: activity_id3},
  129. scheduled_at: expires_at
  130. )
  131. end
  132. end
  133. end