Simplify import logic and add relevant tests

Import directly redirects to the record - previous version was buggy and
worked completely by chance.

In addition, this commit adds extensive tests around importing a record
via use of mocks.
This commit is contained in:
Claudio Ortolina
2024-10-05 21:13:43 +01:00
parent a72236449d
commit 6913ee2d8d
4 changed files with 191 additions and 10 deletions
@@ -33,7 +33,10 @@ defmodule MusicLibraryWeb.RecordLive.ImportComponent do
defp result(assigns) do
~H"""
<li class="flex justify-between gap-x-6 py-5 hover:bg-gray-50">
<li
id={"music_brainz_" <> @release_group.id}
class="flex justify-between gap-x-6 py-5 hover:bg-gray-50"
>
<div class="flex min-w-0 gap-x-4">
<div class="min-w-0 flex-auto">
<p class="text-sm font-semibold leading-6 text-gray-900">
@@ -78,10 +78,6 @@ defmodule MusicLibraryWeb.RecordLive.Index do
{:noreply, stream_insert(socket, :records, record)}
end
def handle_info({__MODULE__, {:saved, record}}, socket) do
{:noreply, push_navigate(socket, to: ~p"/records/#{record}")}
end
@impl true
def handle_event("delete", %{"id" => id}, socket) do
record = Records.get_record!(id)
@@ -103,12 +99,10 @@ defmodule MusicLibraryWeb.RecordLive.Index do
def handle_event("import", %{"id" => musicbrainz_id, "format" => format}, socket) do
case Records.import_from_musicbrainz(musicbrainz_id, format: format) do
{:ok, record} ->
notify_parent({:saved, record})
{:noreply,
socket
|> put_flash(:info, "Record imported successfully")
|> push_patch(to: ~p"/records")}
|> push_navigate(to: ~p"/records/#{record.id}")}
{:error, %Ecto.Changeset{} = changeset} ->
{:noreply, assign(socket, form: to_form(changeset))}
@@ -143,8 +137,6 @@ defmodule MusicLibraryWeb.RecordLive.Index do
String.to_integer(value)
end
defp notify_parent(msg), do: send(self(), {__MODULE__, msg})
defp musicbrainz_url(record) do
"https://musicbrainz.org/release-group/#{record.musicbrainz_id}"
end