Files
pinchflat/test/pinchflat/fast_indexing/youtube_rss_test.exs
T
Kieran f6708a327c [Enhancement] Optionally use the YouTube API for improved fast indexing (#282)
* Started adding youtube API for fast indexing

* Hooked youtube API into fast indexing

* Added youtube_api_key to settings

* Added youtube api key to settings UI

* Added tests

* Refactored the youtube api module

* More refactor

* Changed editing mode name from basic to standard

* [WIP] started on copy changes

* Updated copy
2024-06-10 11:45:41 -07:00

84 lines
2.5 KiB
Elixir

defmodule Pinchflat.FastIndexing.YoutubeRssTest do
use Pinchflat.DataCase
import Pinchflat.SourcesFixtures
alias Pinchflat.FastIndexing.YoutubeRss
setup do
source = source_fixture()
{:ok, source: source}
end
describe "enabled?/0" do
test "returns true" do
assert YoutubeRss.enabled?()
end
end
describe "get_recent_media_ids/1" do
test "calls the expected URL for channel sources" do
source = source_fixture(collection_type: :channel, collection_id: "channel_id")
expect(HTTPClientMock, :get, fn url ->
assert url =~ "https://www.youtube.com/feeds/videos.xml?channel_id=#{source.collection_id}"
{:ok, ""}
end)
assert {:ok, _} = YoutubeRss.get_recent_media_ids(source)
end
test "calls the expected URL for playlist sources" do
source = source_fixture(collection_type: :playlist, collection_id: "playlist_id")
expect(HTTPClientMock, :get, fn url ->
assert url =~ "https://www.youtube.com/feeds/videos.xml?playlist_id=#{source.collection_id}"
{:ok, ""}
end)
assert {:ok, _} = YoutubeRss.get_recent_media_ids(source)
end
test "returns an error if the HTTP request fails", %{source: source} do
expect(HTTPClientMock, :get, fn _url -> {:error, ""} end)
assert {:error, "Failed to fetch RSS feed"} = YoutubeRss.get_recent_media_ids(source)
end
test "returns the media IDs from the RSS feed", %{source: source} do
expect(HTTPClientMock, :get, fn _url ->
{:ok, "<yt:videoId>test_1</yt:videoId><yt:videoId>test_2</yt:videoId>"}
end)
assert {:ok, ["test_1", "test_2"]} = YoutubeRss.get_recent_media_ids(source)
end
test "strips whitespace from media IDs", %{source: source} do
expect(HTTPClientMock, :get, fn _url ->
{:ok, "<yt:videoId> test_1 </yt:videoId><yt:videoId> test_2 </yt:videoId>"}
end)
assert {:ok, ["test_1", "test_2"]} = YoutubeRss.get_recent_media_ids(source)
end
test "removes empty media IDs", %{source: source} do
expect(HTTPClientMock, :get, fn _url ->
{:ok, "<yt:videoId>test_1</yt:videoId><yt:videoId></yt:videoId>"}
end)
assert {:ok, ["test_1"]} = YoutubeRss.get_recent_media_ids(source)
end
test "removes duplicate media IDs", %{source: source} do
expect(HTTPClientMock, :get, fn _url ->
{:ok, "<yt:videoId>test_1</yt:videoId><yt:videoId>test_1</yt:videoId>"}
end)
assert {:ok, ["test_1"]} = YoutubeRss.get_recent_media_ids(source)
end
end
end