resolve relative item urls with the absolute feed_url

This commit is contained in:
mmacia committed 2026-06-23 20:58:37 +00:00
1 parent 677fc89fbd
commit 1c3b0a8e2b
7 files changed
+94 -23

No files matched your search

+14
View File
@@ -20,6 +20,20 @@ defmodule FeedReader.AtomTest do
assert_receive {:item, %Item{title: "12345", content_summary: "12345"}}
end
test "preserves relative links when no absolute feed base is available" do
raw = %{"title" => "Story", "link" => [%{"href" => "/story", "rel" => "alternate"}]}
assert {:ok, %Item{canonical_url: "/story"}} =
Atom.normalize_item(raw, %Feed{html_url: "/"}, [])
assert {:ok, %Item{canonical_url: "https://example.com/story"}} =
Atom.normalize_item(
raw,
%Feed{html_url: "/", feed_url: "https://example.com/feed.xml"},
[]
)
end
test "accounts for parser failures and closes empty feeds" do
handler = Atom.handler()
sink = fn event -> send(self(), event) end
+14
View File
@@ -34,6 +34,20 @@ defmodule FeedReader.RDFTest do
assert_receive {:item, %Item{title: "Title only", content_full: nil, content_summary: nil}}
end
test "preserves relative links when no absolute feed base is available" do
raw = %{"title" => "Story", "link" => "/story"}
assert {:ok, %Item{canonical_url: "/story"}} =
RDF.normalize_item(raw, %Feed{html_url: "/"}, [])
assert {:ok, %Item{canonical_url: "https://example.com/story"}} =
RDF.normalize_item(
raw,
%Feed{html_url: "/", feed_url: "https://example.com/feed.xml"},
[]
)
end
test "enforces shared SAX limits and reports malformed XML" do
sink = fn _event -> :ok end
+17 -1
View File
@@ -1,7 +1,7 @@
defmodule FeedReader.RSSTest do
use ExUnit.Case, async: true
alias FeedReader.Formats.RSS
alias FeedReader.{Feed, Formats.RSS, Item}
@xml ~s(<rss version="2.0"><channel><title>Example</title><description>Latest news</description><link>https://example.com/</link><category>News</category><category>News</category><item><title>Story</title><guid isPermaLink="false">story-1</guid><link>/story</link><author>Writer</author><description>Summary</description><content:encoded><![CDATA[<p>Full text</p>]]></content:encoded><pubDate>Mon, 24 Feb 2025 17:00:05 GMT</pubDate></item><item><title> </title><link>https://example.com/second</link><pubDate>not a date</pubDate></item><item><title> </title></item></channel></rss>)
@@ -13,6 +13,22 @@ defmodule FeedReader.RSSTest do
assert {:ok, _} = parse("<rss version='2.0'><channel/></rss>", sink)
end
test "preserves relative links when no absolute feed base is available" do
assert {:ok, %Item{canonical_url: "/story"}} =
RSS.normalize_item(
%{"title" => "Story", "link" => "/story"},
%Feed{html_url: "/"},
[]
)
assert {:ok, %Item{canonical_url: "https://example.com/story"}} =
RSS.normalize_item(
%{"title" => "Story", "link" => "/story"},
%Feed{html_url: "/", feed_url: "https://example.com/feed.xml"},
[]
)
end
test "stops malformed and over-budget input and rejects orphan SAX events" do
sink = fn _event -> :ok end
assert {:error, _} = parse("<rss version='2.0'>", sink)