Merge remote-tracking branch 'origin/develop' into pleroma-conversations
[akkoma] / test / tasks / database_test.exs
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
5 defmodule Mix.Tasks.Pleroma.DatabaseTest do
6 alias Pleroma.Object
7 alias Pleroma.Repo
8 alias Pleroma.User
9 alias Pleroma.Web.CommonAPI
10
11 use Pleroma.DataCase
12
13 import Pleroma.Factory
14
15 setup_all do
16 Mix.shell(Mix.Shell.Process)
17
18 on_exit(fn ->
19 Mix.shell(Mix.Shell.IO)
20 end)
21
22 :ok
23 end
24
25 describe "running update_users_following_followers_counts" do
26 test "following and followers count are updated" do
27 [user, user2] = insert_pair(:user)
28 {:ok, %User{following: following, info: info} = user} = User.follow(user, user2)
29
30 assert length(following) == 2
31 assert info.follower_count == 0
32
33 info_cng = Ecto.Changeset.change(info, %{follower_count: 3})
34
35 {:ok, user} =
36 user
37 |> Ecto.Changeset.change(%{following: following ++ following})
38 |> Ecto.Changeset.put_embed(:info, info_cng)
39 |> Repo.update()
40
41 assert length(user.following) == 4
42 assert user.info.follower_count == 3
43
44 assert :ok == Mix.Tasks.Pleroma.Database.run(["update_users_following_followers_counts"])
45
46 user = User.get_by_id(user.id)
47
48 assert length(user.following) == 2
49 assert user.info.follower_count == 0
50 end
51 end
52
53 describe "running fix_likes_collections" do
54 test "it turns OrderedCollection likes into empty arrays" do
55 [user, user2] = insert_pair(:user)
56
57 {:ok, %{id: id, object: object}} = CommonAPI.post(user, %{"status" => "test"})
58 {:ok, %{object: object2}} = CommonAPI.post(user, %{"status" => "test test"})
59
60 CommonAPI.favorite(id, user2)
61
62 likes = %{
63 "first" =>
64 "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes?page=1",
65 "id" => "http://mastodon.example.org/objects/dbdbc507-52c8-490d-9b7c-1e1d52e5c132/likes",
66 "totalItems" => 3,
67 "type" => "OrderedCollection"
68 }
69
70 new_data = Map.put(object2.data, "likes", likes)
71
72 object2
73 |> Ecto.Changeset.change(%{data: new_data})
74 |> Repo.update()
75
76 assert length(Object.get_by_id(object.id).data["likes"]) == 1
77 assert is_map(Object.get_by_id(object2.id).data["likes"])
78
79 assert :ok == Mix.Tasks.Pleroma.Database.run(["fix_likes_collections"])
80
81 assert length(Object.get_by_id(object.id).data["likes"]) == 1
82 assert Enum.empty?(Object.get_by_id(object2.id).data["likes"])
83 end
84 end
85 end