defmodule FeedParser.Parser.JSONFeedTest do use ExUnit.Case alias FeedParser.Parser.JSONFeed doctest JSONFeed test "matches json feed" do data = File.read!("test/fixtures/jsonfeed/feed.json") assert {true, _} = JSONFeed.accepts(data, "application/json") end test "matches v1.1 feed" do data = File.read!("test/fixtures/jsonfeed/v1_1.json") assert {true, _} = JSONFeed.accepts(data, "application/feed+json") end test "parses json feed" do data = File.read!("test/fixtures/jsonfeed/feed.json") {true, parsed_data} = JSONFeed.accepts(data, "application/json") assert {:ok, %FeedParser.Feed{} = feed} = JSONFeed.parse_feed(parsed_data) assert feed.title == "My Example Feed" assert feed.site_url == "https://example.org/" assert feed.last_updated == nil assert [%FeedParser.Item{} = item2, %FeedParser.Item{} = item1] = feed.items assert item2.guid == "2" assert item2.content == "This is a second item." assert item2.url == "https://example.org/second-item" assert item1.guid == "1" assert item1.content == "

Hello, world!

" assert item1.url == "https://example.org/initial-post" end test "parses item author" do assert {:ok, %FeedParser.Feed{items: items}} = JSONFeed.parse_feed(%{ "title" => "test", "items" => [ %{ "id" => "1", "author" => %{ "name" => "foo" } } ] }) assert [%FeedParser.Item{creator: "foo"}] = items end test "falls back to feed author" do assert {:ok, %FeedParser.Feed{items: items}} = JSONFeed.parse_feed(%{ "title" => "test", "author" => %{ "name" => "foo" }, "items" => [ %{ "id" => "1" } ] }) assert [%FeedParser.Item{creator: "foo"}] = items end test "handles multiple authors" do assert {:ok, %FeedParser.Feed{items: items}} = JSONFeed.parse_feed(%{ "title" => "test", "items" => [ %{ "id" => "1", "authors" => [%{"name" => "foo"}, %{"name" => "bar"}] } ] }) assert [%FeedParser.Item{creator: "foo, bar"}] = items end end