summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2021-05-04 17:46:42 -0500
committerAlex Gleason <alex@alexgleason.me>2021-05-04 17:46:42 -0500
commit0afa091e6ce7e2d9db594a0822c7ad8a6ed81531 (patch)
treea30b3fbfd20e0697803f36249e649f0601d975fe
parente1996d7b96a7f240cf8b5ff4c7d97e0fbf3a625a (diff)
Fix MastodonAPI.StatusViewTest
-rw-r--r--lib/pleroma/web/mastodon_api/controllers/status_controller.ex2
-rw-r--r--lib/pleroma/web/mastodon_api/views/status_view.ex9
-rw-r--r--lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex2
-rw-r--r--lib/pleroma/web/rich_media/parser/card.ex3
-rw-r--r--test/pleroma/web/mastodon_api/views/status_view_test.exs52
5 files changed, 31 insertions, 37 deletions
diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex
index d1a58d5e1..3be805fa2 100644
--- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex
@@ -312,7 +312,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
with %Activity{} = activity <- Activity.get_by_id(status_id),
true <- Visibility.visible_for_user?(activity, user) do
data = Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)
- render(conn, "card.json", data)
+ render(conn, "card.json", %{embed: data})
else
_ -> render_error(conn, :not_found, "Record not found")
end
diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex
index 427476695..9605c8329 100644
--- a/lib/pleroma/web/mastodon_api/views/status_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/status_view.ex
@@ -271,7 +271,10 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
summary = object.data["summary"] || ""
- card = render("card.json", Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity))
+ card =
+ render("card.json", %{
+ embed: Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)
+ })
url =
if user.local do
@@ -369,7 +372,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
nil
end
- def render("card.json", %Embed{url: _, meta: _} = embed) do
+ def render("card.json", %{embed: %Embed{} = embed}) do
with {:ok, %Card{} = card} <- Card.parse(embed) do
Card.to_map(card)
else
@@ -377,7 +380,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
end
end
- def render("card.json", %Card{} = card), do: Card.to_map(card)
+ def render("card.json", %{embed: %Card{} = card}), do: Card.to_map(card)
def render("card.json", _), do: nil
def render("attachment.json", %{attachment: attachment}) do
diff --git a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex
index 2e4355992..32fe0b229 100644
--- a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex
+++ b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex
@@ -37,7 +37,7 @@ defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do
card:
StatusView.render(
"card.json",
- Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object)
+ %{embed: Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object)}
)
}
|> put_idempotency_key()
diff --git a/lib/pleroma/web/rich_media/parser/card.ex b/lib/pleroma/web/rich_media/parser/card.ex
index 1eb3ddbdd..f6193728a 100644
--- a/lib/pleroma/web/rich_media/parser/card.ex
+++ b/lib/pleroma/web/rich_media/parser/card.ex
@@ -33,7 +33,7 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do
type: oembed["type"],
author_name: oembed["author_name"],
author_url: oembed["author_url"],
- provider_name: oembed["provider_name"],
+ provider_name: oembed["provider_name"] || URI.parse(url).host,
provider_url: oembed["provider_url"],
html: oembed["html"],
width: oembed["width"],
@@ -50,6 +50,7 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do
title: get_title(embed),
description: get_description(embed),
type: "link",
+ provider_name: URI.parse(url).host,
image: get_image(embed) |> proxy()
}
|> validate()
diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs
index 2de3afc4f..12fa4ed3e 100644
--- a/test/pleroma/web/mastodon_api/views/status_view_test.exs
+++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs
@@ -17,6 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
alias Pleroma.Web.CommonAPI.Utils
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MastodonAPI.StatusView
+ alias Pleroma.Web.RichMedia.Parser.Embed
import Pleroma.Factory
import Tesla.Mock
@@ -591,56 +592,45 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
describe "rich media cards" do
test "a rich media card without a site name renders correctly" do
- page_url = "http://example.com"
-
- card = %{
- url: page_url,
- image: page_url <> "/example.jpg",
- title: "Example website"
+ embed = %Embed{
+ url: "http://example.com",
+ title: "Example website",
+ meta: %{"twitter:image" => "http://example.com/example.jpg"}
}
- %{provider_name: "example.com"} =
- StatusView.render("card.json", %{page_url: page_url, rich_media: card})
+ %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed})
end
test "a rich media card without a site name or image renders correctly" do
- page_url = "http://example.com"
-
- card = %{
- url: page_url,
+ embed = %Embed{
+ url: "http://example.com",
title: "Example website"
}
- %{provider_name: "example.com"} =
- StatusView.render("card.json", %{page_url: page_url, rich_media: card})
+ %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed})
end
test "a rich media card without an image renders correctly" do
- page_url = "http://example.com"
-
- card = %{
- url: page_url,
- site_name: "Example site name",
- title: "Example website"
+ embed = %Embed{
+ url: "http://example.com",
+ title: "Example website",
+ meta: %{"twitter:title" => "Example site name"}
}
- %{provider_name: "example.com"} =
- StatusView.render("card.json", %{page_url: page_url, rich_media: card})
+ %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed})
end
test "a rich media card with all relevant data renders correctly" do
- page_url = "http://example.com"
-
- card = %{
- url: page_url,
- site_name: "Example site name",
+ embed = %Embed{
+ url: "http://example.com",
title: "Example website",
- image: page_url <> "/example.jpg",
- description: "Example description"
+ meta: %{
+ "twitter:title" => "Example site name",
+ "twitter:image" => "http://example.com/example.jpg"
+ }
}
- %{provider_name: "example.com"} =
- StatusView.render("card.json", %{page_url: page_url, rich_media: card})
+ %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed})
end
end