Took the easy way out and removed playlist index explicitly from the update method (#442)

This commit is contained in:
Kieran
2024-10-28 10:26:31 -07:00
committed by GitHub
parent 47bb1cb98d
commit 8c0df65c0c
2 changed files with 22 additions and 4 deletions
+7 -4
View File
@@ -15,6 +15,9 @@ defmodule Pinchflat.Media do
alias Pinchflat.Lifecycle.UserScripts.CommandRunner, as: UserScriptRunner alias Pinchflat.Lifecycle.UserScripts.CommandRunner, as: UserScriptRunner
# Some fields should only be set on insert and not on update.
@fields_to_drop_on_update [:playlist_index]
@doc """ @doc """
Returns the list of media_items. Returns the list of media_items.
@@ -131,8 +134,6 @@ defmodule Pinchflat.Media do
""" """
def create_media_item_from_backend_attrs(source, media_attrs_struct) do def create_media_item_from_backend_attrs(source, media_attrs_struct) do
attrs = Map.merge(%{source_id: source.id}, Map.from_struct(media_attrs_struct)) attrs = Map.merge(%{source_id: source.id}, Map.from_struct(media_attrs_struct))
# Some fields should only be set on insert and not on update.
fields_to_drop_on_update = [:playlist_index]
%MediaItem{} %MediaItem{}
|> MediaItem.changeset(attrs) |> MediaItem.changeset(attrs)
@@ -140,7 +141,7 @@ defmodule Pinchflat.Media do
on_conflict: [ on_conflict: [
set: set:
attrs attrs
|> Map.drop(fields_to_drop_on_update) |> Map.drop(@fields_to_drop_on_update)
|> Map.to_list() |> Map.to_list()
], ],
conflict_target: [:source_id, :media_id] conflict_target: [:source_id, :media_id]
@@ -153,8 +154,10 @@ defmodule Pinchflat.Media do
Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}} Returns {:ok, %MediaItem{}} | {:error, %Ecto.Changeset{}}
""" """
def update_media_item(%MediaItem{} = media_item, attrs) do def update_media_item(%MediaItem{} = media_item, attrs) do
update_attrs = Map.drop(attrs, @fields_to_drop_on_update)
media_item media_item
|> MediaItem.changeset(attrs) |> MediaItem.changeset(update_attrs)
|> Repo.update() |> Repo.update()
end end
+15
View File
@@ -712,6 +712,21 @@ defmodule Pinchflat.MediaTest do
assert media_item.media_filepath == update_attrs.media_filepath assert media_item.media_filepath == update_attrs.media_filepath
end end
test "updating strips playlist_index from the provided attrs" do
media_item = media_item_fixture(playlist_index: 5)
update_attrs = %{
media_id: Faker.String.base64(12),
title: Faker.Commerce.product_name(),
media_filepath: "/video/#{Faker.File.file_name(:video)}",
source_id: source_fixture().id,
playlist_index: 1
}
assert {:ok, %MediaItem{} = media_item} = Media.update_media_item(media_item, update_attrs)
assert media_item.playlist_index == 5
end
test "updating with invalid data returns error changeset" do test "updating with invalid data returns error changeset" do
media_item = media_item_fixture() media_item = media_item_fixture()
assert {:error, %Ecto.Changeset{}} = Media.update_media_item(media_item, @invalid_attrs) assert {:error, %Ecto.Changeset{}} = Media.update_media_item(media_item, @invalid_attrs)