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.

171 lines
3.4KB

  1. defmodule Pleroma.Web.StreamerTest do
  2. use Pleroma.DataCase
  3. alias Pleroma.Web.Streamer
  4. alias Pleroma.{List, User}
  5. alias Pleroma.Web.CommonAPI
  6. import Pleroma.Factory
  7. test "it sends to public" do
  8. user = insert(:user)
  9. other_user = insert(:user)
  10. task =
  11. Task.async(fn ->
  12. assert_receive {:text, _}, 4_000
  13. end)
  14. fake_socket = %{
  15. transport_pid: task.pid,
  16. assigns: %{
  17. user: user
  18. }
  19. }
  20. {:ok, activity} = CommonAPI.post(other_user, %{"status" => "Test"})
  21. topics = %{
  22. "public" => [fake_socket]
  23. }
  24. Streamer.push_to_socket(topics, "public", activity)
  25. Task.await(task)
  26. end
  27. test "it doesn't send to blocked users" do
  28. user = insert(:user)
  29. blocked_user = insert(:user)
  30. {:ok, user} = User.block(user, blocked_user)
  31. task =
  32. Task.async(fn ->
  33. refute_receive {:text, _}, 1_000
  34. end)
  35. fake_socket = %{
  36. transport_pid: task.pid,
  37. assigns: %{
  38. user: user
  39. }
  40. }
  41. {:ok, activity} = CommonAPI.post(blocked_user, %{"status" => "Test"})
  42. topics = %{
  43. "public" => [fake_socket]
  44. }
  45. Streamer.push_to_socket(topics, "public", activity)
  46. Task.await(task)
  47. end
  48. test "it doesn't send unwanted DMs to list" do
  49. user_a = insert(:user)
  50. user_b = insert(:user)
  51. user_c = insert(:user)
  52. {:ok, user_a} = User.follow(user_a, user_b)
  53. {:ok, list} = List.create("Test", user_a)
  54. {:ok, list} = List.follow(list, user_b)
  55. task =
  56. Task.async(fn ->
  57. refute_receive {:text, _}, 1_000
  58. end)
  59. fake_socket = %{
  60. transport_pid: task.pid,
  61. assigns: %{
  62. user: user_a
  63. }
  64. }
  65. {:ok, activity} =
  66. CommonAPI.post(user_b, %{
  67. "status" => "@#{user_c.nickname} Test",
  68. "visibility" => "direct"
  69. })
  70. topics = %{
  71. "list:#{list.id}" => [fake_socket]
  72. }
  73. Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics)
  74. Task.await(task)
  75. end
  76. test "it doesn't send unwanted private posts to list" do
  77. user_a = insert(:user)
  78. user_b = insert(:user)
  79. {:ok, list} = List.create("Test", user_a)
  80. {:ok, list} = List.follow(list, user_b)
  81. task =
  82. Task.async(fn ->
  83. refute_receive {:text, _}, 1_000
  84. end)
  85. fake_socket = %{
  86. transport_pid: task.pid,
  87. assigns: %{
  88. user: user_a
  89. }
  90. }
  91. {:ok, activity} =
  92. CommonAPI.post(user_b, %{
  93. "status" => "Test",
  94. "visibility" => "private"
  95. })
  96. topics = %{
  97. "list:#{list.id}" => [fake_socket]
  98. }
  99. Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics)
  100. Task.await(task)
  101. end
  102. test "it send wanted private posts to list" do
  103. user_a = insert(:user)
  104. user_b = insert(:user)
  105. {:ok, user_a} = User.follow(user_a, user_b)
  106. {:ok, list} = List.create("Test", user_a)
  107. {:ok, list} = List.follow(list, user_b)
  108. task =
  109. Task.async(fn ->
  110. assert_receive {:text, _}, 1_000
  111. end)
  112. fake_socket = %{
  113. transport_pid: task.pid,
  114. assigns: %{
  115. user: user_a
  116. }
  117. }
  118. {:ok, activity} =
  119. CommonAPI.post(user_b, %{
  120. "status" => "Test",
  121. "visibility" => "private"
  122. })
  123. topics = %{
  124. "list:#{list.id}" => [fake_socket]
  125. }
  126. Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics)
  127. Task.await(task)
  128. end
  129. end