mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2025-03-13 07:02:41 +00:00
UserRelationshipTest: Don't use Mock.
This commit is contained in:
parent
0d7d6ebebb
commit
a92b1fbded
6 changed files with 34 additions and 10 deletions
|
@ -144,6 +144,7 @@ config :pleroma, Pleroma.Search.Meilisearch, url: "http://127.0.0.1:7700/", priv
|
||||||
config :phoenix, :plug_init_mode, :runtime
|
config :phoenix, :plug_init_mode, :runtime
|
||||||
|
|
||||||
config :pleroma, :config_impl, Pleroma.UnstubbedConfigMock
|
config :pleroma, :config_impl, Pleroma.UnstubbedConfigMock
|
||||||
|
config :pleroma, :datetime_impl, Pleroma.DateTimeMock
|
||||||
|
|
||||||
config :pleroma, Pleroma.PromEx, disabled: true
|
config :pleroma, Pleroma.PromEx, disabled: true
|
||||||
|
|
||||||
|
|
3
lib/pleroma/datetime.ex
Normal file
3
lib/pleroma/datetime.ex
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
defmodule Pleroma.DateTime do
|
||||||
|
@callback utc_now() :: NaiveDateTime.t()
|
||||||
|
end
|
6
lib/pleroma/datetime/impl.ex
Normal file
6
lib/pleroma/datetime/impl.ex
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
defmodule Pleroma.DateTime.Impl do
|
||||||
|
@behaviour Pleroma.DateTime
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def utc_now, do: NaiveDateTime.utc_now()
|
||||||
|
end
|
|
@ -55,9 +55,13 @@ defmodule Pleroma.UserRelationship do
|
||||||
|
|
||||||
def user_relationship_mappings, do: Pleroma.UserRelationship.Type.__enum_map__()
|
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
|
def changeset(%UserRelationship{} = user_relationship, params \\ %{}) do
|
||||||
user_relationship
|
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])
|
|> validate_required([:relationship_type, :source_id, :target_id])
|
||||||
|> unique_constraint(:relationship_type,
|
|> unique_constraint(:relationship_type,
|
||||||
name: :user_relationships_source_id_relationship_type_target_id_index
|
name: :user_relationships_source_id_relationship_type_target_id_index
|
||||||
|
@ -65,6 +69,7 @@ defmodule Pleroma.UserRelationship do
|
||||||
|> validate_not_self_relationship()
|
|> validate_not_self_relationship()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec exists?(any(), Pleroma.User.t(), Pleroma.User.t()) :: boolean()
|
||||||
def exists?(relationship_type, %User{} = source, %User{} = target) do
|
def exists?(relationship_type, %User{} = source, %User{} = target) do
|
||||||
UserRelationship
|
UserRelationship
|
||||||
|> where(relationship_type: ^relationship_type, source_id: ^source.id, target_id: ^target.id)
|
|> 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,
|
relationship_type: relationship_type,
|
||||||
source_id: source.id,
|
source_id: source.id,
|
||||||
target_id: target.id,
|
target_id: target.id,
|
||||||
expires_at: expires_at
|
expires_at: expires_at,
|
||||||
|
inserted_at: datetime_impl().utc_now()
|
||||||
})
|
})
|
||||||
|> Repo.insert(
|
|> Repo.insert(
|
||||||
on_conflict: {:replace_all_except, [:id, :inserted_at]},
|
on_conflict: {:replace_all_except, [:id, :inserted_at]},
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.UserRelationshipTest do
|
defmodule Pleroma.UserRelationshipTest do
|
||||||
|
alias Pleroma.DateTimeMock
|
||||||
alias Pleroma.UserRelationship
|
alias Pleroma.UserRelationship
|
||||||
|
|
||||||
use Pleroma.DataCase, async: false
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
import Mock
|
import Mox
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
describe "*_exists?/2" do
|
describe "*_exists?/2" do
|
||||||
|
@ -52,6 +53,9 @@ defmodule Pleroma.UserRelationshipTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
test "creates user relationship record if it doesn't exist", %{users: [user1, user2]} do
|
test "creates user relationship record if it doesn't exist", %{users: [user1, user2]} do
|
||||||
|
DateTimeMock
|
||||||
|
|> stub_with(Pleroma.DateTime.Impl)
|
||||||
|
|
||||||
for relationship_type <- [
|
for relationship_type <- [
|
||||||
:block,
|
:block,
|
||||||
:mute,
|
:mute,
|
||||||
|
@ -80,13 +84,15 @@ defmodule Pleroma.UserRelationshipTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
test "if record already exists, returns it", %{users: [user1, user2]} do
|
test "if record already exists, returns it", %{users: [user1, user2]} do
|
||||||
user_block =
|
fixed_datetime = ~N[2017-03-17 17:09:58]
|
||||||
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
|
|
||||||
|
|
||||||
assert user_block == UserRelationship.create_block(user1, user2)
|
Pleroma.DateTimeMock
|
||||||
|
|> expect(:utc_now, 2, fn -> fixed_datetime end)
|
||||||
|
|
||||||
|
{:ok, %{inserted_at: ^fixed_datetime}} = UserRelationship.create_block(user1, user2)
|
||||||
|
|
||||||
|
# Test the idempotency without caring about the exact time
|
||||||
|
assert {:ok, _} = UserRelationship.create_block(user1, user2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -33,3 +33,5 @@ Mox.defmock(Pleroma.StubbedHTTPSignaturesMock, for: Pleroma.HTTPSignaturesAPI)
|
||||||
Mox.defmock(Pleroma.LoggerMock, for: Pleroma.Logging)
|
Mox.defmock(Pleroma.LoggerMock, for: Pleroma.Logging)
|
||||||
|
|
||||||
Mox.defmock(Pleroma.Uploaders.S3.ExAwsMock, for: Pleroma.Uploaders.S3.ExAwsAPI)
|
Mox.defmock(Pleroma.Uploaders.S3.ExAwsMock, for: Pleroma.Uploaders.S3.ExAwsAPI)
|
||||||
|
|
||||||
|
Mox.defmock(Pleroma.DateTimeMock, for: Pleroma.DateTime)
|
||||||
|
|
Loading…
Reference in a new issue