From a806c1175471e3da8febc211d149547dbffe684e Mon Sep 17 00:00:00 2001 From: Moises Macia Date: Thu, 19 Mar 2026 22:31:22 +0000 Subject: [PATCH] add tests --- test/feed_reader/format_detection_test.exs | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 test/feed_reader/format_detection_test.exs diff --git a/test/feed_reader/format_detection_test.exs b/test/feed_reader/format_detection_test.exs new file mode 100644 index 0000000..2e2e4d5 --- /dev/null +++ b/test/feed_reader/format_detection_test.exs @@ -0,0 +1,43 @@ +defmodule FeedReader.FormatDetectionTest do + use ExUnit.Case, async: true + + alias FeedReader.TestSupport.ExternalFormat + + test "detects RSS, Atom, and RDF from a bounded XML prefix" do + assert FeedReader.detect_format("") == :rss + assert FeedReader.detect_format("") == :atom + assert FeedReader.detect_format("") == :rdf + assert FeedReader.detect_format("not a feed") == :unknown + end + + test "custom format detection replays the bounded prefix and unread chunks" do + chunks = ["tail", "continued"] + + {format, _prefix, replay} = + FeedReader.FormatDetector.detect_and_replay(chunks, + formats: [ExternalFormat], + max_detection_bytes: 15 + ) + + assert format == :external_test + assert replay |> Enum.to_list() |> IO.iodata_to_binary() == IO.iodata_to_binary(chunks) + assert FeedReader.detect_format("") == :rss + end + + test "detection does not inspect content beyond the configured prefix" do + content = String.duplicate("x", 12) <> "" + + assert FeedReader.detect_format(content, max_detection_bytes: 12) == :unknown + assert FeedReader.detect_format(content, max_detection_bytes: 40) == :rss + end + + test "validation checks only the explicitly selected format" do + rss = "" + + assert FeedReader.validate(rss, :rss) + assert FeedReader.validate(rss, FeedReader.Formats.RSS) + refute FeedReader.validate(rss, :atom) + refute FeedReader.validate(rss, :unknown) + assert FeedReader.validate("", ExternalFormat) + end +end