[Enhancement] Filter media based on min and/or max duration (#356)
* Added duration limits to source model * Added duration limits to source form * Added validation for min/max amounts * Added duration checks to pending query * Moved min/max filters up in source form * Removed debugger
This commit is contained in:
@@ -355,6 +355,48 @@ defmodule Pinchflat.MediaTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "list_pending_media_items_for/1 when min and max durations" do
|
||||
test "returns media items that meet the min and max duration" do
|
||||
source = source_fixture(%{min_duration_seconds: 10, max_duration_seconds: 20})
|
||||
|
||||
_short_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 5})
|
||||
normal_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 15})
|
||||
_long_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 25})
|
||||
|
||||
assert Media.list_pending_media_items_for(source) == [normal_media_item]
|
||||
end
|
||||
|
||||
test "does not apply a min duration if none is specified" do
|
||||
source = source_fixture(%{min_duration_seconds: nil, max_duration_seconds: 20})
|
||||
|
||||
short_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 5})
|
||||
normal_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 15})
|
||||
_long_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 25})
|
||||
|
||||
assert Media.list_pending_media_items_for(source) == [short_media_item, normal_media_item]
|
||||
end
|
||||
|
||||
test "does not apply a max duration if none is specified" do
|
||||
source = source_fixture(%{min_duration_seconds: 10, max_duration_seconds: nil})
|
||||
|
||||
_short_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 5})
|
||||
normal_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 15})
|
||||
long_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 25})
|
||||
|
||||
assert Media.list_pending_media_items_for(source) == [normal_media_item, long_media_item]
|
||||
end
|
||||
|
||||
test "does not apply a min or max duration if none are specified" do
|
||||
source = source_fixture(%{min_duration_seconds: nil, max_duration_seconds: nil})
|
||||
|
||||
short_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 5})
|
||||
normal_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 15})
|
||||
long_media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 25})
|
||||
|
||||
assert Media.list_pending_media_items_for(source) == [short_media_item, normal_media_item, long_media_item]
|
||||
end
|
||||
end
|
||||
|
||||
describe "list_pending_media_items_for/1 when testing download prevention" do
|
||||
test "returns only media items that are not prevented from downloading" do
|
||||
source = source_fixture()
|
||||
@@ -434,6 +476,34 @@ defmodule Pinchflat.MediaTest do
|
||||
assert Media.pending_download?(media_item)
|
||||
end
|
||||
|
||||
test "returns true if the duration is between the min and max" do
|
||||
source = source_fixture(%{min_duration_seconds: 10, max_duration_seconds: 20})
|
||||
media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 15})
|
||||
|
||||
assert Media.pending_download?(media_item)
|
||||
end
|
||||
|
||||
test "returns false if the duration is below the min" do
|
||||
source = source_fixture(%{min_duration_seconds: 10, max_duration_seconds: 20})
|
||||
media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 5})
|
||||
|
||||
refute Media.pending_download?(media_item)
|
||||
end
|
||||
|
||||
test "returns false if the duration is above the max" do
|
||||
source = source_fixture(%{min_duration_seconds: 10, max_duration_seconds: 20})
|
||||
media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 25})
|
||||
|
||||
refute Media.pending_download?(media_item)
|
||||
end
|
||||
|
||||
test "returns true if there is no min or max duration" do
|
||||
source = source_fixture(%{min_duration_seconds: nil, max_duration_seconds: nil})
|
||||
media_item = media_item_fixture(%{source_id: source.id, media_filepath: nil, duration_seconds: 15})
|
||||
|
||||
assert Media.pending_download?(media_item)
|
||||
end
|
||||
|
||||
test "returns true if the media item is not prevented from downloading" do
|
||||
media_item = media_item_fixture(%{media_filepath: nil, prevent_download: false})
|
||||
|
||||
|
||||
@@ -681,6 +681,34 @@ defmodule Pinchflat.SourcesTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "change_source/3 when testing min/max duration validations" do
|
||||
test "succeeds if min and max are nil" do
|
||||
source = source_fixture()
|
||||
|
||||
assert %{errors: []} = Sources.change_source(source, %{min_duration_seconds: nil, max_duration_seconds: nil})
|
||||
end
|
||||
|
||||
test "succeeds if either min or max is nil" do
|
||||
source = source_fixture()
|
||||
|
||||
assert %{errors: []} = Sources.change_source(source, %{min_duration_seconds: nil, max_duration_seconds: 100})
|
||||
assert %{errors: []} = Sources.change_source(source, %{min_duration_seconds: 100, max_duration_seconds: nil})
|
||||
end
|
||||
|
||||
test "succeeds if min is less than max" do
|
||||
source = source_fixture()
|
||||
|
||||
assert %{errors: []} = Sources.change_source(source, %{min_duration_seconds: 100, max_duration_seconds: 200})
|
||||
end
|
||||
|
||||
test "fails if min is greater than or equal to max" do
|
||||
source = source_fixture()
|
||||
|
||||
assert %{errors: [_]} = Sources.change_source(source, %{min_duration_seconds: 200, max_duration_seconds: 100})
|
||||
assert %{errors: [_]} = Sources.change_source(source, %{min_duration_seconds: 100, max_duration_seconds: 100})
|
||||
end
|
||||
end
|
||||
|
||||
describe "change_source/3 when testing original_url validation" do
|
||||
test "succeeds when an original URL is valid" do
|
||||
source = source_fixture()
|
||||
|
||||
Reference in New Issue
Block a user