Fixed filepath bug when parsing metadata (#118)

This commit is contained in:
Kieran
2024-03-25 17:20:29 -07:00
committed by GitHub
parent fe641cfc49
commit af803b7081
7 changed files with 9912 additions and 18 deletions
@@ -58,7 +58,7 @@ defmodule Pinchflat.Downloading.MediaDownloaderTest do
describe "download_for_media_item/3 when testing media_item attributes" do
setup do
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
stub(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
{:ok, render_metadata(:media_metadata)}
end)
@@ -94,15 +94,44 @@ defmodule Pinchflat.Downloading.MediaDownloaderTest do
end
test "it extracts the thumbnail_filepath", %{media_item: media_item} do
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
metadata = render_parsed_metadata(:media_metadata)
thumbnail_filepath =
metadata["thumbnails"]
|> Enum.reverse()
|> Enum.find_value(fn attrs -> attrs["filepath"] end)
|> String.split(~r{\.}, include_captures: true)
|> List.insert_at(-3, "-thumb")
|> Enum.join()
:ok = File.cp(thumbnail_filepath_fixture(), thumbnail_filepath)
{:ok, Phoenix.json_library().encode!(metadata)}
end)
assert media_item.thumbnail_filepath == nil
assert {:ok, updated_media_item} = MediaDownloader.download_for_media_item(media_item)
assert String.ends_with?(updated_media_item.thumbnail_filepath, ".webp")
File.rm(updated_media_item.thumbnail_filepath)
end
test "it extracts the metadata_filepath", %{media_item: media_item} do
expect(YtDlpRunnerMock, :run, fn _url, _opts, _ot ->
metadata = render_parsed_metadata(:media_metadata)
infojson_filepath = metadata["infojson_filename"]
:ok = File.cp(infojson_filepath_fixture(), infojson_filepath)
{:ok, Phoenix.json_library().encode!(metadata)}
end)
assert media_item.metadata_filepath == nil
assert {:ok, updated_media_item} = MediaDownloader.download_for_media_item(media_item)
assert String.ends_with?(updated_media_item.metadata_filepath, ".info.json")
File.rm(updated_media_item.metadata_filepath)
end
end
@@ -1,5 +1,6 @@
defmodule Pinchflat.Metadata.MetadataParserTest do
use Pinchflat.DataCase
import Pinchflat.MediaFixtures
alias Pinchflat.Metadata.MetadataParser, as: Parser
@@ -88,6 +89,22 @@ defmodule Pinchflat.Metadata.MetadataParserTest do
end
describe "parse_for_media_item/1 when testing thumbnail metadata" do
setup %{metadata: metadata} do
thumbnail_filepath =
metadata["thumbnails"]
|> Enum.reverse()
|> Enum.find_value(fn attrs -> attrs["filepath"] end)
|> String.split(~r{\.}, include_captures: true)
|> List.insert_at(-3, "-thumb")
|> Enum.join()
:ok = File.cp(thumbnail_filepath_fixture(), thumbnail_filepath)
on_exit(fn -> File.rm(thumbnail_filepath) end)
{:ok, filepath: thumbnail_filepath}
end
test "extracts the thumbnail filepath", %{metadata: metadata} do
result = Parser.parse_for_media_item(metadata)
@@ -103,6 +120,14 @@ defmodule Pinchflat.Metadata.MetadataParserTest do
assert String.contains?(result.thumbnail_filepath, "-thumb.webp")
end
test "doesn't include thumbnail if the file doesn't exist on-disk", %{metadata: metadata, filepath: filepath} do
File.rm(filepath)
result = Parser.parse_for_media_item(metadata)
assert result.thumbnail_filepath == nil
end
test "doesn't freak out if the media has no thumbnails", %{metadata: metadata} do
metadata = Map.put(metadata, "thumbnails", %{})
@@ -121,12 +146,29 @@ defmodule Pinchflat.Metadata.MetadataParserTest do
end
describe "parse_for_media_item/1 when testing infojson metadata" do
setup %{metadata: metadata} do
infojson_filepath = metadata["infojson_filename"]
:ok = File.cp(infojson_filepath_fixture(), infojson_filepath)
on_exit(fn -> File.rm(infojson_filepath) end)
{:ok, filepath: infojson_filepath}
end
test "extracts the metadata filepath", %{metadata: metadata} do
result = Parser.parse_for_media_item(metadata)
assert String.ends_with?(result.metadata_filepath, ".info.json")
end
test "doesn't include metadata if the file doesn't exist on-disk", %{metadata: metadata, filepath: filepath} do
File.rm(filepath)
result = Parser.parse_for_media_item(metadata)
assert result.metadata_filepath == nil
end
test "doesn't freak out if the media has no infojson", %{metadata: metadata} do
metadata = Map.put(metadata, "infojson_filename", nil)