summaryrefslogtreecommitdiff
path: root/pse-server/src/test/java/org/psesquared/server/util
diff options
context:
space:
mode:
Diffstat (limited to 'pse-server/src/test/java/org/psesquared/server/util')
-rw-r--r--pse-server/src/test/java/org/psesquared/server/util/RssParserTests.java135
1 files changed, 135 insertions, 0 deletions
diff --git a/pse-server/src/test/java/org/psesquared/server/util/RssParserTests.java b/pse-server/src/test/java/org/psesquared/server/util/RssParserTests.java
new file mode 100644
index 0000000..73c5497
--- /dev/null
+++ b/pse-server/src/test/java/org/psesquared/server/util/RssParserTests.java
@@ -0,0 +1,135 @@
+package org.psesquared.server.util;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+
+import org.junit.jupiter.api.Test;
+import org.psesquared.server.BaseTest;
+import org.psesquared.server.TestAsyncConfig;
+import org.psesquared.server.model.Episode;
+import org.psesquared.server.model.Subscription;
+import org.springframework.test.context.ContextConfiguration;
+
+// Disable async behavior for this Test Class
+@ContextConfiguration(classes = TestAsyncConfig.class)
+public class RssParserTests extends BaseTest {
+
+ private static final String TAGESSCHAU_URL = "https://www.tagesschau.de/multimedia/podcasts/mal-angenommen-feed-101.xml";
+ private final Subscription tagesschauPodcast = Subscription.builder()
+ .url(TAGESSCHAU_URL)
+ .build();
+ private final String relativePathToTestFeeds = "./testfeeds/";
+
+ @Test
+ public void testSubscriptionInvalid() {
+ Subscription nullSubscription = null;
+ Subscription nullUrlSubscription = Subscription.builder().build();
+ Subscription invalidUrlSubscription = Subscription.builder()
+ .url("Not a url")
+ .title("Some inventive Title")
+ .build();
+
+ assertDoesNotThrow(() -> rssParser.validate(nullSubscription));
+ assertDoesNotThrow(() -> rssParser.validate(nullUrlSubscription));
+ assertDoesNotThrow(() -> rssParser.validate(invalidUrlSubscription));
+ assertFalse(subscriptionDao.findByUrl(invalidUrlSubscription.getUrl()).isPresent());
+ }
+
+ // Does currently only work in debugger by making sure the Parser has time to
+ // validate, before the Test evaluates the Assertions.
+ @Test
+ public void testValidSubscription() {
+ final String expectedURL = "https://media.tagesschau.de/audio/2023/0125/AU-20230125-1854-5200.hi.mp3";
+ final String expectedGuid = "tagesschau-podcast-mal-angenommen-tierrechte-101";
+ final String expectedTitle = "Gleiche Rechte für Tiere? Was dann?";
+ final int expectedTotal = 1442;
+ Episode expectedEpisode = Episode.builder().url(expectedURL).guid(expectedGuid).title(expectedTitle)
+ .total(expectedTotal).subscription(tagesschauPodcast).build();
+ Episode testEpisode = Episode.builder().url(expectedURL).id(expectedEpisode.getId()).build();
+ tagesschauPodcast.addEpisode(testEpisode);
+
+ assertDoesNotThrow(() -> rssParser.validate(tagesschauPodcast));
+ assertTrue(subscriptionDao.findByUrl(TAGESSCHAU_URL).isPresent());
+ }
+
+ @Test
+ public void currentDirTest() {
+ //System.out.println(System.getProperty("user.dir"));
+ final String pathToTestFile = relativePathToTestFeeds + "dirtest.txt";
+ File testFile = new File(pathToTestFile);
+ assertTrue(testFile.exists() && !testFile.isDirectory());
+ }
+
+ public void testByteHamsterEdgeCasePodcast() {
+ final String subscriptionURL = "https://tools.bytehamster.com/podcast/rss.xml";
+ final String firstEpisodeURL = "http://tools.bytehamster.com/podcast/piano.mp3?1.mp3";
+ final String lastEpisodeURL = "http://tools.bytehamster.com/podcast/piano.mp3?13.mp3";
+
+ Subscription subscription = Subscription.builder().url(subscriptionURL).build();
+ Episode firstEpisode = Episode.builder().url(firstEpisodeURL)
+ .subscription(subscription).build();
+ subscription.addEpisode(firstEpisode);
+
+ Episode lastEpisode = Episode.builder().url(lastEpisodeURL)
+ .subscription(subscription).build();
+ subscription.addEpisode(lastEpisode);
+ subscriptionDao.save(subscription);
+ episodeDao.save(firstEpisode);
+ episodeDao.save(lastEpisode);
+
+ // Feed contains an Episode that does not meet minimum requirements, so
+ // Subscription and its Episodes should be deleted
+ assertDoesNotThrow(() -> rssParser.validate(subscription));
+ assertFalse(subscriptionDao.findByUrl(subscriptionURL).isPresent());
+ assertFalse(episodeDao.findByUrl(firstEpisodeURL).isPresent());
+ assertFalse(episodeDao.findByUrl(lastEpisodeURL).isPresent());
+ }
+
+ @Test
+ public void testDeletionOfEpisodeNotInFeed() {
+ final String subscriptionURL = "https://tools.bytehamster.com/podcast/alwaysNew.php";
+ final String notIncludedURL = "http://tools.bytehamster.com/podcast/piano.mp3?2023-03-15-21:53:21.mp3";
+
+ Subscription subscription = Subscription.builder().url(subscriptionURL).build();
+ Episode episodeToDelete = Episode.builder().url(notIncludedURL)
+ .subscription(subscription).build();
+ subscription.addEpisode(episodeToDelete);
+ subscriptionDao.save(subscription);
+ episodeDao.save(episodeToDelete);
+
+ // Feed does not contain the Episode, so the Episode should be deleted, but the
+ // Subscription remains
+ assertDoesNotThrow(() -> rssParser.validate(subscription));
+ assertTrue(subscriptionDao.findByUrl(subscriptionURL).isPresent());
+ assertFalse(episodeDao.findByUrl(notIncludedURL).isPresent());
+ }
+
+ @Test
+ public void testValidateBaseTestFeed() {
+ final String testPodcastUrl = new File("testfeeds/testPodcast0.xml").toURI().toString();
+ Subscription subscription = subscriptionDao.findByUrl(testPodcastUrl).orElseThrow();
+ assertDoesNotThrow(() -> rssParser.validate(subscription));
+ assertNotNull(subscriptionDao.findByUrl(testPodcastUrl));
+ }
+
+ @Test
+ public void testTimeParsing() {
+ final String subscriptionUrl = new File("testfeeds/timeTestPodcast.xml").toURI().toString();
+ Subscription subscription = subscriptionDao.save(Subscription.builder().url(subscriptionUrl).build());
+ assertDoesNotThrow(() -> rssParser.validate(subscription));
+ assertFalse(subscriptionDao.findByUrl(subscriptionUrl).isPresent());
+ }
+
+ @Test
+ public void doubleEnclosureTest() {
+ final String subscriptionUrl = new File("testfeeds/multipleEnclosuresFeed.xml").toURI().toString();
+ Subscription subscription = subscriptionDao.save(Subscription.builder().url(subscriptionUrl).build());
+ assertDoesNotThrow(() -> rssParser.validate(subscription));
+ assertFalse(subscriptionDao.findByUrl(subscriptionUrl).isPresent());
+ }
+
+}