3b558044b4
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.
87 lines
2.4 KiB
Elixir
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
|