From 7ec3e68e58243b5399c36c169e71316dc57f1531 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Tue, 3 Mar 2026 16:13:23 +0000 Subject: [PATCH] Relax assertions on colors As dominant colors are not stable on different environments --- test/music_library/colors/k_means_extractor_test.exs | 12 ++++++++---- test/music_library/records_test.exs | 10 +++------- test/support/color_helpers.ex | 12 ++++++++++++ 3 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 test/support/color_helpers.ex diff --git a/test/music_library/colors/k_means_extractor_test.exs b/test/music_library/colors/k_means_extractor_test.exs index 6eebe058..a7e3bbb6 100644 --- a/test/music_library/colors/k_means_extractor_test.exs +++ b/test/music_library/colors/k_means_extractor_test.exs @@ -1,19 +1,23 @@ defmodule MusicLibrary.Colors.KMeansExtractorTest do use ExUnit.Case + import MusicLibrary.ColorHelpers, only: [color_hex?: 1] + alias MusicLibrary.Colors.KMeansExtractor @image_data MusicLibrary.Fixtures.Records.marbles_cover_data() describe "extract_dominant_colors/1" do test "extracts 5 colors by default" do - assert {:ok, ["#101111", "#d3b696", "#836246", "#5d412d", "#3c2e22"]} == - KMeansExtractor.extract_dominant_colors(@image_data) + assert {:ok, colors} = KMeansExtractor.extract_dominant_colors(@image_data) + assert length(colors) == 5 + assert Enum.all?(colors, &color_hex?/1) end test "extracts custom number of colors" do - assert {:ok, ["#101111", "#d3b696", "#836246"]} == - KMeansExtractor.extract_dominant_colors(@image_data, 3) + assert {:ok, colors} = KMeansExtractor.extract_dominant_colors(@image_data, 3) + assert length(colors) == 3 + assert Enum.all?(colors, &color_hex?/1) end end end diff --git a/test/music_library/records_test.exs b/test/music_library/records_test.exs index cedd2543..275fe63b 100644 --- a/test/music_library/records_test.exs +++ b/test/music_library/records_test.exs @@ -3,6 +3,7 @@ defmodule MusicLibrary.RecordsTest do import MusicBrainz.Fixtures.Release import MusicBrainz.Fixtures.ReleaseGroup + import MusicLibrary.ColorHelpers, only: [color_hex?: 1] import MusicLibrary.Fixtures.Records alias MusicLibrary.Assets @@ -46,13 +47,8 @@ defmodule MusicLibrary.RecordsTest do assert record.cover_hash == "599407DDF69907D4A60FE13CCAA824D25CF08DC124FD6AA3E8E7ECD98C885FFE" - assert record.dominant_colors == [ - "#101111", - "#d3b696", - "#836246", - "#5d412d", - "#3c2e22" - ] + assert length(record.dominant_colors) == 5 + assert Enum.all?(record.dominant_colors, &color_hex?/1) end test "it queues a task to retrieve artist info data" do diff --git a/test/support/color_helpers.ex b/test/support/color_helpers.ex new file mode 100644 index 00000000..5621666d --- /dev/null +++ b/test/support/color_helpers.ex @@ -0,0 +1,12 @@ +defmodule MusicLibrary.ColorHelpers do + @doc """ + Returns true if the given string is a valid lowercase hex color code. + + iex> MusicLibrary.ColorHelpers.color_hex?("#d3b696") + true + + iex> MusicLibrary.ColorHelpers.color_hex?("not a color") + false + """ + def color_hex?(value), do: String.match?(value, ~r/^#[0-9a-f]{6}$/) +end