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.

120 lines
3.8KB

  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 Pleroma.StatsTest do
  5. use Pleroma.DataCase
  6. import Pleroma.Factory
  7. alias Pleroma.Web.CommonAPI
  8. describe "user count" do
  9. test "it ignores internal users" do
  10. _user = insert(:user, local: true)
  11. _internal = insert(:user, local: true, nickname: nil)
  12. _internal = Pleroma.Web.ActivityPub.Relay.get_actor()
  13. assert match?(%{stats: %{user_count: 1}}, Pleroma.Stats.calculate_stat_data())
  14. end
  15. end
  16. describe "status visibility sum count" do
  17. test "on new status" do
  18. instance2 = "instance2.tld"
  19. user = insert(:user)
  20. other_user = insert(:user, %{ap_id: "https://#{instance2}/@actor"})
  21. CommonAPI.post(user, %{visibility: "public", status: "hey"})
  22. Enum.each(0..1, fn _ ->
  23. CommonAPI.post(user, %{
  24. visibility: "unlisted",
  25. status: "hey"
  26. })
  27. end)
  28. Enum.each(0..2, fn _ ->
  29. CommonAPI.post(user, %{
  30. visibility: "direct",
  31. status: "hey @#{other_user.nickname}"
  32. })
  33. end)
  34. Enum.each(0..3, fn _ ->
  35. CommonAPI.post(user, %{
  36. visibility: "private",
  37. status: "hey"
  38. })
  39. end)
  40. assert %{"direct" => 3, "private" => 4, "public" => 1, "unlisted" => 2} =
  41. Pleroma.Stats.get_status_visibility_count()
  42. end
  43. test "on status delete" do
  44. user = insert(:user)
  45. {:ok, activity} = CommonAPI.post(user, %{visibility: "public", status: "hey"})
  46. assert %{"public" => 1} = Pleroma.Stats.get_status_visibility_count()
  47. CommonAPI.delete(activity.id, user)
  48. assert %{"public" => 0} = Pleroma.Stats.get_status_visibility_count()
  49. end
  50. test "on status visibility update" do
  51. user = insert(:user)
  52. {:ok, activity} = CommonAPI.post(user, %{visibility: "public", status: "hey"})
  53. assert %{"public" => 1, "private" => 0} = Pleroma.Stats.get_status_visibility_count()
  54. {:ok, _} = CommonAPI.update_activity_scope(activity.id, %{visibility: "private"})
  55. assert %{"public" => 0, "private" => 1} = Pleroma.Stats.get_status_visibility_count()
  56. end
  57. test "doesn't count unrelated activities" do
  58. user = insert(:user)
  59. other_user = insert(:user)
  60. {:ok, activity} = CommonAPI.post(user, %{visibility: "public", status: "hey"})
  61. _ = CommonAPI.follow(user, other_user)
  62. CommonAPI.favorite(other_user, activity.id)
  63. CommonAPI.repeat(activity.id, other_user)
  64. assert %{"direct" => 0, "private" => 0, "public" => 1, "unlisted" => 0} =
  65. Pleroma.Stats.get_status_visibility_count()
  66. end
  67. end
  68. describe "status visibility by instance count" do
  69. test "single instance" do
  70. local_instance = Pleroma.Web.Endpoint.url() |> String.split("//") |> Enum.at(1)
  71. instance2 = "instance2.tld"
  72. user1 = insert(:user)
  73. user2 = insert(:user, %{ap_id: "https://#{instance2}/@actor"})
  74. CommonAPI.post(user1, %{visibility: "public", status: "hey"})
  75. Enum.each(1..5, fn _ ->
  76. CommonAPI.post(user1, %{
  77. visibility: "unlisted",
  78. status: "hey"
  79. })
  80. end)
  81. Enum.each(1..10, fn _ ->
  82. CommonAPI.post(user1, %{
  83. visibility: "direct",
  84. status: "hey @#{user2.nickname}"
  85. })
  86. end)
  87. Enum.each(1..20, fn _ ->
  88. CommonAPI.post(user2, %{
  89. visibility: "private",
  90. status: "hey"
  91. })
  92. end)
  93. assert %{"direct" => 10, "private" => 0, "public" => 1, "unlisted" => 5} =
  94. Pleroma.Stats.get_status_visibility_count(local_instance)
  95. assert %{"direct" => 0, "private" => 20, "public" => 0, "unlisted" => 0} =
  96. Pleroma.Stats.get_status_visibility_count(instance2)
  97. end
  98. end
  99. end