summaryrefslogtreecommitdiff
path: root/pse-server/src/test/java/org/psesquared/server/subscriptions/api/service
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2024-06-19 00:14:49 +0200
committerOrangerot <purple@orangerot.dev>2024-06-27 12:11:14 +0200
commit5b8851b6c268d0e93c158908fbfae9f8473db5ff (patch)
tree7010eb85d86fa2da06ea4ffbcdb01a685d502ae8 /pse-server/src/test/java/org/psesquared/server/subscriptions/api/service
Initial commitHEADmain
Diffstat (limited to 'pse-server/src/test/java/org/psesquared/server/subscriptions/api/service')
-rw-r--r--pse-server/src/test/java/org/psesquared/server/subscriptions/api/service/SubscriptionServiceTests.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/pse-server/src/test/java/org/psesquared/server/subscriptions/api/service/SubscriptionServiceTests.java b/pse-server/src/test/java/org/psesquared/server/subscriptions/api/service/SubscriptionServiceTests.java
new file mode 100644
index 0000000..3345185
--- /dev/null
+++ b/pse-server/src/test/java/org/psesquared/server/subscriptions/api/service/SubscriptionServiceTests.java
@@ -0,0 +1,128 @@
+package org.psesquared.server.subscriptions.api.service;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.List;
+import java.util.Optional;
+
+import org.junit.jupiter.api.Test;
+import org.psesquared.server.BaseTest;
+import org.psesquared.server.model.Subscription;
+import org.psesquared.server.model.SubscriptionAction;
+import org.psesquared.server.subscriptions.api.controller.SubscriptionDelta;
+import org.psesquared.server.subscriptions.api.controller.SubscriptionTitles;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class SubscriptionServiceTests extends BaseTest {
+
+ @Autowired
+ SubscriptionService subscriptionService;
+
+ @Test
+ public void uploadSubscriptionsTest() {
+ String username = "testUser0";
+ assertDoesNotThrow(() -> authenticationDao.findByUsername(username).orElseThrow());
+ String newSubscriptionUrl1 = new File("testfeeds/newTestSubscription1.xml").toURI().toString();
+ String newSubscriptionUrl2 = new File("testfeeds/newTestSubscription2.xml").toURI().toString();
+ List<String> subscriptionStrings = List.of(newSubscriptionUrl1, newSubscriptionUrl2);
+
+ subscriptionService.uploadSubscriptions(username, subscriptionStrings);
+ List<SubscriptionAction> subscriptionActions = subscriptionActionDao.findByUserUsernameAndAddedTrue(username);
+ int size = subscriptionActions.size();
+ assertEquals(numberOfSubscriptionsPerUser + 2, size);
+
+ subscriptionActions.get(0).setAdded(false);
+ subscriptionActionDao.save(subscriptionActions.get(0));
+ subscriptionActions = subscriptionActionDao.findByUserUsernameAndAddedTrue(username);
+ size = subscriptionActions.size();
+ assertEquals(numberOfSubscriptionsPerUser + 1, size);
+
+ String testPodcast0Url = new File("testfeeds/testPodcast0.xml").toURI().toString();
+ List<String> subscriptionString = List.of(testPodcast0Url);
+ subscriptionService.uploadSubscriptions(username, subscriptionString);
+ subscriptionActions = subscriptionActionDao.findByUserUsernameAndAddedTrue(username);
+ size = subscriptionActions.size();
+ assertEquals(numberOfSubscriptionsPerUser + 2, size);
+ }
+
+ @Test
+ public void getSubscriptionsTest() {
+ String username = "testUser0";
+ List<String> subscriptionStrings = subscriptionService.getSubscriptions(username);
+ assertEquals(subscriptionStrings.size(), numberOfSubscriptionsPerUser);
+ }
+
+ @Test
+ public void applySubscriptionDeltaTest() {
+ String username = "testUser0";
+ String subscriptionString = new File("testfeeds/testPodcast0.xml").toURI().toString();;
+ // Überprüfen, ob Anzahl der Subscriptions des Users mit der definierten Anzahl
+ // übereinstimmt
+ assertEquals(subscriptionService.getSubscriptions(username).size(), numberOfSubscriptionsPerUser);
+ // Subscription mithilfe des Subscription-Deltas entfernen
+ subscriptionService.applySubscriptionDelta(username,
+ new SubscriptionDelta(List.of(), List.of(subscriptionString)));
+ assertEquals(subscriptionService.getSubscriptions(username).size(), numberOfSubscriptionsPerUser - 1);
+ // Subscription mithilfe des Subscription-Deltas wieder hinzufügen
+ subscriptionService.applySubscriptionDelta(username,
+ new SubscriptionDelta(List.of(subscriptionString), List.of()));
+ assertEquals(subscriptionService.getSubscriptions(username).size(), numberOfSubscriptionsPerUser);
+ }
+
+ @Test
+ public void getSubscriptionDeltaTest() {
+ String username = "testUser0";
+ String subscriptionString = new File("testfeeds/testPodcast0.xml").toURI().toString();
+ long since = 0;
+ // Überprüfen, ob Anzahl der Subscriptions des Users mit der definierten Anzahl
+ // übereinstimmt
+ SubscriptionDelta subscriptionDelta = subscriptionService.getSubscriptionDelta(username, since);
+ assertEquals(subscriptionDelta.getAdd().size(), numberOfSubscriptionsPerUser);
+ assertEquals(0, subscriptionDelta.getRemove().size());
+ // Subscription mithilfe des Subscription-Deltas entfernen
+ subscriptionService.applySubscriptionDelta(username,
+ new SubscriptionDelta(List.of(), List.of(subscriptionString)));
+ subscriptionDelta = subscriptionService.getSubscriptionDelta(username, since);
+ assertEquals(subscriptionDelta.getAdd().size(), numberOfSubscriptionsPerUser - 1);
+ assertEquals(1, subscriptionDelta.getRemove().size());
+ // Subscription mithilfe des Subscription-Deltas wieder hinzufügen
+ subscriptionService.applySubscriptionDelta(username,
+ new SubscriptionDelta(List.of(subscriptionString), List.of()));
+
+ subscriptionDelta = subscriptionService.getSubscriptionDelta(username, since);
+ List<SubscriptionAction> subscriptionActions = subscriptionActionDao
+ .findByUserUsernameAndTimestampGreaterThanEqual(username, since);
+ LocalDateTime deltaTime = LocalDateTime
+ .ofEpochSecond(subscriptionDelta.getTimestamp(), 0, ZoneOffset.UTC);
+ LocalDateTime maxTime = deltaTime;
+ for (SubscriptionAction subscriptionAction : subscriptionActions) {
+
+ LocalDateTime subTime = LocalDateTime
+ .ofEpochSecond(subscriptionAction.getTimestamp(), 0, ZoneOffset.UTC);
+ if (maxTime.isBefore(subTime)) {
+ maxTime = subTime;
+ }
+ }
+ assertEquals(deltaTime, maxTime);
+ assertEquals(subscriptionDelta.getAdd().size(), numberOfSubscriptionsPerUser);
+ assertEquals(0, subscriptionDelta.getRemove().size());
+ }
+
+ @Test
+ public void getTitlesTest() {
+ String username = "testUser0";
+ List<SubscriptionTitles> subscriptionTitlesList = subscriptionService.getTitles(username);
+ assertEquals(numberOfSubscriptionsPerUser, subscriptionTitlesList.size());
+ for (SubscriptionTitles subscriptionTitles : subscriptionTitlesList) {
+ assertEquals(numberOfEpisodesPerSubscription, subscriptionTitles.episodes().size());
+ Optional<Subscription> savedSubscription =
+ subscriptionDao.findByUrl(subscriptionTitles.subscription().getUrl());
+ assertTrue(savedSubscription.isPresent());
+ }
+ }
+}