Took the easy way out and removed playlist index explicitly from the update method (#442)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user