Ensure uniqueness of scrobble rules

This commit is contained in:
Claudio Ortolina
2026-02-02 10:32:32 +00:00
parent 76f6791a45
commit faf8500256
3 changed files with 20 additions and 0 deletions
@@ -29,5 +29,6 @@ defmodule MusicLibrary.ScrobbleRules.ScrobbleRule do
scrobble_rule
|> cast(attrs, [:type, :match_value, :target_musicbrainz_id, :enabled, :description])
|> validate_required([:type, :match_value, :target_musicbrainz_id])
|> unique_constraint([:type, :match_value], error_key: :match_value)
end
end
@@ -0,0 +1,8 @@
defmodule MusicLibrary.Repo.Migrations.AddScrobbleRulesConstraints do
use Ecto.Migration
def change do
drop index(:scrobble_rules, [:type, :match_value])
create unique_index(:scrobble_rules, [:type, :match_value], unique: true)
end
end
@@ -95,6 +95,17 @@ defmodule MusicLibrary.ScrobbleRulesTest do
assert scrobble_rule.description == "Fix Pink Floyd album"
end
test "create_scrobble_rule/1 doesn't allow duplicates for the same type" do
valid_attrs = Map.put(@valid_album_attrs, :type, :album)
assert {:ok, %ScrobbleRule{} = scrobble_rule} =
ScrobbleRules.create_scrobble_rule(valid_attrs)
assert scrobble_rule.type == :album
assert {:error, _changeset} = ScrobbleRules.create_scrobble_rule(valid_attrs)
end
test "create_scrobble_rule/1 with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = ScrobbleRules.create_scrobble_rule(@invalid_attrs)
end