diff --git a/changelog.d/metadata-provider-empty-post.fix b/changelog.d/metadata-provider-empty-post.fix
new file mode 100644
index 000000000..8d6341c6c
--- /dev/null
+++ b/changelog.d/metadata-provider-empty-post.fix
@@ -0,0 +1 @@
+Fix OpenGraph and Twitter metadata providers when parsing objects with no content or summary fields.
diff --git a/lib/pleroma/web/metadata/utils.ex b/lib/pleroma/web/metadata/utils.ex
index 80a8be9a2..8f61ace24 100644
--- a/lib/pleroma/web/metadata/utils.ex
+++ b/lib/pleroma/web/metadata/utils.ex
@@ -25,11 +25,14 @@ defmodule Pleroma.Web.Metadata.Utils do
|> scrub_html_and_truncate_object_field(object)
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
|> scrub_html_and_truncate_object_field(object)
end
+ def scrub_html_and_truncate(%{}), do: ""
+
def scrub_html_and_truncate(content, max_length \\ 200, omission \\ "...")
when is_binary(content) do
content
diff --git a/test/pleroma/web/metadata/utils_test.exs b/test/pleroma/web/metadata/utils_test.exs
index 3daf852fb..9bc02dadf 100644
--- a/test/pleroma/web/metadata/utils_test.exs
+++ b/test/pleroma/web/metadata/utils_test.exs
@@ -8,7 +8,7 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
alias Pleroma.Web.Metadata.Utils
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)
note =
@@ -17,14 +17,14 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
"actor" => user.ap_id,
"id" => "https://pleroma.gov/objects/whatever",
"summary" => nil,
- "content" => "Pleroma's really cool!"
+ "content" => "Pleroma's really cool!
"
}
})
assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!"
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)
note =
@@ -33,14 +33,14 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
"actor" => user.ap_id,
"id" => "https://pleroma.gov/objects/whatever",
"summary" => "",
- "content" => "Pleroma's really cool!"
+ "content" => "Pleroma's really cool!
"
}
})
assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!"
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)
note =
@@ -48,7 +48,7 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
data: %{
"actor" => user.ap_id,
"id" => "https://pleroma.gov/objects/whatever",
- "summary" => "Public service announcement on caffeine consumption",
+ "summary" => "Public service announcement on caffeine consumption
",
"content" => "cofe"
}
})
@@ -57,6 +57,22 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
"Public service announcement on caffeine consumption"
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
user = insert(:user)