From 902d2c6e6dc4c4d019494e67f86bc62b1108b563 Mon Sep 17 00:00:00 2001
From: uhensler <none@none>
Date: Mon, 17 Jul 2017 08:25:09 +0200
Subject: [PATCH] OO-2898: Testing and hardening

---
 .../modules/webFeed/manager/FeedManager.java  | 12 ++++++-
 .../webFeed/manager/FeedManagerImpl.java      | 11 ++++++
 .../olat/repository/handlers/BlogHandler.java |  5 +--
 .../repository/handlers/PodcastHandler.java   |  5 +--
 .../webFeed/manager/FeedManagerImplTest.java  | 35 +++++++++++++++++--
 5 files changed, 56 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java b/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java
index dc4423ea3e7..1b5a05151ac 100644
--- a/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java
+++ b/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java
@@ -107,12 +107,22 @@ public abstract class FeedManager {
 	public abstract boolean copy(OLATResource source, OLATResource target);
 	
 	/**
-	 * Update the feed  with the properties in the repository entry.
+	 * Enrich the feed with the properties in the RepositoryEntry.
 	 * 
 	 * @param feed
 	 * @param entry
+	 * @return the same Feed object with actualized attributes
 	 */
 	public abstract Feed enrichFeedByRepositoryEntry(Feed feed, RepositoryEntry entry);
+	
+	/**
+	 * Update the feed with the properties in the RepositoryEntry and save it
+	 * in the database.
+	 * 
+	 * @param entry
+	 * @return a new updated Feed object
+	 */
+	public abstract Feed updateFeedWithRepositoryEntry(RepositoryEntry entry);
 
 	/**
 	 * Create the given Item and saves the appropriate file (podcast, video etc.)
diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java b/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java
index 68c79d25041..2f40d1f12be 100644
--- a/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java
+++ b/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java
@@ -515,8 +515,19 @@ public class FeedManagerImpl extends FeedManager {
 		}
 	}
 	
+	@Override
+	public Feed updateFeedWithRepositoryEntry(RepositoryEntry entry) {
+		Feed feed = loadFeed(entry.getOlatResource());
+		feed = enrichFeedByRepositoryEntry(feed, entry);
+		feed = updateFeed(feed);
+		return feed;
+	}
+
 	@Override
 	public Feed enrichFeedByRepositoryEntry(Feed feed, RepositoryEntry entry) {
+		if (feed == null) return null;
+		if (entry == null) return feed;
+		
 		// copy the metadata
 		feed.setTitle(entry.getDisplayname());
 		feed.setDescription(entry.getDescription());
diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java
index 69a2ddf7307..da468173d2e 100644
--- a/src/main/java/org/olat/repository/handlers/BlogHandler.java
+++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java
@@ -242,10 +242,7 @@ public class BlogHandler implements RepositoryHandler {
 
 	@Override
 	public void onDescriptionChanged(RepositoryEntry entry) {
-		FeedManager feedManager = FeedManager.getInstance();
-		Feed feed = feedManager.loadFeed(entry.getOlatResource());
-		feed = feedManager.enrichFeedByRepositoryEntry(feed, entry);
-		feedManager.updateFeed(feed);
+		Feed feed = FeedManager.getInstance().updateFeedWithRepositoryEntry(entry);
 		DBFactory.getInstance().commitAndCloseSession();
 
 		CoordinatorManager.getInstance().getCoordinator().getEventBus()
diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
index 508bfa493b3..682d0f7e917 100644
--- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java
+++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java
@@ -236,10 +236,7 @@ public class PodcastHandler implements RepositoryHandler {
 
 	@Override
 	public void onDescriptionChanged(RepositoryEntry entry) {
-		FeedManager feedManager = FeedManager.getInstance();
-		Feed feed = feedManager.loadFeed(entry.getOlatResource());
-		feed = feedManager.enrichFeedByRepositoryEntry(feed, entry);
-		feedManager.updateFeed(feed);
+		Feed feed = FeedManager.getInstance().updateFeedWithRepositoryEntry(entry);
 		DBFactory.getInstance().commitAndCloseSession();
 		
 		CoordinatorManager.getInstance().getCoordinator().getEventBus()
diff --git a/src/test/java/org/olat/modules/webFeed/manager/FeedManagerImplTest.java b/src/test/java/org/olat/modules/webFeed/manager/FeedManagerImplTest.java
index 561daa8f042..500f0b80bcf 100644
--- a/src/test/java/org/olat/modules/webFeed/manager/FeedManagerImplTest.java
+++ b/src/test/java/org/olat/modules/webFeed/manager/FeedManagerImplTest.java
@@ -79,7 +79,7 @@ public class FeedManagerImplTest {
 	@Mock
 	private Coordinator coordinaterMock;
 	@Mock
-	private RepositoryManager repostoryManager;
+	private RepositoryManager repositoryManager;
 	@Mock
 	OLATResource resourceDummy;
 	@Mock
@@ -102,7 +102,7 @@ public class FeedManagerImplTest {
 		ReflectionTestUtils.setField(sut, "itemDAO", itemDAOMock);
 		ReflectionTestUtils.setField(sut, "feedFileStorage", feedFileStorageMock);
 		ReflectionTestUtils.setField(sut, "externalFeedFetcher", feedFetcherMock);
-		ReflectionTestUtils.setField(sut, "repositoryManager", repostoryManager);
+		ReflectionTestUtils.setField(sut, "repositoryManager", repositoryManager);
 	}
 	
 	@Test
@@ -260,8 +260,9 @@ public class FeedManagerImplTest {
 		verify(feedFileStorageMock, times(3)).deleteItemXML(itemDummy);
 	}
 	
+
 	@Test
-	public void enrichFeedFromrepositoryEntryShouldTransferAtributes() {
+	public void enrichFeedFromRepositoryEntryShouldTransferAtributes() {
 		Feed feed = new FeedImpl(resourceDummy);
 		RepositoryEntry entry = new RepositoryEntry();
 		String title = "Title";
@@ -277,4 +278,32 @@ public class FeedManagerImplTest {
 		assertThat(enrichedFeed.getDescription()).isEqualTo(description);
 		assertThat(enrichedFeed.getAuthor()).isEqualTo(authors);
 	}
+
+
+	@Test
+	public void enrichFeedFromRepositoryEntryShouldReturnUnchangedFeedIfRepositoryIsNull() {
+		Feed feed = new FeedImpl(resourceDummy);
+		String title = "Title";
+		feed.setTitle(title);
+		String description = "Description";
+		feed.setDescription(description);
+		String authors = "Author";
+		feed.setAuthor(authors);
+		
+		Feed enrichedFeed = sut.enrichFeedByRepositoryEntry(feed, null);
+		
+		assertThat(enrichedFeed).isEqualTo(feed);
+		assertThat(enrichedFeed.getTitle()).isEqualTo(title);
+		assertThat(enrichedFeed.getDescription()).isEqualTo(description);
+		assertThat(enrichedFeed.getAuthor()).isEqualTo(authors);
+	}
+
+	@Test
+	public void enrichFeedFromRepositoryEntryShouldReturnNullIfFeedIsNull() {
+		RepositoryEntry entry = new RepositoryEntry();
+		
+		Feed enrichedFeed = sut.enrichFeedByRepositoryEntry(null, entry);
+		
+		assertThat(enrichedFeed).isNull();
+	}
 }
-- 
GitLab