mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2026-02-15 17:16:57 +00:00
Merge branch 'relationship-expires-at' into 'develop'
MastoAPI AccountView: Add mute/block expiry to the relationship object (simplified) See merge request pleroma/pleroma!4433
This commit is contained in:
commit
833e9829ba
6 changed files with 228 additions and 38 deletions
1
changelog.d/relationship-expires-at.change
Normal file
1
changelog.d/relationship-expires-at.change
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Add mute/block expiry to the relationship object
|
||||||
|
|
@ -45,7 +45,7 @@ defmodule Pleroma.UserRelationship do
|
||||||
do: exists?(unquote(relationship_type), source, target)
|
do: exists?(unquote(relationship_type), source, target)
|
||||||
|
|
||||||
# `def get_block_expire_date/2`, `def get_mute_expire_date/2`,
|
# `def get_block_expire_date/2`, `def get_mute_expire_date/2`,
|
||||||
# `def get_reblog_mute_expire_date/2`, `def get_notification_mute_exists?/2`,
|
# `def get_reblog_mute_expire_date/2`, `def get_notification_mute_expire_date/2`,
|
||||||
# `def get_inverse_subscription_expire_date/2`, `def get_inverse_endorsement_expire_date/2`
|
# `def get_inverse_subscription_expire_date/2`, `def get_inverse_endorsement_expire_date/2`
|
||||||
def unquote(:"get_#{relationship_type}_expire_date")(source, target),
|
def unquote(:"get_#{relationship_type}_expire_date")(source, target),
|
||||||
do: get_expire_date(unquote(relationship_type), source, target)
|
do: get_expire_date(unquote(relationship_type), source, target)
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do
|
||||||
requested: %Schema{type: :boolean},
|
requested: %Schema{type: :boolean},
|
||||||
showing_reblogs: %Schema{type: :boolean},
|
showing_reblogs: %Schema{type: :boolean},
|
||||||
subscribing: %Schema{type: :boolean},
|
subscribing: %Schema{type: :boolean},
|
||||||
notifying: %Schema{type: :boolean}
|
notifying: %Schema{type: :boolean},
|
||||||
|
mute_expires_at: %Schema{type: :string, format: "date-time", nullable: true},
|
||||||
|
block_expires_at: %Schema{type: :string, format: "date-time", nullable: true}
|
||||||
},
|
},
|
||||||
example: %{
|
example: %{
|
||||||
"blocked_by" => false,
|
"blocked_by" => false,
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,24 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
followed_by = FollowingRelationship.following?(target, reading_user)
|
followed_by = FollowingRelationship.following?(target, reading_user)
|
||||||
following = FollowingRelationship.following?(reading_user, target)
|
following = FollowingRelationship.following?(reading_user, target)
|
||||||
|
|
||||||
|
blocking =
|
||||||
|
UserRelationship.exists?(
|
||||||
|
user_relationships,
|
||||||
|
:block,
|
||||||
|
reading_user,
|
||||||
|
target,
|
||||||
|
&User.blocks_user?(&1, &2)
|
||||||
|
)
|
||||||
|
|
||||||
|
muting =
|
||||||
|
UserRelationship.exists?(
|
||||||
|
user_relationships,
|
||||||
|
:mute,
|
||||||
|
reading_user,
|
||||||
|
target,
|
||||||
|
&User.mutes?(&1, &2)
|
||||||
|
)
|
||||||
|
|
||||||
requested =
|
requested =
|
||||||
cond do
|
cond do
|
||||||
following -> false
|
following -> false
|
||||||
|
|
@ -116,14 +134,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
id: to_string(target.id),
|
id: to_string(target.id),
|
||||||
following: following,
|
following: following,
|
||||||
followed_by: followed_by,
|
followed_by: followed_by,
|
||||||
blocking:
|
blocking: blocking,
|
||||||
UserRelationship.exists?(
|
|
||||||
user_relationships,
|
|
||||||
:block,
|
|
||||||
reading_user,
|
|
||||||
target,
|
|
||||||
&User.blocks_user?(&1, &2)
|
|
||||||
),
|
|
||||||
blocked_by:
|
blocked_by:
|
||||||
UserRelationship.exists?(
|
UserRelationship.exists?(
|
||||||
user_relationships,
|
user_relationships,
|
||||||
|
|
@ -132,14 +143,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
reading_user,
|
reading_user,
|
||||||
&User.blocks_user?(&1, &2)
|
&User.blocks_user?(&1, &2)
|
||||||
),
|
),
|
||||||
muting:
|
block_expires_at: nil,
|
||||||
UserRelationship.exists?(
|
muting: muting,
|
||||||
user_relationships,
|
|
||||||
:mute,
|
|
||||||
reading_user,
|
|
||||||
target,
|
|
||||||
&User.mutes?(&1, &2)
|
|
||||||
),
|
|
||||||
muting_notifications:
|
muting_notifications:
|
||||||
UserRelationship.exists?(
|
UserRelationship.exists?(
|
||||||
user_relationships,
|
user_relationships,
|
||||||
|
|
@ -148,6 +153,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
target,
|
target,
|
||||||
&User.muted_notifications?(&1, &2)
|
&User.muted_notifications?(&1, &2)
|
||||||
),
|
),
|
||||||
|
mute_expires_at: nil,
|
||||||
subscribing: subscribing,
|
subscribing: subscribing,
|
||||||
notifying: subscribing,
|
notifying: subscribing,
|
||||||
requested: requested,
|
requested: requested,
|
||||||
|
|
@ -174,6 +180,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
&User.endorses?(&1, &2)
|
&User.endorses?(&1, &2)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|> maybe_put_mute_expires_at(target, reading_user, %{mutes: muting})
|
||||||
|
|> maybe_put_block_expires_at(target, reading_user, %{blocks: blocking})
|
||||||
end
|
end
|
||||||
|
|
||||||
def render("relationships.json", %{user: user, targets: targets} = opts) do
|
def render("relationships.json", %{user: user, targets: targets} = opts) do
|
||||||
|
|
@ -343,8 +351,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
|> maybe_put_unread_conversation_count(user, opts[:for])
|
|> maybe_put_unread_conversation_count(user, opts[:for])
|
||||||
|> maybe_put_unread_notification_count(user, opts[:for])
|
|> maybe_put_unread_notification_count(user, opts[:for])
|
||||||
|> maybe_put_email_address(user, opts[:for])
|
|> maybe_put_email_address(user, opts[:for])
|
||||||
|> maybe_put_mute_expires_at(user, opts[:for], opts)
|
|> maybe_put_mute_expires_at(user, opts[:for], opts, relationship)
|
||||||
|> maybe_put_block_expires_at(user, opts[:for], opts)
|
|> maybe_put_block_expires_at(user, opts[:for], opts, relationship)
|
||||||
|> maybe_show_birthday(user, opts[:for])
|
|> maybe_show_birthday(user, opts[:for])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -472,25 +480,47 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
|
|
||||||
defp maybe_put_email_address(data, _, _), do: data
|
defp maybe_put_email_address(data, _, _), do: data
|
||||||
|
|
||||||
defp maybe_put_mute_expires_at(data, %User{} = user, target, %{mutes: true}) do
|
defp maybe_put_mute_expires_at(data, target, user, opts, relationship \\ nil)
|
||||||
|
|
||||||
|
defp maybe_put_mute_expires_at(data, _target, _user, %{mutes: true}, %{
|
||||||
|
mute_expires_at: mute_expires_at
|
||||||
|
}) do
|
||||||
|
Map.put(data, :mute_expires_at, mute_expires_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp maybe_put_mute_expires_at(data, %User{} = target, user, %{mutes: true}, _relationship) do
|
||||||
Map.put(
|
Map.put(
|
||||||
data,
|
data,
|
||||||
:mute_expires_at,
|
:mute_expires_at,
|
||||||
UserRelationship.get_mute_expire_date(target, user)
|
UserRelationship.get_mute_expire_date(user, target)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp maybe_put_mute_expires_at(data, _, _, _), do: data
|
defp maybe_put_mute_expires_at(data, _, _, _, _), do: data
|
||||||
|
|
||||||
defp maybe_put_block_expires_at(data, %User{} = user, target, %{blocks: true}) do
|
defp maybe_put_block_expires_at(data, target, user, opts, relationship \\ nil)
|
||||||
|
|
||||||
|
defp maybe_put_block_expires_at(data, _target, _user, %{blocks: true}, %{
|
||||||
|
block_expires_at: block_expires_at
|
||||||
|
}) do
|
||||||
|
Map.put(data, :block_expires_at, block_expires_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp maybe_put_block_expires_at(
|
||||||
|
data,
|
||||||
|
%User{} = target,
|
||||||
|
%User{} = user,
|
||||||
|
%{blocks: true},
|
||||||
|
_relationship
|
||||||
|
) do
|
||||||
Map.put(
|
Map.put(
|
||||||
data,
|
data,
|
||||||
:block_expires_at,
|
:block_expires_at,
|
||||||
UserRelationship.get_block_expire_date(target, user)
|
UserRelationship.get_block_expire_date(user, target)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp maybe_put_block_expires_at(data, _, _, _), do: data
|
defp maybe_put_block_expires_at(data, _, _, _, _), do: data
|
||||||
|
|
||||||
defp maybe_show_birthday(data, %User{id: user_id} = user, %User{id: user_id}) do
|
defp maybe_show_birthday(data, %User{id: user_id} = user, %User{id: user_id}) do
|
||||||
data
|
data
|
||||||
|
|
|
||||||
|
|
@ -1901,7 +1901,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
|
|
||||||
{:ok, _user_relationships} = User.mute(user, other_user1)
|
{:ok, _user_relationships} = User.mute(user, other_user1)
|
||||||
{:ok, _user_relationships} = User.mute(user, other_user2)
|
{:ok, _user_relationships} = User.mute(user, other_user2)
|
||||||
{:ok, _user_relationships} = User.mute(user, other_user3)
|
{:ok, _user_relationships} = User.mute(user, other_user3, %{duration: 24 * 60 * 60})
|
||||||
|
|
||||||
|
date =
|
||||||
|
DateTime.utc_now()
|
||||||
|
|> DateTime.add(24 * 60 * 60)
|
||||||
|
|> DateTime.truncate(:second)
|
||||||
|
|> DateTime.to_iso8601()
|
||||||
|
|
||||||
result =
|
result =
|
||||||
conn
|
conn
|
||||||
|
|
@ -1937,6 +1943,17 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
|> json_response_and_validate_schema(200)
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
assert [%{"id" => ^id3}] = result
|
assert [%{"id" => ^id3}] = result
|
||||||
|
|
||||||
|
result =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/mutes")
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
assert [
|
||||||
|
%{"id" => ^id3, "mute_expires_at" => ^date},
|
||||||
|
%{"id" => ^id2, "mute_expires_at" => nil},
|
||||||
|
%{"id" => ^id1, "mute_expires_at" => nil}
|
||||||
|
] = result
|
||||||
end
|
end
|
||||||
|
|
||||||
test "list of mutes with with_relationships parameter" do
|
test "list of mutes with with_relationships parameter" do
|
||||||
|
|
@ -1951,20 +1968,44 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
|
|
||||||
{:ok, _} = User.mute(user, other_user1)
|
{:ok, _} = User.mute(user, other_user1)
|
||||||
{:ok, _} = User.mute(user, other_user2)
|
{:ok, _} = User.mute(user, other_user2)
|
||||||
{:ok, _} = User.mute(user, other_user3)
|
{:ok, _} = User.mute(user, other_user3, %{duration: 24 * 60 * 60})
|
||||||
|
|
||||||
|
date =
|
||||||
|
DateTime.utc_now()
|
||||||
|
|> DateTime.add(24 * 60 * 60)
|
||||||
|
|> DateTime.truncate(:second)
|
||||||
|
|> DateTime.to_iso8601()
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
%{
|
%{
|
||||||
"id" => ^id3,
|
"id" => ^id3,
|
||||||
"pleroma" => %{"relationship" => %{"muting" => true, "followed_by" => true}}
|
"pleroma" => %{
|
||||||
|
"relationship" => %{
|
||||||
|
"muting" => true,
|
||||||
|
"mute_expires_at" => ^date,
|
||||||
|
"followed_by" => true
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
"id" => ^id2,
|
"id" => ^id2,
|
||||||
"pleroma" => %{"relationship" => %{"muting" => true, "followed_by" => true}}
|
"pleroma" => %{
|
||||||
|
"relationship" => %{
|
||||||
|
"muting" => true,
|
||||||
|
"mute_expires_at" => nil,
|
||||||
|
"followed_by" => true
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
"id" => ^id1,
|
"id" => ^id1,
|
||||||
"pleroma" => %{"relationship" => %{"muting" => true, "followed_by" => true}}
|
"pleroma" => %{
|
||||||
|
"relationship" => %{
|
||||||
|
"muting" => true,
|
||||||
|
"mute_expires_at" => nil,
|
||||||
|
"followed_by" => true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
] =
|
] =
|
||||||
conn
|
conn
|
||||||
|
|
@ -1980,7 +2021,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
|
|
||||||
{:ok, _user_relationship} = User.block(user, other_user1)
|
{:ok, _user_relationship} = User.block(user, other_user1)
|
||||||
{:ok, _user_relationship} = User.block(user, other_user3)
|
{:ok, _user_relationship} = User.block(user, other_user3)
|
||||||
{:ok, _user_relationship} = User.block(user, other_user2)
|
{:ok, _user_relationship} = User.block(user, other_user2, %{duration: 24 * 60 * 60})
|
||||||
|
|
||||||
|
date =
|
||||||
|
DateTime.utc_now()
|
||||||
|
|> DateTime.add(24 * 60 * 60)
|
||||||
|
|> DateTime.truncate(:second)
|
||||||
|
|> DateTime.to_iso8601()
|
||||||
|
|
||||||
result =
|
result =
|
||||||
conn
|
conn
|
||||||
|
|
@ -2045,6 +2092,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
|> json_response_and_validate_schema(200)
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
assert [%{"id" => ^id1}] = result
|
assert [%{"id" => ^id1}] = result
|
||||||
|
|
||||||
|
result =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> get("api/v1/blocks")
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
assert [
|
||||||
|
%{"id" => ^id3, "block_expires_at" => nil},
|
||||||
|
%{"id" => ^id2, "block_expires_at" => ^date},
|
||||||
|
%{"id" => ^id1, "block_expires_at" => nil}
|
||||||
|
] = result
|
||||||
end
|
end
|
||||||
|
|
||||||
test "list of blocks with with_relationships parameter" do
|
test "list of blocks with with_relationships parameter" do
|
||||||
|
|
@ -2059,20 +2118,44 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
|
|
||||||
{:ok, _} = User.block(user, other_user1)
|
{:ok, _} = User.block(user, other_user1)
|
||||||
{:ok, _} = User.block(user, other_user2)
|
{:ok, _} = User.block(user, other_user2)
|
||||||
{:ok, _} = User.block(user, other_user3)
|
{:ok, _} = User.block(user, other_user3, %{duration: 24 * 60 * 60})
|
||||||
|
|
||||||
|
date =
|
||||||
|
DateTime.utc_now()
|
||||||
|
|> DateTime.add(24 * 60 * 60)
|
||||||
|
|> DateTime.truncate(:second)
|
||||||
|
|> DateTime.to_iso8601()
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
%{
|
%{
|
||||||
"id" => ^id3,
|
"id" => ^id3,
|
||||||
"pleroma" => %{"relationship" => %{"blocking" => true, "followed_by" => false}}
|
"pleroma" => %{
|
||||||
|
"relationship" => %{
|
||||||
|
"blocking" => true,
|
||||||
|
"block_expires_at" => ^date,
|
||||||
|
"followed_by" => false
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
"id" => ^id2,
|
"id" => ^id2,
|
||||||
"pleroma" => %{"relationship" => %{"blocking" => true, "followed_by" => false}}
|
"pleroma" => %{
|
||||||
|
"relationship" => %{
|
||||||
|
"blocking" => true,
|
||||||
|
"block_expires_at" => nil,
|
||||||
|
"followed_by" => false
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
"id" => ^id1,
|
"id" => ^id1,
|
||||||
"pleroma" => %{"relationship" => %{"blocking" => true, "followed_by" => false}}
|
"pleroma" => %{
|
||||||
|
"relationship" => %{
|
||||||
|
"blocking" => true,
|
||||||
|
"block_expires_at" => nil,
|
||||||
|
"followed_by" => false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
] =
|
] =
|
||||||
conn
|
conn
|
||||||
|
|
|
||||||
|
|
@ -439,8 +439,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
|
||||||
following: false,
|
following: false,
|
||||||
followed_by: false,
|
followed_by: false,
|
||||||
blocking: false,
|
blocking: false,
|
||||||
|
block_expires_at: nil,
|
||||||
blocked_by: false,
|
blocked_by: false,
|
||||||
muting: false,
|
muting: false,
|
||||||
|
mute_expires_at: nil,
|
||||||
muting_notifications: false,
|
muting_notifications: false,
|
||||||
subscribing: false,
|
subscribing: false,
|
||||||
notifying: false,
|
notifying: false,
|
||||||
|
|
@ -536,6 +538,53 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
|
||||||
test_relationship_rendering(user, other_user, expected)
|
test_relationship_rendering(user, other_user, expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "represent a relationship for the blocking and blocked user with expiry" do
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
date = DateTime.utc_now() |> DateTime.add(24 * 60 * 60) |> DateTime.truncate(:second)
|
||||||
|
|
||||||
|
{:ok, user, other_user} = User.follow(user, other_user)
|
||||||
|
{:ok, _subscription} = User.subscribe(user, other_user)
|
||||||
|
{:ok, _user_relationship} = User.block(user, other_user, %{duration: 24 * 60 * 60})
|
||||||
|
{:ok, _user_relationship} = User.block(other_user, user)
|
||||||
|
|
||||||
|
expected =
|
||||||
|
Map.merge(
|
||||||
|
@blank_response,
|
||||||
|
%{
|
||||||
|
following: false,
|
||||||
|
blocking: true,
|
||||||
|
block_expires_at: date,
|
||||||
|
blocked_by: true,
|
||||||
|
id: to_string(other_user.id)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
test_relationship_rendering(user, other_user, expected)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "represent a relationship for the muting user with expiry" do
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
date = DateTime.utc_now() |> DateTime.add(24 * 60 * 60) |> DateTime.truncate(:second)
|
||||||
|
|
||||||
|
{:ok, _user_relationship} =
|
||||||
|
User.mute(user, other_user, %{notifications: true, duration: 24 * 60 * 60})
|
||||||
|
|
||||||
|
expected =
|
||||||
|
Map.merge(
|
||||||
|
@blank_response,
|
||||||
|
%{
|
||||||
|
muting: true,
|
||||||
|
mute_expires_at: date,
|
||||||
|
muting_notifications: true,
|
||||||
|
id: to_string(other_user.id)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
test_relationship_rendering(user, other_user, expected)
|
||||||
|
end
|
||||||
|
|
||||||
test "represent a relationship for the user blocking a domain" do
|
test "represent a relationship for the user blocking a domain" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
other_user = insert(:user, ap_id: "https://bad.site/users/other_user")
|
other_user = insert(:user, ap_id: "https://bad.site/users/other_user")
|
||||||
|
|
@ -856,12 +905,37 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
|
||||||
User.mute(user, other_user, %{notifications: true, duration: 24 * 60 * 60})
|
User.mute(user, other_user, %{notifications: true, duration: 24 * 60 * 60})
|
||||||
|
|
||||||
%{
|
%{
|
||||||
mute_expires_at: mute_expires_at
|
pleroma: %{
|
||||||
} = AccountView.render("show.json", %{user: other_user, for: user, mutes: true})
|
relationship: %{
|
||||||
|
mute_expires_at: mute_expires_at
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} = AccountView.render("show.json", %{user: other_user, for: user, embed_relationships: true})
|
||||||
|
|
||||||
assert DateTime.diff(
|
assert DateTime.diff(
|
||||||
mute_expires_at,
|
mute_expires_at,
|
||||||
DateTime.utc_now() |> DateTime.add(24 * 60 * 60)
|
DateTime.utc_now() |> DateTime.add(24 * 60 * 60)
|
||||||
) in -3..3
|
) in -3..3
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "renders block expiration date" do
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, _user_relationships} =
|
||||||
|
User.block(user, other_user, %{duration: 24 * 60 * 60})
|
||||||
|
|
||||||
|
%{
|
||||||
|
pleroma: %{
|
||||||
|
relationship: %{
|
||||||
|
block_expires_at: block_expires_at
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} = AccountView.render("show.json", %{user: other_user, for: user, embed_relationships: true})
|
||||||
|
|
||||||
|
assert DateTime.diff(
|
||||||
|
block_expires_at,
|
||||||
|
DateTime.utc_now() |> DateTime.add(24 * 60 * 60)
|
||||||
|
) in -3..3
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue