logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

filter_test.exs (4877B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.FilterTest do
  5. use Pleroma.DataCase, async: true
  6. import Pleroma.Factory
  7. alias Oban.Job
  8. alias Pleroma.Filter
  9. setup do
  10. [user: insert(:user)]
  11. end
  12. describe "creating filters" do
  13. test "creation validation error", %{user: user} do
  14. attrs = %{
  15. user_id: user.id,
  16. expires_in: 60
  17. }
  18. {:error, _} = Filter.create(attrs)
  19. assert Repo.all(Job) == []
  20. end
  21. test "use passed expires_at instead expires_in", %{user: user} do
  22. now = NaiveDateTime.utc_now()
  23. attrs = %{
  24. user_id: user.id,
  25. expires_at: now,
  26. phrase: "knights",
  27. context: ["home"],
  28. expires_in: 600
  29. }
  30. {:ok, %Filter{} = filter} = Filter.create(attrs)
  31. result = Filter.get(filter.filter_id, user)
  32. assert result.expires_at == NaiveDateTime.truncate(now, :second)
  33. [job] = Repo.all(Job)
  34. assert DateTime.truncate(job.scheduled_at, :second) ==
  35. now |> NaiveDateTime.truncate(:second) |> DateTime.from_naive!("Etc/UTC")
  36. end
  37. test "creating one filter", %{user: user} do
  38. attrs = %{
  39. user_id: user.id,
  40. filter_id: 42,
  41. phrase: "knights",
  42. context: ["home"]
  43. }
  44. {:ok, %Filter{} = filter} = Filter.create(attrs)
  45. result = Filter.get(filter.filter_id, user)
  46. assert attrs.phrase == result.phrase
  47. end
  48. test "creating with expired_at", %{user: user} do
  49. attrs = %{
  50. user_id: user.id,
  51. filter_id: 42,
  52. phrase: "knights",
  53. context: ["home"],
  54. expires_in: 60
  55. }
  56. {:ok, %Filter{} = filter} = Filter.create(attrs)
  57. result = Filter.get(filter.filter_id, user)
  58. assert attrs.phrase == result.phrase
  59. assert [_] = Repo.all(Job)
  60. end
  61. test "creating one filter without a pre-defined filter_id", %{user: user} do
  62. attrs = %{
  63. user_id: user.id,
  64. phrase: "knights",
  65. context: ["home"]
  66. }
  67. {:ok, %Filter{} = filter} = Filter.create(attrs)
  68. # Should start at 1
  69. assert filter.filter_id == 1
  70. end
  71. test "creating additional filters uses previous highest filter_id + 1", %{user: user} do
  72. filter1 = insert(:filter, user: user)
  73. attrs = %{
  74. user_id: user.id,
  75. # No filter_id
  76. phrase: "who",
  77. context: ["home"]
  78. }
  79. {:ok, %Filter{} = filter2} = Filter.create(attrs)
  80. assert filter2.filter_id == filter1.filter_id + 1
  81. end
  82. test "filter_id is unique per user", %{user: user_one} do
  83. user_two = insert(:user)
  84. attrs1 = %{
  85. user_id: user_one.id,
  86. phrase: "knights",
  87. context: ["home"]
  88. }
  89. {:ok, %Filter{} = filter_one} = Filter.create(attrs1)
  90. attrs2 = %{
  91. user_id: user_two.id,
  92. phrase: "who",
  93. context: ["home"]
  94. }
  95. {:ok, %Filter{} = filter_two} = Filter.create(attrs2)
  96. assert filter_one.filter_id == 1
  97. assert filter_two.filter_id == 1
  98. result_one = Filter.get(filter_one.filter_id, user_one)
  99. assert result_one.phrase == filter_one.phrase
  100. result_two = Filter.get(filter_two.filter_id, user_two)
  101. assert result_two.phrase == filter_two.phrase
  102. end
  103. end
  104. test "deleting a filter", %{user: user} do
  105. filter = insert(:filter, user: user)
  106. assert Repo.get(Filter, filter.id)
  107. {:ok, filter} = Filter.delete(filter)
  108. refute Repo.get(Filter, filter.id)
  109. end
  110. test "deleting a filter with expires_at is removing Oban job too", %{user: user} do
  111. attrs = %{
  112. user_id: user.id,
  113. phrase: "cofe",
  114. context: ["home"],
  115. expires_in: 600
  116. }
  117. {:ok, filter} = Filter.create(attrs)
  118. assert %Job{id: job_id} = Pleroma.Workers.PurgeExpiredFilter.get_expiration(filter.id)
  119. {:ok, _} = Filter.delete(filter)
  120. assert Repo.get(Job, job_id) == nil
  121. end
  122. test "getting all filters by an user", %{user: user} do
  123. filter1 = insert(:filter, user: user)
  124. filter2 = insert(:filter, user: user)
  125. filter_ids = user |> Filter.get_filters() |> collect_ids()
  126. assert filter1.id in filter_ids
  127. assert filter2.id in filter_ids
  128. end
  129. test "updating a filter", %{user: user} do
  130. filter = insert(:filter, user: user)
  131. changes = %{
  132. phrase: "who",
  133. context: ["home", "timeline"]
  134. }
  135. {:ok, updated_filter} = Filter.update(filter, changes)
  136. assert filter != updated_filter
  137. assert updated_filter.phrase == changes.phrase
  138. assert updated_filter.context == changes.context
  139. end
  140. test "updating with error", %{user: user} do
  141. filter = insert(:filter, user: user)
  142. changes = %{
  143. phrase: nil
  144. }
  145. {:error, _} = Filter.update(filter, changes)
  146. end
  147. end