Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

131 wiersze
3.6KB

  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. defmodule Mix.Tasks.Pleroma.DatabaseTest do
  5. alias Pleroma.Activity
  6. alias Pleroma.Object
  7. alias Pleroma.Repo
  8. alias Pleroma.User
  9. alias Pleroma.Web.CommonAPI
  10. use Pleroma.DataCase
  11. import Pleroma.Factory
  12. setup_all do
  13. Mix.shell(Mix.Shell.Process)
  14. on_exit(fn ->
  15. Mix.shell(Mix.Shell.IO)
  16. end)
  17. :ok
  18. end
  19. describe "running remove_embedded_objects" do
  20. test "it replaces objects with references" do
  21. user = insert(:user)
  22. {:ok, activity} = CommonAPI.post(user, %{status: "test"})
  23. new_data = Map.put(activity.data, "object", activity.object.data)
  24. {:ok, activity} =
  25. activity
  26. |> Activity.change(%{data: new_data})
  27. |> Repo.update()
  28. assert is_map(activity.data["object"])
  29. Mix.Tasks.Pleroma.Database.run(["remove_embedded_objects"])
  30. activity = Activity.get_by_id_with_object(activity.id)
  31. assert is_binary(activity.data["object"])
  32. end
  33. end
  34. describe "prune_objects" do
  35. test "it prunes old objects from the database" do
  36. insert(:note)
  37. deadline = Pleroma.Config.get([:instance, :remote_post_retention_days]) + 1
  38. date =
  39. Timex.now()
  40. |> Timex.shift(days: -deadline)
  41. |> Timex.to_naive_datetime()
  42. |> NaiveDateTime.truncate(:second)
  43. %{id: id} =
  44. :note
  45. |> insert()
  46. |> Ecto.Changeset.change(%{inserted_at: date})
  47. |> Repo.update!()
  48. assert length(Repo.all(Object)) == 2
  49. Mix.Tasks.Pleroma.Database.run(["prune_objects"])
  50. assert length(Repo.all(Object)) == 1
  51. refute Object.get_by_id(id)
  52. end
  53. end
  54. describe "running update_users_following_followers_counts" do
  55. test "following and followers count are updated" do
  56. [user, user2] = insert_pair(:user)
  57. {:ok, %User{} = user} = User.follow(user, user2)
  58. following = User.following(user)
  59. assert length(following) == 2
  60. assert user.follower_count == 0
  61. {:ok, user} =
  62. user
  63. |> Ecto.Changeset.change(%{follower_count: 3})
  64. |> Repo.update()
  65. assert user.follower_count == 3
  66. assert :ok == Mix.Tasks.Pleroma.Database.run(["update_users_following_followers_counts"])
  67. user = User.get_by_id(user.id)
  68. assert length(User.following(user)) == 2
  69. assert user.follower_count == 0
  70. end
  71. end
  72. describe "running fix_likes_collections" do
  73. test "it turns OrderedCollection likes into empty arrays" do
  74. [user, user2] = insert_pair(:user)
  75. {:ok, %{id: id, object: object}} = CommonAPI.post(user, %{status: "test"})
  76. {:ok, %{object: object2}} = CommonAPI.post(user, %{status: "test test"})
  77. CommonAPI.favorite(user2, id)
  78. likes = %{
  79. "first" =>
  80. "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes?page=1",
  81. "id" => "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes",
  82. "totalItems" => 3,
  83. "type" => "OrderedCollection"
  84. }
  85. new_data = Map.put(object2.data, "likes", likes)
  86. object2
  87. |> Ecto.Changeset.change(%{data: new_data})
  88. |> Repo.update()
  89. assert length(Object.get_by_id(object.id).data["likes"]) == 1
  90. assert is_map(Object.get_by_id(object2.id).data["likes"])
  91. assert :ok == Mix.Tasks.Pleroma.Database.run(["fix_likes_collections"])
  92. assert length(Object.get_by_id(object.id).data["likes"]) == 1
  93. assert Enum.empty?(Object.get_by_id(object2.id).data["likes"])
  94. end
  95. end
  96. end