From 3c7fd274deffccd7b3f023158b09b00420ad226b Mon Sep 17 00:00:00 2001 From: Borjan Tchakaloff Date: Sun, 31 Mar 2019 16:01:41 +0200 Subject: Validate that the *new* and *played* states are exclusive --- .../danoeh/antennapod/core/feed/FeedItemTest.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'core/src/test') diff --git a/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java index b9cba05b4..e9fe24b90 100644 --- a/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java +++ b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import static de.danoeh.antennapod.core.feed.FeedItemMother.anyFeedItemWithImage; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; public class FeedItemTest { @@ -39,6 +40,28 @@ public class FeedItemTest { assertFeedItemImageWasUpdated(); } + /** + * Test that a played item loses that state after being marked as new. + */ + @Test + public void testMarkPlayedItemAsNew_itemNotPlayed() { + original.setPlayed(true); + original.setNew(); + + assertFalse(original.isPlayed()); + } + + /** + * Test that a new item loses that state after being marked as played. + */ + @Test + public void testMarkNewItemAsPlayed_itemNotNew() { + original.setNew(); + original.setPlayed(true); + + assertFalse(original.isNew()); + } + private void setNewFeedItemImageDownloadUrl() { changedFeedItem.setImageUrl("http://example.com/new_picture"); } -- cgit v1.2.3 From 6ebf1defe7153910dd3a7503ea215079814da7cb Mon Sep 17 00:00:00 2001 From: Borjan Tchakaloff Date: Sun, 31 Mar 2019 16:20:00 +0200 Subject: Validate that the item state is only changed when needed Follow-up to commit 8172d87477dd593745d4776417ef3dd7884d17fb (#3067) that adds test coverage for the resolved issue. Also, fix that commit by making the update condition more explicit: the FeedItem state is only changed when a state switch is necessary. In other words, an item marked as *new* that gets downloaded should lose the *new* mark and gain the *unplayed* mark instead. --- .../antennapod/core/feed/FeedMediaMother.java | 13 ++++ .../danoeh/antennapod/core/feed/FeedMediaTest.java | 72 ++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaMother.java create mode 100644 core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaTest.java (limited to 'core/src/test') diff --git a/core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaMother.java b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaMother.java new file mode 100644 index 000000000..d95b8787c --- /dev/null +++ b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaMother.java @@ -0,0 +1,13 @@ +package de.danoeh.antennapod.core.feed; + +class FeedMediaMother { + + private static final String EPISODE_URL = "http://example.com/episode"; + private static final long SIZE = 42; + private static final String MIME_TYPE = "audio/mp3"; + + static FeedMedia anyFeedMedia() { + return new FeedMedia(null, EPISODE_URL, SIZE, MIME_TYPE); + } + +} diff --git a/core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaTest.java b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaTest.java new file mode 100644 index 000000000..f27a54f84 --- /dev/null +++ b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedMediaTest.java @@ -0,0 +1,72 @@ +package de.danoeh.antennapod.core.feed; + +import org.junit.Before; +import org.junit.Test; + +import static de.danoeh.antennapod.core.feed.FeedMediaMother.anyFeedMedia; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class FeedMediaTest { + + private FeedMedia media; + + @Before + public void setUp() { + media = anyFeedMedia(); + } + + /** + * Downloading a media from a not new and not played item should not change the item state. + */ + @Test + public void testDownloadMediaOfNotNewAndNotPlayedItem_unchangedItemState() { + FeedItem item = mock(FeedItem.class); + when(item.isNew()).thenReturn(false); + when(item.isPlayed()).thenReturn(false); + + media.setItem(item); + media.setDownloaded(true); + + verify(item, never()).setNew(); + verify(item, never()).setPlayed(true); + verify(item, never()).setPlayed(false); + } + + /** + * Downloading a media from a played item (thus not new) should not change the item state. + */ + @Test + public void testDownloadMediaOfPlayedItem_unchangedItemState() { + FeedItem item = mock(FeedItem.class); + when(item.isNew()).thenReturn(false); + when(item.isPlayed()).thenReturn(true); + + media.setItem(item); + media.setDownloaded(true); + + verify(item, never()).setNew(); + verify(item, never()).setPlayed(true); + verify(item, never()).setPlayed(false); + } + + /** + * Downloading a media from a new item (thus not played) should change the item to not played. + */ + @Test + public void testDownloadMediaOfNewItem_changedToNotPlayedItem() { + FeedItem item = mock(FeedItem.class); + when(item.isNew()).thenReturn(true); + when(item.isPlayed()).thenReturn(false); + + media.setItem(item); + media.setDownloaded(true); + + verify(item).setPlayed(false); + verify(item, never()).setNew(); + verify(item, never()).setPlayed(true); + } + +} -- cgit v1.2.3 From c589bd2022ff6e53d8b0a95547c966fd7b78e28d Mon Sep 17 00:00:00 2001 From: Borjan Tchakaloff Date: Sun, 31 Mar 2019 21:26:53 +0200 Subject: Validate that the *new* and *not played* are also exclusive The FeedItem state is actually a tri-state, complement the test coverage by checking that the state changes from *new* to *not played*. --- .../java/de/danoeh/antennapod/core/feed/FeedItemTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'core/src/test') diff --git a/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java index e9fe24b90..857827219 100644 --- a/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java +++ b/core/src/test/java/de/danoeh/antennapod/core/feed/FeedItemTest.java @@ -62,6 +62,17 @@ public class FeedItemTest { assertFalse(original.isNew()); } + /** + * Test that a new item loses that state after being marked as not played. + */ + @Test + public void testMarkNewItemAsNotPlayed_itemNotNew() { + original.setNew(); + original.setPlayed(false); + + assertFalse(original.isNew()); + } + private void setNewFeedItemImageDownloadUrl() { changedFeedItem.setImageUrl("http://example.com/new_picture"); } -- cgit v1.2.3