Files
music_library/test/music_library/records_test.exs
T
Claudio Ortolina 3b558044b4 refactor: extract Records sub-contexts (Search, Import, Enrichment)
Split the 450+ line Records context into focused modules:

- Records.Search — FTS5 search, SearchParser integration, genre listing
- Records.Import — MusicBrainz release/group import, release status
- Records.Enrichment — genre population, cover refresh, color extraction,
  MusicBrainz data refresh
- Records.Query — shared helpers (essential_fields, order_alphabetically macro)

Records module is now a facade with defdelegate for compile-time safety.
CRUD and PubSub stay directly in Records. Tests moved alongside each
sub-module. Zero callers changed, 886 tests pass.
2026-04-30 17:20:37 +01:00

87 lines
2.4 KiB
Elixir

defmodule MusicLibrary.RecordsTest do
use MusicLibrary.DataCase
import MusicBrainz.Fixtures.ReleaseGroup
import MusicLibrary.ColorHelpers, only: [color_hex?: 1]
import MusicLibrary.Fixtures.Records
alias MusicLibrary.Records
describe "create_record/1" do
test "populates computed values" do
record =
record(musicbrainz_data: release_group(:lockdown_trilogy))
assert record.release_ids == ["77e746fc-566f-445b-a62b-cc014280fac9"]
assert record.included_release_group_ids == [
"749c07b5-4900-404b-bea9-bb6b16fa991e",
"61077431-0057-4119-8f06-0df1098d21e5",
"c36123e3-8899-48a5-8196-9dbb72421d69",
"d463f2b1-d254-4baf-a957-fb78c6e5b956"
]
assert record.cover_hash ==
"599407DDF69907D4A60FE13CCAA824D25CF08DC124FD6AA3E8E7ECD98C885FFE"
assert length(record.dominant_colors) == 5
assert Enum.all?(record.dominant_colors, &color_hex?/1)
end
@tag :capture_log
test "succeeds when color extraction fails" do
record = record(dominant_colors: [], cover_hash: "nonexistent_hash")
assert record.dominant_colors == []
end
test "queues a task to retrieve artist info data" do
record =
record(musicbrainz_data: release_group(:lockdown_trilogy))
[artist] = record.artists
assert_enqueued worker: MusicLibrary.Worker.FetchArtistInfo,
args: %{id: artist.musicbrainz_id}
end
end
describe "update_record/2" do
test "queues a task to retrieve artist info data" do
record =
record(musicbrainz_data: release_group(:lockdown_trilogy))
[artist] = record.artists
Oban.drain_queue(queue: :default)
Records.update_record(record, %{title: "Updated Title"})
assert_enqueued worker: MusicLibrary.Worker.FetchArtistInfo,
args: %{id: artist.musicbrainz_id}
end
end
describe "delete_record/1" do
test "queues a task to delete artist info data" do
record =
record(musicbrainz_data: release_group(:lockdown_trilogy))
[artist] = record.artists
Records.delete_record(record)
assert_enqueued worker: MusicLibrary.Worker.PruneArtistInfo,
args: %{id: artist.musicbrainz_id}
end
end
describe "get_record!/1" do
test "fetches the record by id" do
expected = record()
assert expected == Records.get_record!(expected.id)
end
end
end