enqueue respect download order: add test case for download failures.

This commit is contained in:
orionlee 2019-11-05 10:38:31 -08:00
parent 6e019f72de
commit 9d6db7b9fc
1 changed files with 30 additions and 8 deletions

View File

@ -145,14 +145,20 @@ public class ItemEnqueuePositionCalculatorTest {
{"download order test, enqueue default", {"download order test, enqueue default",
concat(QUEUE_DEFAULT_IDS, 101L), concat(QUEUE_DEFAULT_IDS, 101L),
concat(QUEUE_DEFAULT_IDS, list(101L, 102L)), concat(QUEUE_DEFAULT_IDS, list(101L, 102L)),
concat(QUEUE_DEFAULT_IDS, list(101L, 102L, 103L)),
BACK, QUEUE_DEFAULT, ID_CURRENTLY_PLAYING_NULL}, BACK, QUEUE_DEFAULT, ID_CURRENTLY_PLAYING_NULL},
{"download order test, enqueue at front (currently playing has no effect)", {"download order test, enqueue at front (currently playing has no effect)",
concat(101L, QUEUE_DEFAULT_IDS), concat(101L, QUEUE_DEFAULT_IDS),
concat(list(101L, 102L), QUEUE_DEFAULT_IDS), concat(list(101L, 102L), QUEUE_DEFAULT_IDS),
concat(list(101L, 103L, 102L), QUEUE_DEFAULT_IDS),
// ^ 103 is put ahead of 102, after 102 failed.
// It is a limitation as the logic can't tell 102 download has failed
// (as opposed to simply being enqueued)
FRONT, QUEUE_DEFAULT, 11L}, // 11 is at the front, currently playing FRONT, QUEUE_DEFAULT, 11L}, // 11 is at the front, currently playing
{"download order test, enqueue after currently playing", {"download order test, enqueue after currently playing",
list(11L, 101L, 12L, 13L, 14L), list(11L, 101L, 12L, 13L, 14L),
list(11L, 101L, 102L, 12L, 13L, 14L), list(11L, 101L, 102L, 12L, 13L, 14L),
list(11L, 101L, 103L, 102L, 12L, 13L, 14L),
AFTER_CURRENTLY_PLAYING, QUEUE_DEFAULT, 11L} // 11 is at the front, currently playing AFTER_CURRENTLY_PLAYING, QUEUE_DEFAULT, 11L} // 11 is at the front, currently playing
}); });
} }
@ -167,12 +173,15 @@ public class ItemEnqueuePositionCalculatorTest {
public List<Long> idsExpectedAfter102; public List<Long> idsExpectedAfter102;
@Parameter(3) @Parameter(3)
public EnqueueLocation options; public List<Long> idsExpectedAfter103;
@Parameter(4) @Parameter(4)
public List<FeedItem> queueInitial; public EnqueueLocation options;
@Parameter(5) @Parameter(5)
public List<FeedItem> queueInitial;
@Parameter(6)
public long idCurrentlyPlaying; public long idCurrentlyPlaying;
@Test @Test
@ -192,32 +201,45 @@ public class ItemEnqueuePositionCalculatorTest {
// Test body // Test body
Playable currentlyPlaying = getCurrentlyPlaying(idCurrentlyPlaying); Playable currentlyPlaying = getCurrentlyPlaying(idCurrentlyPlaying);
// User clicks download on feed item 101 // User clicks download on feed item 101
FeedItem tFI101 = setAsDownloading(101, stubDownloadStateProvider); FeedItem tFI101 = setAsDownloading(101, stubDownloadStateProvider, true);
doAddToQueueAndAssertResult(message + " (1st download)", doAddToQueueAndAssertResult(message + " (1st download)",
calculator, tFI101, queue, currentlyPlaying, calculator, tFI101, queue, currentlyPlaying,
idsExpectedAfter101); idsExpectedAfter101);
// Then user clicks download on feed item 102 // Then user clicks download on feed item 102
FeedItem tFI102 = setAsDownloading(102, stubDownloadStateProvider); FeedItem tFI102 = setAsDownloading(102, stubDownloadStateProvider, true);
doAddToQueueAndAssertResult(message + " (2nd download, it should preserve order of download)", doAddToQueueAndAssertResult(message + " (2nd download, it should preserve order of download)",
calculator, tFI102, queue, currentlyPlaying, calculator, tFI102, queue, currentlyPlaying,
idsExpectedAfter102); idsExpectedAfter102);
// simulate download failure case for 102
setAsDownloading(tFI102, stubDownloadStateProvider, false);
// Then user clicks download on feed item 103
FeedItem tFI103 = setAsDownloading(103, stubDownloadStateProvider, true);
doAddToQueueAndAssertResult(message
+ " (3rd download, with 2nd download failed; "
+ "it should be behind 1st download (unless enqueueLocation is BACK)",
calculator, tFI103, queue, currentlyPlaying,
idsExpectedAfter103);
// TODO: simulate download failure cases.
} }
private static FeedItem setAsDownloading(int id, DownloadStateProvider stubDownloadStateProvider) { private static FeedItem setAsDownloading(int id, DownloadStateProvider stubDownloadStateProvider,
boolean isDownloading) {
FeedItem item = createFeedItem(id); FeedItem item = createFeedItem(id);
FeedMedia media = FeedMedia media =
new FeedMedia(item, "http://download.url.net/" + id new FeedMedia(item, "http://download.url.net/" + id
, 100000 + id, "audio/mp3"); , 100000 + id, "audio/mp3");
media.setId(item.getId()); media.setId(item.getId());
item.setMedia(media); item.setMedia(media);
return setAsDownloading(item, stubDownloadStateProvider, isDownloading);
}
stub(stubDownloadStateProvider.isDownloadingFile(media)).toReturn(true); private static FeedItem setAsDownloading(FeedItem item, DownloadStateProvider stubDownloadStateProvider,
boolean isDownloading) {
stub(stubDownloadStateProvider.isDownloadingFile(item.getMedia())).toReturn(isDownloading);
return item; return item;
} }
} }