diff --git a/test/music_library/records/cover_test.exs b/test/music_library/records/cover_test.exs index cd1e7fba..8d279d53 100644 --- a/test/music_library/records/cover_test.exs +++ b/test/music_library/records/cover_test.exs @@ -7,7 +7,8 @@ defmodule MusicLibrary.Records.CoverTest do describe "resize/1" do test "it resizes to the desired size" do - cover_data = File.read!(marbles_cover_fixture()) + # Use the cached cover data which is much faster than reading from disk + cover_data = marbles_cover_data() {:ok, resized_cover} = Cover.resize(cover_data) assert cover_data !== resized_cover assert Cover.correct_size?(resized_cover) diff --git a/test/music_library/records_test.exs b/test/music_library/records_test.exs index fb212402..84b35a33 100644 --- a/test/music_library/records_test.exs +++ b/test/music_library/records_test.exs @@ -226,7 +226,7 @@ defmodule MusicLibrary.RecordsTest do release_group_id = release_group_id(:marbles) release_group_releases = release_group_releases(:marbles) - cover_data = File.read!(marbles_cover_fixture()) + cover_data = marbles_cover_data() Req.Test.stub(MusicBrainz.API, fn conn -> case conn.path_info do @@ -282,7 +282,7 @@ defmodule MusicLibrary.RecordsTest do release_group_id = release_group_id(:marbles) release_group_releases = release_group_releases(:marbles) - cover_data = File.read!(marbles_cover_fixture()) + cover_data = marbles_cover_data() Req.Test.stub(MusicBrainz.API, fn conn -> case conn.path_info do @@ -332,9 +332,9 @@ defmodule MusicLibrary.RecordsTest do describe "refresh cover/1" do test "it fetches and stores the updated cover" do - record = record(cover_data: File.read!(marbles_cover_fixture())) + record = record(cover_data: marbles_cover_data()) - raven_cover_data = File.read!(raven_cover_fixture()) + raven_cover_data = raven_cover_data() Req.Test.stub(MusicBrainz.API, fn conn -> Plug.Conn.send_resp(conn, 200, raven_cover_data) diff --git a/test/music_library_web/controllers/cover_controller_test.exs b/test/music_library_web/controllers/cover_controller_test.exs index 76127915..70ced89e 100644 --- a/test/music_library_web/controllers/cover_controller_test.exs +++ b/test/music_library_web/controllers/cover_controller_test.exs @@ -61,7 +61,7 @@ defmodule MusicLibraryWeb.CoverControllerTest do test "accepts a size attribute for resizing", %{conn: conn, record: record} do conn = get(conn, ~p"/covers/#{record.id}?size=480") - thumb = File.read!(marbles_thumb_fixture()) + thumb = marbles_thumb_data() hash = Cover.hash(thumb) assert conn.status == 200 diff --git a/test/music_library_web/live/collection_live/index_test.exs b/test/music_library_web/live/collection_live/index_test.exs index b07ba496..71734454 100644 --- a/test/music_library_web/live/collection_live/index_test.exs +++ b/test/music_library_web/live/collection_live/index_test.exs @@ -217,7 +217,7 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do end test "can change the record cover", %{conn: conn} do - record = record(cover_data: File.read!(marbles_cover_fixture())) + record = record(cover_data: marbles_cover_data()) cover_url = ~p"/covers/#{record.id}?vsn=#{record.cover_hash}" session = @@ -258,7 +258,7 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do release_group = release_group(:marbles) release_group_releases = release_group_releases(:marbles) - cover_data = File.read!(marbles_cover_fixture()) + cover_data = marbles_cover_data() Req.Test.stub(MusicBrainz.API, fn conn -> case conn.path_info do @@ -367,7 +367,7 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do release_group_id = release_group["id"] release_group_releases = release_group_releases(:marbles) - cover_data = File.read!(marbles_cover_fixture()) + cover_data = marbles_cover_data() Req.Test.stub(MusicBrainz.API, fn conn -> case conn.path_info do diff --git a/test/music_library_web/live/stats_live/index_test.exs b/test/music_library_web/live/stats_live/index_test.exs index 40650496..59943855 100644 --- a/test/music_library_web/live/stats_live/index_test.exs +++ b/test/music_library_web/live/stats_live/index_test.exs @@ -211,7 +211,7 @@ defmodule MusicLibraryWeb.StatsLive.IndexTest do release_group_id = release_group_id(:mystery_of_time) release_group_releases = release_group_releases(:mystery_of_time) - cover_data = File.read!(marbles_cover_fixture()) + cover_data = marbles_cover_data() Req.Test.stub(MusicBrainz.API, fn conn -> case conn.path_info do diff --git a/test/support/fixtures/music_library/records.ex b/test/support/fixtures/music_library/records.ex index a0687221..33391f2b 100644 --- a/test/support/fixtures/music_library/records.ex +++ b/test/support/fixtures/music_library/records.ex @@ -46,10 +46,19 @@ defmodule MusicLibrary.Fixtures.Records do @marbles_thumb_data_path "#{__DIR__}/marillion-marbles-thumb.jpg" @raven_cover_data_path "#{__DIR__}/steven-wilson-raven.jpg" + # Cache image data at module load time to avoid repeated file I/O + @marbles_cover_data File.read!(@marbles_cover_data_path) + @marbles_thumb_data File.read!(@marbles_thumb_data_path) + @raven_cover_data File.read!(@raven_cover_data_path) + def marbles_cover_fixture, do: @marbles_cover_data_path def marbles_thumb_fixture, do: @marbles_thumb_data_path def raven_cover_fixture, do: @raven_cover_data_path + def marbles_cover_data, do: @marbles_cover_data + def marbles_thumb_data, do: @marbles_thumb_data + def raven_cover_data, do: @raven_cover_data + def record(attrs \\ %{}) do record_musicbrainz_id = Ecto.UUID.generate() artist_name = Enum.random(@artists) @@ -60,7 +69,7 @@ defmodule MusicLibrary.Fixtures.Records do |> Enum.into(%{ genres: Enum.take_random(@genres, :rand.uniform(3)), cover_url: "https://coverartarchive.org/release-group/#{record_musicbrainz_id}/front", - cover_data: File.read!(@marbles_cover_data_path), + cover_data: @marbles_cover_data, musicbrainz_id: record_musicbrainz_id, musicbrainz_data: ReleaseGroup.release_group(:marbles), title: Enum.random(@titles),