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.

131 lines
3.7KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2019 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{following: following, info: info} = user} = User.follow(user, user2)
  58. assert length(following) == 2
  59. assert info.follower_count == 0
  60. {:ok, user} =
  61. user
  62. |> Ecto.Changeset.change(%{following: following ++ following})
  63. |> User.change_info(&Ecto.Changeset.change(&1, %{follower_count: 3}))
  64. |> Repo.update()
  65. assert length(user.following) == 4
  66. assert user.info.follower_count == 3
  67. assert :ok == Mix.Tasks.Pleroma.Database.run(["update_users_following_followers_counts"])
  68. user = User.get_by_id(user.id)
  69. assert length(user.following) == 2
  70. assert user.info.follower_count == 0
  71. end
  72. end
  73. describe "running fix_likes_collections" do
  74. test "it turns OrderedCollection likes into empty arrays" do
  75. [user, user2] = insert_pair(:user)
  76. {:ok, %{id: id, object: object}} = CommonAPI.post(user, %{"status" => "test"})
  77. {:ok, %{object: object2}} = CommonAPI.post(user, %{"status" => "test test"})
  78. CommonAPI.favorite(id, user2)
  79. likes = %{
  80. "first" =>
  81. "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes?page=1",
  82. "id" => "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes",
  83. "totalItems" => 3,
  84. "type" => "OrderedCollection"
  85. }
  86. new_data = Map.put(object2.data, "likes", likes)
  87. object2
  88. |> Ecto.Changeset.change(%{data: new_data})
  89. |> Repo.update()
  90. assert length(Object.get_by_id(object.id).data["likes"]) == 1
  91. assert is_map(Object.get_by_id(object2.id).data["likes"])
  92. assert :ok == Mix.Tasks.Pleroma.Database.run(["fix_likes_collections"])
  93. assert length(Object.get_by_id(object.id).data["likes"]) == 1
  94. assert Enum.empty?(Object.get_by_id(object2.id).data["likes"])
  95. end
  96. end
  97. end