Pleroma/test/pleroma/web/feed/tag_controller_test.exs

196 lines
5.9 KiB
Elixir
Raw Normal View History

2019-12-06 07:32:29 +01:00
# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
2019-12-06 07:32:29 +01:00
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Feed.TagControllerTest do
use Pleroma.Web.ConnCase
import Pleroma.Factory
2019-12-17 20:13:45 +01:00
import SweetXml
2020-03-10 16:11:48 +01:00
alias Pleroma.Object
alias Pleroma.Web.CommonAPI
2019-12-17 20:13:45 +01:00
alias Pleroma.Web.Feed.FeedView
2019-12-06 07:32:29 +01:00
setup do: clear_config([:feed])
2019-12-06 07:32:29 +01:00
2020-01-24 20:08:10 +01:00
test "gets a feed (ATOM)", %{conn: conn} do
clear_config(
2020-01-24 20:08:10 +01:00
[:feed, :post_title],
%{max_length: 25, omission: "..."}
)
user = insert(:user)
2020-05-12 21:59:26 +02:00
{:ok, activity1} = CommonAPI.post(user, %{status: "yeah #PleromaArt"})
2020-01-24 20:08:10 +01:00
object = Object.normalize(activity1, fetch: false)
2020-01-24 20:08:10 +01:00
object_data =
Map.put(object.data, "attachment", [
%{
"url" => [
%{
"href" =>
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4",
"mediaType" => "video/mp4",
"type" => "Link"
}
]
}
])
object
|> Ecto.Changeset.change(data: object_data)
|> Pleroma.Repo.update()
2020-05-12 21:59:26 +02:00
{:ok, activity2} = CommonAPI.post(user, %{status: "42 This is :moominmamma #PleromaArt"})
2020-01-24 20:08:10 +01:00
2020-05-12 21:59:26 +02:00
{:ok, _activity3} = CommonAPI.post(user, %{status: "This is :moominmamma"})
2020-01-24 20:08:10 +01:00
response =
conn
|> put_req_header("accept", "application/atom+xml")
2020-01-24 20:08:10 +01:00
|> get(tag_feed_path(conn, :feed, "pleromaart.atom"))
|> response(200)
xml = parse(response)
assert xpath(xml, ~x"//feed/title/text()") == '#pleromaart'
assert xpath(xml, ~x"//feed/entry/title/text()"l) == [
'42 This is :moominmamm...',
'yeah #PleromaArt'
]
assert xpath(xml, ~x"//feed/entry/author/name/text()"ls) == [user.nickname, user.nickname]
assert xpath(xml, ~x"//feed/entry/author/id/text()"ls) == [user.ap_id, user.ap_id]
2020-03-10 16:11:48 +01:00
conn =
2020-03-10 16:11:48 +01:00
conn
|> put_req_header("accept", "application/atom+xml")
2020-03-10 16:11:48 +01:00
|> get("/tags/pleromaart.atom", %{"max_id" => activity2.id})
assert get_resp_header(conn, "content-type") == ["application/atom+xml; charset=utf-8"]
resp = response(conn, 200)
2020-03-10 16:11:48 +01:00
xml = parse(resp)
assert xpath(xml, ~x"//feed/title/text()") == '#pleromaart'
assert xpath(xml, ~x"//feed/entry/title/text()"l) == [
'yeah #PleromaArt'
]
2020-01-24 20:08:10 +01:00
end
test "gets a feed (RSS)", %{conn: conn} do
clear_config(
2019-12-06 07:32:29 +01:00
[:feed, :post_title],
2019-12-17 20:13:45 +01:00
%{max_length: 25, omission: "..."}
2019-12-06 07:32:29 +01:00
)
user = insert(:user)
2020-05-12 21:59:26 +02:00
{:ok, activity1} = CommonAPI.post(user, %{status: "yeah #PleromaArt"})
2019-12-17 20:13:45 +01:00
object = Object.normalize(activity1, fetch: false)
2019-12-17 20:13:45 +01:00
object_data =
Map.put(object.data, "attachment", [
%{
"url" => [
%{
"href" =>
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4",
"mediaType" => "video/mp4",
"type" => "Link"
}
]
}
])
object
|> Ecto.Changeset.change(data: object_data)
|> Pleroma.Repo.update()
2019-12-06 07:32:29 +01:00
2020-05-12 21:59:26 +02:00
{:ok, activity2} = CommonAPI.post(user, %{status: "42 This is :moominmamma #PleromaArt"})
2019-12-06 07:32:29 +01:00
2020-05-12 21:59:26 +02:00
{:ok, _activity3} = CommonAPI.post(user, %{status: "This is :moominmamma"})
2019-12-06 07:32:29 +01:00
2019-12-17 20:13:45 +01:00
response =
conn
|> put_req_header("accept", "application/rss+xml")
2019-12-23 15:12:55 +01:00
|> get(tag_feed_path(conn, :feed, "pleromaart.rss"))
2019-12-17 20:13:45 +01:00
|> response(200)
xml = parse(response)
assert xpath(xml, ~x"//channel/title/text()") == '#pleromaart'
assert xpath(xml, ~x"//channel/description/text()"s) ==
"These are public toots tagged with #pleromaart. You can interact with them if you have an account anywhere in the fediverse."
assert xpath(xml, ~x"//channel/link/text()") ==
'#{Pleroma.Web.Endpoint.url()}/tags/pleromaart.rss'
2019-12-17 20:13:45 +01:00
assert xpath(xml, ~x"//channel/webfeeds:logo/text()") ==
'#{Pleroma.Web.Endpoint.url()}/static/logo.svg'
2019-12-17 20:13:45 +01:00
assert xpath(xml, ~x"//channel/item/title/text()"l) == [
'42 This is :moominmamm...',
'yeah #PleromaArt'
]
assert xpath(xml, ~x"//channel/item/pubDate/text()"sl) == [
2020-05-12 11:12:10 +02:00
FeedView.pub_date(activity2.data["published"]),
FeedView.pub_date(activity1.data["published"])
2019-12-17 20:13:45 +01:00
]
assert xpath(xml, ~x"//channel/item/enclosure/@url"sl) == [
"https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4"
]
obj1 = Object.normalize(activity1, fetch: false)
obj2 = Object.normalize(activity2, fetch: false)
2019-12-17 20:13:45 +01:00
assert xpath(xml, ~x"//channel/item/description/text()"sl) == [
HtmlEntities.decode(FeedView.activity_content(obj2.data)),
HtmlEntities.decode(FeedView.activity_content(obj1.data))
2019-12-17 20:13:45 +01:00
]
response =
conn
|> put_req_header("accept", "application/rss+xml")
|> get(tag_feed_path(conn, :feed, "pleromaart.rss"))
|> response(200)
xml = parse(response)
assert xpath(xml, ~x"//channel/title/text()") == '#pleromaart'
assert xpath(xml, ~x"//channel/description/text()"s) ==
"These are public toots tagged with #pleromaart. You can interact with them if you have an account anywhere in the fediverse."
2020-03-10 16:11:48 +01:00
conn =
2020-03-10 16:11:48 +01:00
conn
|> put_req_header("accept", "application/rss+xml")
|> get("/tags/pleromaart.rss", %{"max_id" => activity2.id})
2020-03-10 16:11:48 +01:00
assert get_resp_header(conn, "content-type") == ["application/rss+xml; charset=utf-8"]
resp = response(conn, 200)
2020-03-10 16:11:48 +01:00
xml = parse(resp)
assert xpath(xml, ~x"//channel/title/text()") == '#pleromaart'
assert xpath(xml, ~x"//channel/item/title/text()"l) == [
'yeah #PleromaArt'
]
2019-12-06 07:32:29 +01:00
end
describe "private instance" do
setup do: clear_config([:instance, :public], false)
test "returns 404 for tags feed", %{conn: conn} do
conn
|> put_req_header("accept", "application/rss+xml")
|> get(tag_feed_path(conn, :feed, "pleromaart.rss"))
|> response(404)
end
end
2019-12-06 07:32:29 +01:00
end