Rename test
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
86f2545068
commit
c5a05a8e14
4 changed files with 106 additions and 5 deletions
|
@ -0,0 +1,49 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContentLanguageMap do
|
||||||
|
use Ecto.Type
|
||||||
|
|
||||||
|
import Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode,
|
||||||
|
only: [is_good_locale_code?: 1]
|
||||||
|
|
||||||
|
def type, do: :map
|
||||||
|
|
||||||
|
def cast(%{} = object) do
|
||||||
|
with {status, %{} = data} when status in [:modified, :ok] <- validate_map(object) do
|
||||||
|
{:ok, data}
|
||||||
|
else
|
||||||
|
{_, nil} -> {:ok, nil}
|
||||||
|
{:error, _} -> :error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def cast(_), do: :error
|
||||||
|
|
||||||
|
def dump(data), do: {:ok, data}
|
||||||
|
|
||||||
|
def load(data), do: {:ok, data}
|
||||||
|
|
||||||
|
defp validate_map(%{} = object) do
|
||||||
|
{status, data} =
|
||||||
|
object
|
||||||
|
|> Enum.reduce({:ok, %{}}, fn
|
||||||
|
{lang, value}, {status, acc} when is_binary(lang) and is_binary(value) ->
|
||||||
|
if is_good_locale_code?(lang) do
|
||||||
|
{status, Map.put(acc, lang, value)}
|
||||||
|
else
|
||||||
|
{:modified, acc}
|
||||||
|
end
|
||||||
|
|
||||||
|
_, {_status, acc} ->
|
||||||
|
{:modified, acc}
|
||||||
|
end)
|
||||||
|
|
||||||
|
if data == %{} do
|
||||||
|
{status, nil}
|
||||||
|
else
|
||||||
|
{status, data}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,15 +11,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
|
||||||
alias Pleroma.Web.ActivityPub.Transmogrifier
|
alias Pleroma.Web.ActivityPub.Transmogrifier
|
||||||
alias Pleroma.Web.ActivityPub.Utils
|
alias Pleroma.Web.ActivityPub.Utils
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
require Pleroma.Constants
|
require Pleroma.Constants
|
||||||
|
|
||||||
import Pleroma.Web.CommonAPI.Utils, only: [is_good_locale_code?: 1]
|
|
||||||
=======
|
|
||||||
import Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode,
|
import Pleroma.EctoType.ActivityPub.ObjectValidators.LanguageCode,
|
||||||
only: [is_good_locale_code?: 1]
|
only: [is_good_locale_code?: 1]
|
||||||
|
|
||||||
>>>>>>> b52d189fcc (Move is_good_locale_code? to object validator)
|
|
||||||
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
import Pleroma.Web.Utils.Guards, only: [not_empty_string: 1]
|
||||||
|
|
||||||
def cast_and_filter_recipients(message, field, follower_collection, field_fallback \\ []) do
|
def cast_and_filter_recipients(message, field, follower_collection, field_fallback \\ []) do
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContentLanguageMapTest do
|
||||||
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.EctoType.ActivityPub.ObjectValidators.ContentLanguageMap
|
||||||
|
|
||||||
|
test "it validates" do
|
||||||
|
data = %{
|
||||||
|
"en-US" => "mew mew",
|
||||||
|
"en-GB" => "meow meow"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, ^data} = ContentLanguageMap.cast(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it validates empty strings" do
|
||||||
|
data = %{
|
||||||
|
"en-US" => "mew mew",
|
||||||
|
"en-GB" => ""
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, ^data} = ContentLanguageMap.cast(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it ignores non-strings within the map" do
|
||||||
|
data = %{
|
||||||
|
"en-US" => "mew mew",
|
||||||
|
"en-GB" => 123
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, validated_data} = ContentLanguageMap.cast(data)
|
||||||
|
|
||||||
|
assert validated_data == %{"en-US" => "mew mew"}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it ignores bad locale codes" do
|
||||||
|
data = %{
|
||||||
|
"en-US" => "mew mew",
|
||||||
|
"en_GB" => "meow meow",
|
||||||
|
"en<<#@!$#!@%!GB" => "meow meow"
|
||||||
|
}
|
||||||
|
|
||||||
|
assert {:ok, validated_data} = ContentLanguageMap.cast(data)
|
||||||
|
|
||||||
|
assert validated_data == %{"en-US" => "mew mew"}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it complains with non-map data" do
|
||||||
|
assert :error = ContentLanguageMap.cast("mew")
|
||||||
|
assert :error = ContentLanguageMap.cast(["mew"])
|
||||||
|
assert :error = ContentLanguageMap.cast([%{"en-US" => "mew"}])
|
||||||
|
end
|
||||||
|
end
|
|
@ -178,7 +178,7 @@ test "Parse tag as quote" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "Note language" do
|
describe "Note language" do
|
||||||
test "it detects language from context" do
|
test "it detects language from JSON-LD context" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
note_activity = %{
|
note_activity = %{
|
||||||
|
|
Loading…
Reference in a new issue