From cbf567a502ea39c05157e2723a4e0d9c9157c5e2 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 1 Sep 2025 15:06:00 +0300 Subject: [PATCH] Support assets upserts --- lib/music_library/assets.ex | 4 ++-- test/music_library/assets_test.exs | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/music_library/assets.ex b/lib/music_library/assets.ex index 79a50d74..68d3a157 100644 --- a/lib/music_library/assets.ex +++ b/lib/music_library/assets.ex @@ -9,7 +9,7 @@ defmodule MusicLibrary.Assets do def store(params) do %Asset{} |> Asset.changeset(params) - |> Repo.insert() + |> Repo.insert(on_conflict: :nothing, returning: true) end @doc """ @@ -18,7 +18,7 @@ defmodule MusicLibrary.Assets do def store_image(params) do %Asset{} |> Asset.image_changeset(params) - |> Repo.insert() + |> Repo.insert(on_conflict: :nothing, returning: true) end def get(hash) do diff --git a/test/music_library/assets_test.exs b/test/music_library/assets_test.exs index 4ccad283..e83e219d 100644 --- a/test/music_library/assets_test.exs +++ b/test/music_library/assets_test.exs @@ -9,7 +9,7 @@ defmodule MusicLibrary.AssetsTest do params = %{ content: "some content", format: "text/plain", - properties: %{language: "english"} + properties: %{"language" => "english"} } assert {:ok, asset} = Assets.store(params) @@ -19,17 +19,15 @@ defmodule MusicLibrary.AssetsTest do assert asset.format == "text/plain" end - test "prevents duplicates" do + test "prevents duplicates returning the same asset" do params = %{ content: "some content", format: "text/plain", - properties: %{language: "english"} + properties: %{"language" => "english"} } - assert {:ok, _asset} = Assets.store(params) - assert {:error, changeset} = Assets.store(params) - - assert [hash: {"has already been taken", _}] = changeset.errors + assert {:ok, asset} = Assets.store(params) + assert {:ok, asset} == Assets.store(params) end end