Fix OpenGraph and Twitter metadata providers when parsing objects with no content or summary fields.

This commit is contained in:
Mark Felder 2024-07-20 23:48:54 -04:00
parent e4a6973e0b
commit fb654acfad
3 changed files with 27 additions and 7 deletions

View file

@ -0,0 +1 @@
Fix OpenGraph and Twitter metadata providers when parsing objects with no content or summary fields.

View file

@ -25,11 +25,14 @@ defmodule Pleroma.Web.Metadata.Utils do
|> scrub_html_and_truncate_object_field(object) |> scrub_html_and_truncate_object_field(object)
end end
def scrub_html_and_truncate(%{data: %{"content" => content}} = object) do def scrub_html_and_truncate(%{data: %{"content" => content}} = object)
when is_binary(content) and content != "" do
content content
|> scrub_html_and_truncate_object_field(object) |> scrub_html_and_truncate_object_field(object)
end end
def scrub_html_and_truncate(%{}), do: ""
def scrub_html_and_truncate(content, max_length \\ 200, omission \\ "...") def scrub_html_and_truncate(content, max_length \\ 200, omission \\ "...")
when is_binary(content) do when is_binary(content) do
content content

View file

@ -8,7 +8,7 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
alias Pleroma.Web.Metadata.Utils alias Pleroma.Web.Metadata.Utils
describe "scrub_html_and_truncate/1" do describe "scrub_html_and_truncate/1" do
test "it returns content text without encode HTML if summary is nil" do test "it returns content text without HTML if summary is nil" do
user = insert(:user) user = insert(:user)
note = note =
@ -17,14 +17,14 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
"actor" => user.ap_id, "actor" => user.ap_id,
"id" => "https://pleroma.gov/objects/whatever", "id" => "https://pleroma.gov/objects/whatever",
"summary" => nil, "summary" => nil,
"content" => "Pleroma's really cool!" "content" => "Pleroma's really cool!<br>"
} }
}) })
assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!" assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!"
end end
test "it returns context text without encode HTML if summary is empty" do test "it returns content text without HTML if summary is empty" do
user = insert(:user) user = insert(:user)
note = note =
@ -33,14 +33,14 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
"actor" => user.ap_id, "actor" => user.ap_id,
"id" => "https://pleroma.gov/objects/whatever", "id" => "https://pleroma.gov/objects/whatever",
"summary" => "", "summary" => "",
"content" => "Pleroma's really cool!" "content" => "Pleroma's really cool!<br>"
} }
}) })
assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!" assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!"
end end
test "it returns summary text without encode HTML if summary is filled" do test "it returns summary text without HTML if summary is filled" do
user = insert(:user) user = insert(:user)
note = note =
@ -48,7 +48,7 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
data: %{ data: %{
"actor" => user.ap_id, "actor" => user.ap_id,
"id" => "https://pleroma.gov/objects/whatever", "id" => "https://pleroma.gov/objects/whatever",
"summary" => "Public service announcement on caffeine consumption", "summary" => "Public service announcement on caffeine consumption<br>",
"content" => "cofe" "content" => "cofe"
} }
}) })
@ -57,6 +57,22 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
"Public service announcement on caffeine consumption" "Public service announcement on caffeine consumption"
end end
test "it returns empty string if summary and content are absent" do
user = insert(:user)
note =
insert(:note, %{
data: %{
"actor" => user.ap_id,
"id" => "https://pleroma.gov/objects/whatever",
"content" => nil,
"summary" => nil
}
})
assert Utils.scrub_html_and_truncate(note) == ""
end
test "it does not return old content after editing" do test "it does not return old content after editing" do
user = insert(:user) user = insert(:user)