From 024ba38b63171b71923c599e905f620f9885ef85 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Thu, 3 Jul 2025 21:07:42 +0100 Subject: [PATCH] Use Ecto.UUID instead of hand-rolled type --- .../scrobble_rules/scrobble_rule.ex | 25 +------------------ .../scrobble_rules/scrobble_rule_test.exs | 2 +- .../live/scrobble_rules_live_test.exs | 2 +- 3 files changed, 3 insertions(+), 26 deletions(-) diff --git a/lib/music_library/scrobble_rules/scrobble_rule.ex b/lib/music_library/scrobble_rules/scrobble_rule.ex index 7fec8fb9..5ad0bcf5 100644 --- a/lib/music_library/scrobble_rules/scrobble_rule.ex +++ b/lib/music_library/scrobble_rules/scrobble_rule.ex @@ -19,7 +19,7 @@ defmodule MusicLibrary.ScrobbleRules.ScrobbleRule do schema "scrobble_rules" do field :type, :string field :match_value, :string - field :target_musicbrainz_id, :string + field :target_musicbrainz_id, Ecto.UUID field :enabled, :boolean, default: true field :description, :string @@ -32,28 +32,5 @@ defmodule MusicLibrary.ScrobbleRules.ScrobbleRule do |> cast(attrs, [:type, :match_value, :target_musicbrainz_id, :enabled, :description]) |> validate_required([:type, :match_value, :target_musicbrainz_id]) |> validate_inclusion(:type, @valid_types) - |> validate_musicbrainz_id_format(:target_musicbrainz_id) - end - - defp validate_musicbrainz_id_format(changeset, field) do - validate_change(changeset, field, fn _, value -> - case value do - "" -> - [{field, "cannot be empty"}] - - value when is_binary(value) -> - if String.match?( - value, - ~r/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i - ) do - [] - else - [{field, "must be a valid MusicBrainz ID (UUID format)"}] - end - - _ -> - [{field, "must be a string"}] - end - end) end end diff --git a/test/music_library/scrobble_rules/scrobble_rule_test.exs b/test/music_library/scrobble_rules/scrobble_rule_test.exs index b7c54ebe..e607b873 100644 --- a/test/music_library/scrobble_rules/scrobble_rule_test.exs +++ b/test/music_library/scrobble_rules/scrobble_rule_test.exs @@ -108,7 +108,7 @@ defmodule MusicLibrary.ScrobbleRules.ScrobbleRuleTest do changeset = ScrobbleRule.changeset(%ScrobbleRule{}, attrs) refute changeset.valid? - assert "must be a valid MusicBrainz ID (UUID format)" in errors_on(changeset).target_musicbrainz_id + assert "is invalid" in errors_on(changeset).target_musicbrainz_id end test "valid changeset with uppercase UUID" do diff --git a/test/music_library_web/live/scrobble_rules_live_test.exs b/test/music_library_web/live/scrobble_rules_live_test.exs index 7041d135..4b5faf4d 100644 --- a/test/music_library_web/live/scrobble_rules_live_test.exs +++ b/test/music_library_web/live/scrobble_rules_live_test.exs @@ -162,7 +162,7 @@ defmodule MusicLibraryWeb.ScrobbleRulesLiveTest do target_musicbrainz_id: "invalid-uuid" } ) - |> render_change() =~ "must be a valid MusicBrainz ID" + |> render_change() =~ "is invalid" end test "updates form labels based on rule type", %{conn: conn} do