Object Validator Types: Add Recipients.
This commit is contained in:
parent
58fded9858
commit
b8056e69e0
|
@ -0,0 +1,34 @@
|
||||||
|
defmodule Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients do
|
||||||
|
use Ecto.Type
|
||||||
|
|
||||||
|
alias Pleroma.Web.ActivityPub.ObjectValidators.Types.ObjectID
|
||||||
|
|
||||||
|
def type, do: {:array, ObjectID}
|
||||||
|
|
||||||
|
def cast(object) when is_binary(object) do
|
||||||
|
cast([object])
|
||||||
|
end
|
||||||
|
|
||||||
|
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
|
||||||
|
:error
|
||||||
|
end
|
||||||
|
|
||||||
|
def dump(data) do
|
||||||
|
{:ok, data}
|
||||||
|
end
|
||||||
|
|
||||||
|
def load(data) do
|
||||||
|
{:ok, data}
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,27 @@
|
||||||
|
defmodule Pleroma.Web.ObjectValidators.Types.RecipientsTest do
|
||||||
|
alias Pleroma.Web.ActivityPub.ObjectValidators.Types.Recipients
|
||||||
|
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
|
||||||
|
list = ["https://lain.com/users/lain"]
|
||||||
|
assert {:ok, list} == Recipients.cast(list)
|
||||||
|
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
|
||||||
|
recipient = "https://lain.com/users/lain"
|
||||||
|
|
||||||
|
assert {:ok, [recipient]} == Recipients.cast(recipient)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue