summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2021-05-04 17:13:28 -0500
committerAlex Gleason <alex@alexgleason.me>2021-05-04 17:13:28 -0500
commit359c1d9f1f719d0f90a854c5729540cc7deaa7e5 (patch)
tree9b2e85a0da0c38b373ab2367a200154d9a31ebd5
parent6b2fa5f0bb60a5653af29ffdea6021997dd92062 (diff)
Fix ParserTest
-rw-r--r--lib/pleroma/web/rich_media/parser/card.ex2
-rw-r--r--lib/pleroma/web/rich_media/parser/meta_tags.ex9
-rw-r--r--lib/pleroma/web/rich_media/parsers/twitter_card.ex3
-rw-r--r--test/pleroma/web/rich_media/parser_test.exs130
4 files changed, 81 insertions, 63 deletions
diff --git a/lib/pleroma/web/rich_media/parser/card.ex b/lib/pleroma/web/rich_media/parser/card.ex
index 2e06aa562..1eb3ddbdd 100644
--- a/lib/pleroma/web/rich_media/parser/card.ex
+++ b/lib/pleroma/web/rich_media/parser/card.ex
@@ -103,7 +103,7 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do
def validate(%Embed{} = embed) do
case Card.parse(embed) do
- %Card{} = card -> validate(card)
+ {:ok, %Card{} = card} -> validate(card)
card -> {:error, {:invalid_metadata, card}}
end
end
diff --git a/lib/pleroma/web/rich_media/parser/meta_tags.ex b/lib/pleroma/web/rich_media/parser/meta_tags.ex
index e5c6b448d..ea544b110 100644
--- a/lib/pleroma/web/rich_media/parser/meta_tags.ex
+++ b/lib/pleroma/web/rich_media/parser/meta_tags.ex
@@ -16,6 +16,7 @@ defmodule Pleroma.Web.RichMedia.Parser.MetaTags do
_ -> acc
end
end)
+ |> clean_data()
end
defp parse_node({_tag, attrs, _children}) when is_list(attrs) do
@@ -27,4 +28,12 @@ defmodule Pleroma.Web.RichMedia.Parser.MetaTags do
end
defp parse_node(_), do: {:error, :invalid_meta_tag}
+
+ defp clean_data(data) do
+ data
+ |> Enum.reject(fn {key, val} ->
+ not match?({:ok, _}, Jason.encode(%{key => val}))
+ end)
+ |> Map.new()
+ end
end
diff --git a/lib/pleroma/web/rich_media/parsers/twitter_card.ex b/lib/pleroma/web/rich_media/parsers/twitter_card.ex
index a892d16ea..4785ac6df 100644
--- a/lib/pleroma/web/rich_media/parsers/twitter_card.ex
+++ b/lib/pleroma/web/rich_media/parsers/twitter_card.ex
@@ -14,7 +14,8 @@ defmodule Pleroma.Web.RichMedia.Parsers.TwitterCard do
def get_page_title(html) do
with [node | _] <- Floki.find(html, "html head title"),
- title when is_binary(title) and title != "" <- Floki.text(node) do
+ title when is_binary(title) and title != "" <- Floki.text(node),
+ true <- String.valid?(title) do
title
else
_ -> nil
diff --git a/test/pleroma/web/rich_media/parser_test.exs b/test/pleroma/web/rich_media/parser_test.exs
index 2f363b012..f7d010219 100644
--- a/test/pleroma/web/rich_media/parser_test.exs
+++ b/test/pleroma/web/rich_media/parser_test.exs
@@ -6,6 +6,7 @@ defmodule Pleroma.Web.RichMedia.ParserTest do
use ExUnit.Case, async: true
alias Pleroma.Web.RichMedia.Parser
+ alias Pleroma.Web.RichMedia.Parser.Embed
setup do
Tesla.Mock.mock(fn
@@ -86,76 +87,83 @@ defmodule Pleroma.Web.RichMedia.ParserTest do
assert {:error, _} = Parser.parse("http://example.com/empty")
end
- test "doesn't just add a title" do
- assert {:error, {:invalid_metadata, _}} = Parser.parse("http://example.com/non-ogp")
- end
-
test "parses ogp" do
- assert Parser.parse("http://example.com/ogp") ==
- {:ok,
- %{
- "image" => "http://ia.media-imdb.com/images/rock.jpg",
- "title" => "The Rock",
- "description" =>
- "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.",
- "type" => "video.movie",
- "url" => "http://example.com/ogp"
- }}
+ url = "http://example.com/ogp"
+
+ expected = %Embed{
+ meta: %{
+ "og:image" => "http://ia.media-imdb.com/images/rock.jpg",
+ "og:title" => "The Rock",
+ "og:description" =>
+ "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.",
+ "og:type" => "video.movie",
+ "og:url" => "http://www.imdb.com/title/tt0117500/"
+ },
+ oembed: nil,
+ title: "The Rock (1996)",
+ url: "http://example.com/ogp"
+ }
+
+ assert Parser.parse(url) == {:ok, expected}
end
- test "falls back to <title> when ogp:title is missing" do
- assert Parser.parse("http://example.com/ogp-missing-title") ==
- {:ok,
- %{
- "image" => "http://ia.media-imdb.com/images/rock.jpg",
- "title" => "The Rock (1996)",
- "description" =>
- "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.",
- "type" => "video.movie",
- "url" => "http://example.com/ogp-missing-title"
- }}
+ test "gets <title> tag" do
+ url = "http://example.com/ogp-missing-title"
+ expected = "The Rock (1996)"
+ assert {:ok, %Embed{title: ^expected}} = Parser.parse(url)
end
test "parses twitter card" do
- assert Parser.parse("http://example.com/twitter-card") ==
- {:ok,
- %{
- "card" => "summary",
- "site" => "@flickr",
- "image" => "https://farm6.staticflickr.com/5510/14338202952_93595258ff_z.jpg",
- "title" => "Small Island Developing States Photo Submission",
- "description" => "View the album on Flickr.",
- "url" => "http://example.com/twitter-card"
- }}
+ url = "http://example.com/twitter-card"
+
+ expected = %Embed{
+ meta: %{
+ "twitter:card" => "summary",
+ "twitter:description" => "View the album on Flickr.",
+ "twitter:image" => "https://farm6.staticflickr.com/5510/14338202952_93595258ff_z.jpg",
+ "twitter:site" => "@flickr",
+ "twitter:title" => "Small Island Developing States Photo Submission"
+ },
+ oembed: nil,
+ title: nil,
+ url: "http://example.com/twitter-card"
+ }
+
+ assert Parser.parse(url) == {:ok, expected}
end
test "parses OEmbed" do
- assert Parser.parse("http://example.com/oembed") ==
- {:ok,
- %{
- "author_name" => "‮‭‬bees‬",
- "author_url" => "https://www.flickr.com/photos/bees/",
- "cache_age" => 3600,
- "flickr_type" => "photo",
- "height" => "768",
- "html" =>
- "<a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/bees/2362225867/\" title=\"Bacon Lollys by ‮‭‬bees‬, on Flickr\"><img src=\"https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_b.jpg\" width=\"1024\" height=\"768\" alt=\"Bacon Lollys\"></a><script async src=\"https://embedr.flickr.com/assets/client-code.js\" charset=\"utf-8\"></script>",
- "license" => "All Rights Reserved",
- "license_id" => 0,
- "provider_name" => "Flickr",
- "provider_url" => "https://www.flickr.com/",
- "thumbnail_height" => 150,
- "thumbnail_url" =>
- "https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_q.jpg",
- "thumbnail_width" => 150,
- "title" => "Bacon Lollys",
- "type" => "photo",
- "url" => "http://example.com/oembed",
- "version" => "1.0",
- "web_page" => "https://www.flickr.com/photos/bees/2362225867/",
- "web_page_short_url" => "https://flic.kr/p/4AK2sc",
- "width" => "1024"
- }}
+ url = "http://example.com/oembed"
+
+ expected = %Embed{
+ meta: %{},
+ oembed: %{
+ "author_name" => "‮‭‬bees‬",
+ "author_url" => "https://www.flickr.com/photos/bees/",
+ "cache_age" => 3600,
+ "flickr_type" => "photo",
+ "height" => "768",
+ "html" =>
+ "<a data-flickr-embed=\"true\" href=\"https://www.flickr.com/photos/bees/2362225867/\" title=\"Bacon Lollys by ‮‭‬bees‬, on Flickr\"><img src=\"https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_b.jpg\" width=\"1024\" height=\"768\" alt=\"Bacon Lollys\"></a><script async src=\"https://embedr.flickr.com/assets/client-code.js\" charset=\"utf-8\"></script>",
+ "license" => "All Rights Reserved",
+ "license_id" => 0,
+ "provider_name" => "Flickr",
+ "provider_url" => "https://www.flickr.com/",
+ "thumbnail_height" => 150,
+ "thumbnail_url" => "https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_q.jpg",
+ "thumbnail_width" => 150,
+ "title" => "Bacon Lollys",
+ "type" => "photo",
+ "url" => "https://farm4.staticflickr.com/3040/2362225867_4a87ab8baf_b.jpg",
+ "version" => "1.0",
+ "web_page" => "https://www.flickr.com/photos/bees/2362225867/",
+ "web_page_short_url" => "https://flic.kr/p/4AK2sc",
+ "width" => "1024"
+ },
+ url: "http://example.com/oembed"
+ }
+
+ assert Parser.parse(url) == {:ok, expected}
end
test "rejects invalid OGP data" do