Recipient Type: Cast all elements as ObjectIDs.
This commit is contained in:
parent
3d040b1a87
commit
906cf53ab9
|
@ -1,13 +1,24 @@
|
||||||
defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients do
|
defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients do
|
||||||
use Ecto.Type
|
use Ecto.Type
|
||||||
|
|
||||||
def type, do: {:array, :string}
|
alias Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID
|
||||||
|
|
||||||
|
def type, do: {:array, ObjectID}
|
||||||
|
|
||||||
def cast(object) when is_binary(object) do
|
def cast(object) when is_binary(object) do
|
||||||
cast([object])
|
cast([object])
|
||||||
end
|
end
|
||||||
|
|
||||||
def cast([_ | _] = data), do: {:ok, data}
|
def cast(data) when is_list(data) do
|
||||||
|
data
|
||||||
|
|> Enum.reduce({:ok, []}, fn element, acc ->
|
||||||
|
case {acc, ObjectID.cast(element)} do
|
||||||
|
{:error, _} -> :error
|
||||||
|
{_, :error} -> :error
|
||||||
|
{{:ok, list}, {:ok, id}} -> {:ok, [id | list]}
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
def cast(_) do
|
def cast(_) do
|
||||||
:error
|
:error
|
||||||
|
|
|
@ -2,11 +2,23 @@ defmodule Pleroma.Web.ObjectValidators.Types.RecipientsTest do
|
||||||
alias Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients
|
alias Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients
|
||||||
use Pleroma.DataCase
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
test "it asserts that all elements of the list are object ids" do
|
||||||
|
list = ["https://lain.com/users/lain", "invalid"]
|
||||||
|
|
||||||
|
assert :error == Recipients.cast(list)
|
||||||
|
end
|
||||||
|
|
||||||
test "it works with a list" do
|
test "it works with a list" do
|
||||||
list = ["https://lain.com/users/lain"]
|
list = ["https://lain.com/users/lain"]
|
||||||
assert {:ok, list} == Recipients.cast(list)
|
assert {:ok, list} == Recipients.cast(list)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it works with a list with whole objects" do
|
||||||
|
list = ["https://lain.com/users/lain", %{"id" => "https://gensokyo.2hu/users/raymoo"}]
|
||||||
|
resulting_list = ["https://gensokyo.2hu/users/raymoo", "https://lain.com/users/lain"]
|
||||||
|
assert {:ok, resulting_list} == Recipients.cast(list)
|
||||||
|
end
|
||||||
|
|
||||||
test "it turns a single string into a list" do
|
test "it turns a single string into a list" do
|
||||||
recipient = "https://lain.com/users/lain"
|
recipient = "https://lain.com/users/lain"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue