Stub color extractor in tests
Makes the test suite much faster
This commit is contained in:
@@ -101,6 +101,8 @@ config :music_library, OpenAI,
|
|||||||
|
|
||||||
config :phoenix_test, :endpoint, MusicLibraryWeb.Endpoint
|
config :phoenix_test, :endpoint, MusicLibraryWeb.Endpoint
|
||||||
|
|
||||||
|
config :music_library, color_extractor: MusicLibrary.Colors.FakeColorExtractor
|
||||||
|
|
||||||
config :music_library, Oban, testing: :manual
|
config :music_library, Oban, testing: :manual
|
||||||
|
|
||||||
config :music_library, MusicLibrary.Mailer, adapter: Swoosh.Adapters.Test
|
config :music_library, MusicLibrary.Mailer, adapter: Swoosh.Adapters.Test
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
defmodule MusicLibrary.Colors.Extractor do
|
||||||
|
@moduledoc """
|
||||||
|
Behaviour that defines the functions necessary to implement a dominant colors
|
||||||
|
extractor.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@callback extract_dominant_colors(binary(), pos_integer()) ::
|
||||||
|
{:ok, [String.t()]} | {:error, term()}
|
||||||
|
end
|
||||||
@@ -3,9 +3,11 @@ defmodule MusicLibrary.Colors.KMeansExtractor do
|
|||||||
Extracts dominant colors from images using K-Means clustering via the dominant_colors library.
|
Extracts dominant colors from images using K-Means clustering via the dominant_colors library.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@behaviour MusicLibrary.Colors.Extractor
|
||||||
|
|
||||||
alias Vix.Vips.Image
|
alias Vix.Vips.Image
|
||||||
|
|
||||||
@spec extract_dominant_colors(binary(), pos_integer()) :: {:ok, [String.t()]} | {:error, term()}
|
@impl true
|
||||||
def extract_dominant_colors(image_data, num_colors \\ 5) do
|
def extract_dominant_colors(image_data, num_colors \\ 5) do
|
||||||
:telemetry.span(
|
:telemetry.span(
|
||||||
[:music_library, :colors, :extract],
|
[:music_library, :colors, :extract],
|
||||||
|
|||||||
@@ -7,10 +7,15 @@ defmodule MusicLibrary.Records do
|
|||||||
|
|
||||||
alias MusicLibrary.Artists
|
alias MusicLibrary.Artists
|
||||||
alias MusicLibrary.Assets
|
alias MusicLibrary.Assets
|
||||||
alias MusicLibrary.Colors.KMeansExtractor
|
|
||||||
alias MusicLibrary.Records.{ArtistRecord, Record, SearchIndex, SearchParser}
|
alias MusicLibrary.Records.{ArtistRecord, Record, SearchIndex, SearchParser}
|
||||||
alias MusicLibrary.{Repo, Worker}
|
alias MusicLibrary.{Repo, Worker}
|
||||||
|
|
||||||
|
@color_extractor Application.compile_env(
|
||||||
|
:music_library,
|
||||||
|
:color_extractor,
|
||||||
|
MusicLibrary.Colors.KMeansExtractor
|
||||||
|
)
|
||||||
|
|
||||||
@type import_opts :: [
|
@type import_opts :: [
|
||||||
format: atom(),
|
format: atom(),
|
||||||
purchased_at: DateTime.t() | nil,
|
purchased_at: DateTime.t() | nil,
|
||||||
@@ -305,7 +310,7 @@ defmodule MusicLibrary.Records do
|
|||||||
def extract_colors(record) do
|
def extract_colors(record) do
|
||||||
asset = Assets.get!(record.cover_hash)
|
asset = Assets.get!(record.cover_hash)
|
||||||
|
|
||||||
with {:ok, colors} <- KMeansExtractor.extract_dominant_colors(asset.content) do
|
with {:ok, colors} <- @color_extractor.extract_dominant_colors(asset.content) do
|
||||||
update_record(record, %{dominant_colors: colors})
|
update_record(record, %{dominant_colors: colors})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
defmodule MusicLibrary.Colors.FakeColorExtractor do
|
||||||
|
@moduledoc """
|
||||||
|
Test stub for `MusicLibrary.Colors.KMeansExtractor`.
|
||||||
|
|
||||||
|
Returns hardcoded colors to avoid CPU-intensive K-means clustering in tests.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@behaviour MusicLibrary.Colors.Extractor
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def extract_dominant_colors(_image_data, _num_colors \\ 5) do
|
||||||
|
{:ok, ["#000000", "#c0c0c0", "#c08080", "#404000", "#804040"]}
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user