Speed up tests by caching cover data
Suggested and executed by Claude
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user