commit: a92b1fbdedf1fafdc4a29993ffacd5bf70bfd84e
parent 0d7d6ebebb2008bff3a0e6d11ba1795d12a3cb67
Author: Lain Soykaf <lain@lain.com>
Date: Sun, 23 Feb 2025 17:51:25 +0400
UserRelationshipTest: Don't use Mock.
Diffstat:
6 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/config/test.exs b/config/test.exs
@@ -144,6 +144,7 @@ config :pleroma, Pleroma.Search.Meilisearch, url: "http://127.0.0.1:7700/", priv
config :phoenix, :plug_init_mode, :runtime
config :pleroma, :config_impl, Pleroma.UnstubbedConfigMock
+config :pleroma, :datetime_impl, Pleroma.DateTimeMock
config :pleroma, Pleroma.PromEx, disabled: true
diff --git a/lib/pleroma/datetime.ex b/lib/pleroma/datetime.ex
@@ -0,0 +1,3 @@
+defmodule Pleroma.DateTime do
+ @callback utc_now() :: NaiveDateTime.t()
+end
diff --git a/lib/pleroma/datetime/impl.ex b/lib/pleroma/datetime/impl.ex
@@ -0,0 +1,6 @@
+defmodule Pleroma.DateTime.Impl do
+ @behaviour Pleroma.DateTime
+
+ @impl true
+ def utc_now, do: NaiveDateTime.utc_now()
+end
diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex
@@ -55,9 +55,13 @@ defmodule Pleroma.UserRelationship do
def user_relationship_mappings, do: Pleroma.UserRelationship.Type.__enum_map__()
+ def datetime_impl do
+ Application.get_env(:pleroma, :datetime_impl, Pleroma.DateTime.Impl)
+ end
+
def changeset(%UserRelationship{} = user_relationship, params \\ %{}) do
user_relationship
- |> cast(params, [:relationship_type, :source_id, :target_id, :expires_at])
+ |> cast(params, [:relationship_type, :source_id, :target_id, :expires_at, :inserted_at])
|> validate_required([:relationship_type, :source_id, :target_id])
|> unique_constraint(:relationship_type,
name: :user_relationships_source_id_relationship_type_target_id_index
@@ -65,6 +69,7 @@ defmodule Pleroma.UserRelationship do
|> validate_not_self_relationship()
end
+ @spec exists?(any(), Pleroma.User.t(), Pleroma.User.t()) :: boolean()
def exists?(relationship_type, %User{} = source, %User{} = target) do
UserRelationship
|> where(relationship_type: ^relationship_type, source_id: ^source.id, target_id: ^target.id)
@@ -90,7 +95,8 @@ defmodule Pleroma.UserRelationship do
relationship_type: relationship_type,
source_id: source.id,
target_id: target.id,
- expires_at: expires_at
+ expires_at: expires_at,
+ inserted_at: datetime_impl().utc_now()
})
|> Repo.insert(
on_conflict: {:replace_all_except, [:id, :inserted_at]},
diff --git a/test/pleroma/user_relationship_test.exs b/test/pleroma/user_relationship_test.exs
@@ -3,11 +3,12 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.UserRelationshipTest do
+ alias Pleroma.DateTimeMock
alias Pleroma.UserRelationship
- use Pleroma.DataCase, async: false
+ use Pleroma.DataCase, async: true
- import Mock
+ import Mox
import Pleroma.Factory
describe "*_exists?/2" do
@@ -52,6 +53,9 @@ defmodule Pleroma.UserRelationshipTest do
end
test "creates user relationship record if it doesn't exist", %{users: [user1, user2]} do
+ DateTimeMock
+ |> stub_with(Pleroma.DateTime.Impl)
+
for relationship_type <- [
:block,
:mute,
@@ -80,13 +84,15 @@ defmodule Pleroma.UserRelationshipTest do
end
test "if record already exists, returns it", %{users: [user1, user2]} do
- user_block =
- with_mock NaiveDateTime, [:passthrough], utc_now: fn -> ~N[2017-03-17 17:09:58] end do
- {:ok, %{inserted_at: ~N[2017-03-17 17:09:58]}} =
- UserRelationship.create_block(user1, user2)
- end
+ fixed_datetime = ~N[2017-03-17 17:09:58]
+
+ Pleroma.DateTimeMock
+ |> expect(:utc_now, 2, fn -> fixed_datetime end)
+
+ {:ok, %{inserted_at: ^fixed_datetime}} = UserRelationship.create_block(user1, user2)
- assert user_block == UserRelationship.create_block(user1, user2)
+ # Test the idempotency without caring about the exact time
+ assert {:ok, _} = UserRelationship.create_block(user1, user2)
end
end
diff --git a/test/support/mocks.ex b/test/support/mocks.ex
@@ -33,3 +33,5 @@ Mox.defmock(Pleroma.StubbedHTTPSignaturesMock, for: Pleroma.HTTPSignaturesAPI)
Mox.defmock(Pleroma.LoggerMock, for: Pleroma.Logging)
Mox.defmock(Pleroma.Uploaders.S3.ExAwsMock, for: Pleroma.Uploaders.S3.ExAwsAPI)
+
+Mox.defmock(Pleroma.DateTimeMock, for: Pleroma.DateTime)