fix tests

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2024-05-31 23:39:58 +02:00
parent 305a8d9c98
commit e80715c06d
18 changed files with 73 additions and 26 deletions

View file

@ -91,7 +91,7 @@ defp get_description(upload) do
end
defp validate_description_limit(%{} = description) do
Enum.each(description, fn content ->
Enum.all?(description, fn {_, content} ->
String.length(content) <= Pleroma.Config.get([:instance, :description_limit])
end)
end

View file

@ -86,6 +86,7 @@ defp fix(data) do
|> fix_attachments()
|> CommonFixes.fix_quote_url()
|> Transmogrifier.fix_emoji()
|> Transmogrifier.fix_content_map()
|> CommonFixes.maybe_add_language()
|> CommonFixes.maybe_add_content_map()
end

View file

@ -13,7 +13,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator do
embedded_schema do
field(:name, :string)
field(:nameRendered, :string)
field(:nameMap, ObjectValidators.ContentLanguageMap)
embeds_one :replies, Replies, primary_key: false do
@ -26,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator do
def changeset(struct, data) do
struct
|> cast(data, [:name, :nameRendered, :nameMap, :type])
|> cast(data, [:name, :nameMap, :type])
|> cast_embed(:replies, with: &replies_changeset/2)
|> validate_inclusion(:type, ["Note"])
|> validate_required([:name, :type])

View file

@ -103,6 +103,11 @@ defp update_request do
type: :string,
description: "A plain-text description of the media, for accessibility purposes."
}),
language: %Schema{
type: :string,
nullable: true,
description: "ISO 639 language code for this status."
},
focus: %Schema{
type: :string,
description: "Two floating points (x,y), comma-delimited, ranging from -1.0 to 1.0."

View file

@ -163,7 +163,9 @@ defp language(%{params: %{language: language}} = draft) when not is_nil(language
defp language(%{status: status} = draft) when is_binary(status) do
detected_language =
LanguageDetector.detect(draft.status <> " " <> (draft.summary || draft.params[:summary]))
LanguageDetector.detect(
draft.status <> " " <> (draft.summary || draft.params[:summary] || draft.params[:name])
)
if MultiLanguage.good_locale_code?(detected_language) do
%__MODULE__{
@ -535,7 +537,7 @@ defp differentiate_string_map(str) when is_binary(str), do: {str, nil}
defp get_source_map(%{status_map: %{} = status_map} = draft) do
%{
"content" => Map.get(status_map, draft.language),
"content" => Map.get(draft, :status),
"contentMap" => status_map
}
end

View file

@ -29,6 +29,10 @@ def create(
{_, true} <-
{:valid_locale,
Map.get(data, :description_map) == nil or MultiLanguage.good_locale_code?(language)},
{_, true} <-
{:locale_included,
Map.get(data, :description_map) == nil or
Map.has_key?(Map.get(data, :description_map), language)},
{:ok, object} <-
ActivityPub.upload(
file,
@ -44,6 +48,9 @@ def create(
{:valid_locale, _} ->
render_error(conn, 422, "valid language must be provided with description_map")
{:locale_included, _} ->
render_error(conn, 422, "the provided language must be included in description_map")
{:error, e} ->
conn
|> put_status(:unprocessable_entity)
@ -63,6 +70,10 @@ def create2(
{_, true} <-
{:valid_locale,
Map.get(data, :description_map) == nil or MultiLanguage.good_locale_code?(language)},
{_, true} <-
{:locale_included,
Map.get(data, :description_map) == nil or
Map.has_key?(Map.get(data, :description_map), language)},
{:ok, object} <-
ActivityPub.upload(
file,
@ -80,6 +91,9 @@ def create2(
{:valid_locale, _} ->
render_error(conn, 422, "valid language must be provided with description_map")
{:locale_included, _} ->
render_error(conn, 422, "the provided language must be included in description_map")
{:error, e} ->
conn
|> put_status(:unprocessable_entity)
@ -104,9 +118,9 @@ def update(
) do
with %Object{} = object <- Object.get_by_id(id),
:ok <- Object.authorize_access(object, user),
language = Map.get(body_params, :language, object["language"]),
{_, true} <-
{:valid_locale, description_map == nil or MultiLanguage.good_locale_code?(language)},
language = Map.get(body_params, :language, object.data["language"]),
{_, true} <- {:valid_locale, MultiLanguage.good_locale_code?(language)},
{_, true} <- {:locale_included, Map.has_key?(description_map, language)},
{_, {:ok, %{}}} <- {:description_map, MultiLanguage.validate_map(description_map)},
{:ok, %Object{data: data}} <-
Object.update_data(object, %{
@ -120,6 +134,9 @@ def update(
{:valid_locale, _} ->
render_error(conn, 422, "valid language must be provided with description_map")
{:locale_included, _} ->
render_error(conn, 422, "the provided language must be included in description_map")
{:description_map, _} ->
render_error(conn, 422, "description_map not valid")
end

View file

@ -212,7 +212,14 @@ def create(
} = conn,
_
) do
create(conn |> put_in([:private, :open_api_spex, :body_params, :status], ""), %{})
create(
put_in(
conn,
[Access.key(:private), Access.key(:open_api_spex), Access.key(:body_params), :status],
""
),
%{}
)
end
def create(
@ -222,7 +229,14 @@ def create(
} = conn,
_
) do
create(conn |> put_in([:private, :open_api_spex, :body_params, :status], ""), %{})
create(
put_in(
conn,
[Access.key(:private), Access.key(:open_api_spex), Access.key(:body_params), :status],
""
),
%{}
)
end
defp do_create(

View file

@ -65,7 +65,7 @@ defp options_and_votes_count(options) do
current_count = option["replies"]["totalItems"] || 0
{%{
title: option["nameRendered"] || name,
title: name,
title_map: option["nameMap"] || %{},
votes_count: current_count
}, current_count + count}

View file

@ -1412,7 +1412,7 @@ test "sets a description if given", %{test_file: file} do
test "sets a multilang description if given", %{test_file: file} do
{:ok, %Object{} = object} =
ActivityPub.upload(file, description_map: %{"a" => "mew", "b" => "lol"})
ActivityPub.upload(file, description_map: %{"a" => "mew", "b" => "lol"}, language: "a")
assert object.data["nameMap"] == %{"a" => "mew", "b" => "lol"}
end

View file

@ -56,7 +56,8 @@ test "accepts multilang" do
tags: [],
summary_map: %{"a" => "mew", "b" => "lol"},
cc: [],
extra: %{}
extra: %{},
language: "a"
}
assert {:ok,

View file

@ -20,7 +20,7 @@ test "" do
"nameMap" => name_map
}
assert %{valid?: true, changes: %{nameMap: ^name_map, nameRendered: _}} =
assert %{valid?: true, changes: %{nameMap: ^name_map, name: _}} =
QuestionOptionsValidator.changeset(%QuestionOptionsValidator{}, data)
end
end

View file

@ -251,7 +251,7 @@ test "it only uses contentMap if content is not present" do
assert object.data["content"] == "Hi"
end
test "it works for incoming notices with a nil contentMap (firefish)" do
test "it works for incoming notices with a nil content (firefish)" do
data =
File.read!("test/fixtures/mastodon-post-activity-contentmap.json")
|> Jason.decode!()

View file

@ -19,7 +19,8 @@ test "content", %{user: user} do
{:ok, draft} =
ActivityDraft.create(user, %{
status_map: %{"a" => "mew mew", "b" => "lol lol"},
spoiler_text_map: %{"a" => "mew", "b" => "lol"}
spoiler_text_map: %{"a" => "mew", "b" => "lol"},
language: "a"
})
assert %{

View file

@ -740,7 +740,8 @@ test "multilang support" do
%{"a" => "bar", "c" => "2"}
],
expires_in: 600
}
},
language: "a"
})
assert %{"oneOf" => choices} = poll

View file

@ -55,7 +55,8 @@ test "/api/v1/media, multilang", %{conn: conn, image: image} do
|> put_req_header("content-type", "multipart/form-data")
|> post("/api/v1/media", %{
"file" => image,
"description_map" => %{"a" => "mew", "b" => "lol"}
"description_map" => %{"a" => "mew", "b" => "lol"},
"language" => "a"
})
|> json_response_and_validate_schema(:ok)
@ -119,7 +120,8 @@ test "/api/v2/media, multilang", %{conn: conn, image: image} do
|> put_req_header("content-type", "multipart/form-data")
|> post("/api/v2/media", %{
"file" => image,
"description_map" => %{"a" => "mew", "b" => "lol"}
"description_map" => %{"a" => "mew", "b" => "lol"},
"language" => "a"
})
|> json_response_and_validate_schema(202)
@ -261,7 +263,8 @@ test "/api/v1/media/:id description_map", %{conn: conn, object: object} do
conn
|> put_req_header("content-type", "multipart/form-data")
|> put("/api/v1/media/#{object.id}", %{
"description_map" => %{"a" => "test-media", "b" => "xxx"}
"description_map" => %{"a" => "test-media", "b" => "xxx"},
"language" => "a"
})
|> json_response_and_validate_schema(:ok)

View file

@ -321,6 +321,7 @@ test "posting a multilang summary with singlelang status", %{conn: conn} do
|> put_req_header("idempotency-key", idempotency_key)
|> post("/api/v1/statuses", %{
"spoiler_text_map" => %{"a" => "mew mew", "b" => "lol lol"},
"language" => "a",
"status" => "mewlol",
"sensitive" => "0"
})
@ -864,7 +865,8 @@ test "posting a multilang poll", %{conn: conn} do
%{"a" => "Misato", "b" => "3"}
],
"expires_in" => 420
}
},
"language" => "a"
})
response = json_response_and_validate_schema(conn, 200)

View file

@ -175,8 +175,7 @@ test "renders multilang" do
"oneOf" => [
%{
"name" => "mew",
"nameMap" => %{"en" => "mew", "cmn" => ""},
"nameRendered" => "mew | 喵"
"nameMap" => %{"en" => "mew", "cmn" => ""}
},
%{"name" => "mew mew", "nameMap" => %{"en" => "mew mew", "cmn" => "喵喵"}}
]
@ -185,7 +184,7 @@ test "renders multilang" do
assert %{
options: [
%{title: "mew | 喵", title_map: %{"en" => "mew", "cmn" => ""}},
%{title: "mew", title_map: %{"en" => "mew", "cmn" => ""}},
%{title: "mew mew", title_map: %{"en" => "mew mew", "cmn" => "喵喵"}}
]
} = PollView.render("show.json", %{object: object})

View file

@ -380,7 +380,6 @@ test "a note activity with multiple languages" do
content_map: %{"en" => "mew mew", "cmn" => "喵喵"},
spoiler_text: "mew",
spoiler_text_map: %{"en" => "mew", "cmn" => ""},
language: "mul",
pleroma: %{
content: %{"text/plain" => "mew mew"},
content_map: %{"text/plain" => %{"en" => "mew mew", "cmn" => "喵喵"}},
@ -399,7 +398,8 @@ test "a note activity with single language" do
"content" => "mew mew",
"contentMap" => %{"en" => "mew mew"},
"summary" => "mew",
"summaryMap" => %{"en" => "mew"}
"summaryMap" => %{"en" => "mew"},
"language" => "en"
}
)
@ -686,6 +686,7 @@ test "Complete Mastodon style" do
preview_url: "someurl",
text_url: "someurl",
description: nil,
description_map: %{},
pleroma: %{mime_type: "image/png"},
meta: %{original: %{width: 200, height: 100, aspect: 2}},
blurhash: "UJJ8X[xYW,%Jtq%NNFbXB5j]IVM|9GV=WHRn"
@ -720,6 +721,7 @@ test "Honkerific" do
expected = %{
blurhash: nil,
description: "they have played us for absolute fools.",
description_map: %{},
id: "1638338801",
pleroma: %{mime_type: "image/png", name: "fool.jpeg"},
preview_url: "someurl",