Repository: openmeetings Updated Branches: refs/heads/master 9da05440f -> fbbd84f64
[OPENMEETINGS-1749] rss is loaded asynchronously, for all users Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/fbbd84f6 Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/fbbd84f6 Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/fbbd84f6 Branch: refs/heads/master Commit: fbbd84f64b3832bd07c8211c83cc4ca5710be7d3 Parents: 9da0544 Author: Maxim Solodovnik <[email protected]> Authored: Thu Nov 9 14:15:25 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Thu Nov 9 14:15:53 2017 +0700 ---------------------------------------------------------------------- .../openmeetings/core/mail/MailHandler.java | 18 ++-- .../openmeetings/core/rss/LoadAtomRssFeed.java | 11 +++ .../installation/ImportInitvalues.java | 2 +- .../service/quartz/scheduler/CleanupJob.java | 22 ++--- .../service/quartz/scheduler/ReminderJob.java | 92 +++++++++++++++++++- .../web/user/dashboard/RssWidgetView.java | 58 +----------- .../openmeetings/web/user/dashboard/rss.js | 72 +++------------ .../WEB-INF/classes/applicationContext.xml | 5 ++ .../openmeetings/service/quartz/TestJob.java | 32 +++++++ 9 files changed, 177 insertions(+), 135 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java index 86f6a3b..e5106ea 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/mail/MailHandler.java @@ -269,25 +269,27 @@ public class MailHandler { } public void resetSendingStatus() { - log.debug("resetSendingStatus enter ..."); + log.trace("resetSendingStatus enter ..."); if (!isInitComplete()) { return; } Calendar c = Calendar.getInstance(); c.add(Calendar.MILLISECOND, -MAIL_SEND_TIMEOUT); mailMessageDao.resetSendingStatus(c); - log.debug("... resetSendingStatus done."); + log.trace("... resetSendingStatus done."); } public void sendMails() { init(); - log.debug("sendMails enter ..."); + log.trace("sendMails enter ..."); List<MailMessage> list = mailMessageDao.get(0, 1, MailMessage.Status.NONE); - log.debug("Number of emails in init queue " + list.size()); - while (!list.isEmpty()) { - send(list.get(0), true); - list = mailMessageDao.get(0, 1, MailMessage.Status.NONE); + if (!list.isEmpty()) { + log.debug("Number of emails in init queue {}", list.size()); + while (!list.isEmpty()) { + send(list.get(0), true); + list = mailMessageDao.get(0, 1, MailMessage.Status.NONE); + } + log.debug("... sendMails done."); } - log.debug("... sendMails done."); } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java index 5715812..9a05ccc 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/rss/LoadAtomRssFeed.java @@ -27,8 +27,11 @@ import java.net.URL; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; +import com.github.openjson.JSONArray; + public class LoadAtomRssFeed { private static final Logger log = Red5LoggerFactory.getLogger(LoadAtomRssFeed.class, getWebAppRootKey()); + private static JSONArray rss = new JSONArray(); private LoadAtomRssFeed() {} @@ -47,4 +50,12 @@ public class LoadAtomRssFeed { conn.connect(); return conn; } + + public static JSONArray getRss() { + return rss; + } + + public static void setRss(JSONArray rss) { + LoadAtomRssFeed.rss = rss; + } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java index ddaf8dc..606220a 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java @@ -432,7 +432,7 @@ public class ImportInitvalues { // Yandex OAuthServer yaServer = new OAuthServer(); yaServer.setName("Yandex"); - yaServer.setIconUrl("http://yandex.st/morda-logo/i/favicon.ico"); + yaServer.setIconUrl("https://yandex.st/morda-logo/i/favicon.ico"); yaServer.setClientId(CLIENT_PLACEHOLDER); yaServer.setClientSecret(SECRET_PLACEHOLDER); yaServer.setEnabled(false); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java ---------------------------------------------------------------------- diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java index 919b112..bed9df3 100644 --- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java +++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java @@ -72,7 +72,7 @@ public class CleanupJob extends AbstractJob { } public void cleanTestSetup() { - log.debug("CleanupJob.cleanTestSetup"); + log.trace("CleanupJob.cleanTestSetup"); final long now = System.currentTimeMillis(); if (!isInitComplete()) { return; @@ -100,7 +100,7 @@ public class CleanupJob extends AbstractJob { } public void cleanRoomFiles() { - log.debug("CleanupJob.cleanRoomFiles"); + log.trace("CleanupJob.cleanRoomFiles"); final long now = System.currentTimeMillis(); if (!isInitComplete()) { return; @@ -150,7 +150,7 @@ public class CleanupJob extends AbstractJob { } public void cleanExpiredRecordings() { - log.debug("CleanupJob.cleanExpiredRecordings"); + log.trace("CleanupJob.cleanExpiredRecordings"); processExpiringRecordings(true, (rec, days) -> { if (days < 0) { log.debug("cleanExpiredRecordings:: following recording will be deleted {}", rec); @@ -164,17 +164,19 @@ public class CleanupJob extends AbstractJob { } public void cleanExpiredResetHash() { - log.debug("CleanupJob.cleanExpiredResetHash"); + log.trace("CleanupJob.cleanExpiredResetHash"); if (!isInitComplete()) { return; } List<User> users = userDao.getByExpiredHash(resetHashTtl); - log.debug("... {} expired hashes were found", users.size()); - for (User u : users) { - u.setResetDate(null); - u.setResethash(null); - userDao.update(u, null); + if (!users.isEmpty()) { + log.debug("... {} expired hashes were found", users.size()); + for (User u : users) { + u.setResetDate(null); + u.setResethash(null); + userDao.update(u, null); + } + log.debug("... DONE CleanupJob.cleanExpiredResetHash"); } - log.debug("... DONE CleanupJob.cleanExpiredResetHash"); } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java ---------------------------------------------------------------------- diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java index fb9516f..bb9f38c 100644 --- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java +++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java @@ -18,32 +18,54 @@ */ package org.apache.openmeetings.service.quartz.scheduler; +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.getFeedConnection; +import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.setRss; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED1; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED2; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS; import static org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey; import static org.apache.openmeetings.util.OpenmeetingsVariables.isInitComplete; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; + import org.apache.openmeetings.core.mail.MailHandler; +import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.service.calendar.AppointmentLogic; import org.apache.openmeetings.service.mail.template.subject.RecordingExpiringTemplate; import org.apache.openmeetings.service.mail.template.subject.SubjectEmailTemplate; +import org.apache.wicket.util.string.Strings; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Element; +import org.dom4j.io.SAXReader; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import com.github.openjson.JSONArray; +import com.github.openjson.JSONObject; + @Component("reminderJob") public class ReminderJob extends AbstractJob { private static Logger log = Red5LoggerFactory.getLogger(ReminderJob.class, getWebAppRootKey()); + private static final int MAX_ITEM_COUNT = 5; @Autowired private AppointmentLogic appointmentLogic; @Autowired private UserDao userDao; @Autowired private MailHandler mailHandler; + @Autowired + private ConfigurationDao cfgDao;; public void remindMeetings() { - log.debug("ReminderJob.remindMeetings"); + log.trace("ReminderJob.remindMeetings"); if (!isInitComplete()) { return; } @@ -55,7 +77,7 @@ public class ReminderJob extends AbstractJob { } public void remindExpiringRecordings() { - log.debug("ReminderJob.remindExpiringRecordings"); + log.trace("ReminderJob.remindExpiringRecordings"); processExpiringRecordings(false, (rec, days) -> { if (days > 0) { User u = userDao.get(rec.getInsertedBy()); @@ -72,4 +94,70 @@ public class ReminderJob extends AbstractJob { recordingDao.update(rec); }); } + + public void loadRss() { + log.trace("ReminderJob.loadRss"); + if (!isInitComplete()) { + return; + } + if (!cfgDao.getBool(CONFIG_DASHBOARD_SHOW_RSS, false)) { + log.debug("Rss disabled by Admin"); + return; + } + SAXReader reader = new SAXReader(false); + reader.setEncoding(UTF_8.name()); + JSONArray feed = new JSONArray(); + for (String url : new String[] {cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED1, ""), cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED2, "")}) { + if (!Strings.isEmpty(url)) { + HttpURLConnection con = null; + try { + con = getFeedConnection(url); + try (InputStream is = con.getInputStream()) { + Document doc = reader.read(is); + int i = 0; + for (Element entry : doc.getRootElement().elements("item")) { + i++; + feed.put(new JSONObject() + .put("title", entry.element("title").getStringValue()) + .put("link", entry.element("link").getStringValue()) + .put("content", entry.element("description").getStringValue()) + .put("published", entry.element("pubDate").getStringValue()) + .put("author", entry.element("author").getStringValue()) + ); + if (i > MAX_ITEM_COUNT) { + break; + } + } + i = 0; + for (Element entry : doc.getRootElement().elements("entry")) { + i++; + Element date = entry.element("published"); + if (date == null) { + date = entry.element("updated"); + } + feed.put(new JSONObject() + .put("title", entry.element("title").getStringValue()) + .put("link", entry.element("link").getStringValue()) + .put("content", entry.element("content").getStringValue()) + .put("published", date.getStringValue()) + .put("author", entry.element("author").getStringValue()) + ); + if (i > MAX_ITEM_COUNT) { + break; + } + } + } + } catch (IOException|DocumentException e) { + log.error("Unexpected error while getting RSS", e); + } finally { + if (con != null) { + con.disconnect(); + } + } + } + } + if (feed.length() > 0) { + setRss(feed); + } + } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java index b1da7b4..1f5f5df 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java @@ -18,81 +18,27 @@ */ package org.apache.openmeetings.web.user.dashboard; -import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.getFeedConnection; -import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED1; -import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_RSS_FEED2; -import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.core.rss.LoadAtomRssFeed.getRss; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; - -import org.apache.openmeetings.db.dao.basic.ConfigurationDao; -import org.apache.wicket.behavior.AbstractAjaxBehavior; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; import org.apache.wicket.model.Model; -import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; -import org.apache.wicket.request.resource.ContentDisposition; import org.apache.wicket.request.resource.JavaScriptResourceReference; -import org.apache.wicket.util.resource.AbstractResourceStream; -import org.apache.wicket.util.resource.ResourceStreamNotFoundException; import org.wicketstuff.dashboard.Widget; import org.wicketstuff.dashboard.web.WidgetView; public class RssWidgetView extends WidgetView { private static final long serialVersionUID = 1L; - private final RSSFeedBehavior feed1; - private final RSSFeedBehavior feed2; public RssWidgetView(String id, Model<Widget> model) { super(id, model); - ConfigurationDao cfgDao = getBean(ConfigurationDao.class); - add(feed1 = new RSSFeedBehavior(cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED1, ""))); - add(feed2 = new RSSFeedBehavior(cfgDao.getString(CONFIG_DASHBOARD_RSS_FEED2, ""))); } @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(RssWidgetView.class, "rss.js"))); - response.render(OnDomReadyHeaderItem.forScript(String.format("loadRssTab('%s', '%s');", feed1.getCallbackUrl(), feed2.getCallbackUrl()))) ; - } - - static class RSSFeedBehavior extends AbstractAjaxBehavior { - private static final long serialVersionUID = 1L; - private String url; - - RSSFeedBehavior(String url) { - this.url = url; - } - - @Override - public void onRequest() { - ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(new AbstractResourceStream() { - private static final long serialVersionUID = 1L; - transient HttpURLConnection con; - - @Override - public InputStream getInputStream() throws ResourceStreamNotFoundException { - try { - con = getFeedConnection(url); - return con.getInputStream(); - } catch (IOException e) { - throw new ResourceStreamNotFoundException(); - } - } - - @Override - public void close() throws IOException { - if (con != null) { - con.disconnect(); - } - } - }, "feed"); - handler.setContentDisposition(ContentDisposition.INLINE); - getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler); - } + response.render(OnDomReadyHeaderItem.forScript(String.format("displayRss(%s);", getRss().toString()))) ; } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js index 0725f7c..cc40eac 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/rss.js @@ -1,63 +1,19 @@ /* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */ -var MAX_ITEM_COUNT = 5; -function getRssItems(url, next) { - //TODO items need to be merged and sorted by date - $.ajax({ - url: url - , type: 'GET' - , crossDomain: true - , dataType: 'xml' - , cache: false - , success: function(data) { - const $xml = $(data); - let counter = MAX_ITEM_COUNT; - $xml.find("item").each(function() { - const $this = $(this), item = { - title : $this.find("title").text(), - link : $this.find("link").text(), - description : $this.find("description").text(), - pubDate : $this.find("pubDate").text(), - author : $this.find("author").text() - } - addItem(item); - if (--counter < 0) { - return false; - } - }); - counter = MAX_ITEM_COUNT; - $xml.find("entry").each(function() { - const $this = $(this), item = { - title : $this.find("title").text(), - link : $this.find("link").text(), - description : $this.find("content"), - pubDate : $this.find("published").text(), - author : $this.find("author").text() - } - addItem(item); - if (--counter < 0) { - return false; - } - }); - if (next) { - getRssItems(next, null) - } else { - $('#feeds').accordion({ - collapsible: true - , active: false - , header: 'h3' - , heightStyle: "content" - }); - } - } - }); +function addItem(feeds, item) { + feeds.append('<h3>' + item.title + '</h3>') + .append($('<div></div>').append(item.content)); } -function addItem(item) { - //TODO need to be checked - $('#feeds').append('<h3>' + item.title + '</h3>') - .append($('<div></div>').append(item.description)); -} -function loadRssTab(url1, url2) { +function displayRss(entries) { $('#feedcontainer').html(''); $('#feedcontainer').append('<div id="feeds"></div>'); - getRssItems(url1, url2); + const feeds = $('#feeds'); + for (let i = 0; i < entries.length; ++i) { + addItem(feeds, entries[i]); + } + feeds.accordion({ + collapsible: true + , active: false + , header: 'h3' + , heightStyle: "content" + }); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml index 4463d81..c8fec62 100644 --- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml +++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml @@ -84,6 +84,10 @@ p:targetObject-ref="reminderJob" p:targetMethod="remindExpiringRecordings" p:concurrent="false" /> <bean id="triggerExpiringRecording" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" p:jobDetail-ref="expiringRecordingJobDetail" p:startDelay="5000" p:repeatInterval="3600000"/> + <bean id="loadRssJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" + p:targetObject-ref="reminderJob" p:targetMethod="loadRss" p:concurrent="false" /> + <bean id="triggerLoadRss" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" + p:jobDetail-ref="loadRssJobDetail" p:startDelay="5000" p:repeatInterval="600000"/> <!-- Mail related jobs --> <bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" @@ -107,6 +111,7 @@ <ref bean="triggerExpiringRecording" /> <ref bean="triggerResetSendingMailStatus" /> <ref bean="triggerSendMails" /> + <ref bean="triggerLoadRss" /> </list> </property> </bean> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbbd84f6/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java b/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java index a4832dc..19dda78 100644 --- a/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java +++ b/openmeetings-web/src/test/java/org/apache/openmeetings/service/quartz/TestJob.java @@ -18,16 +18,21 @@ */ package org.apache.openmeetings.service.quartz; +import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS; import static org.apache.openmeetings.util.OpenmeetingsVariables.setInitComplete; import org.apache.openmeetings.AbstractWicketTester; +import org.apache.openmeetings.db.entity.basic.Configuration; import org.apache.openmeetings.service.quartz.scheduler.CleanupJob; +import org.apache.openmeetings.service.quartz.scheduler.ReminderJob; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; public class TestJob extends AbstractWicketTester { @Autowired private CleanupJob cleanJob; + @Autowired + private ReminderJob reminderJob; @Test public void testNotInited() { @@ -38,8 +43,35 @@ public class TestJob extends AbstractWicketTester { cleanJob.cleanRoomFiles(); cleanJob.cleanSessions(); cleanJob.cleanTestSetup(); + + reminderJob.loadRss(); + reminderJob.remindExpiringRecordings(); + reminderJob.remindMeetings(); } finally { setInitComplete(true); } } + + private void testRss(boolean enabled, Runnable r) { + boolean prevRss = cfgDao.getBool(CONFIG_DASHBOARD_SHOW_RSS, false); + Configuration cfg = cfgDao.get(CONFIG_DASHBOARD_SHOW_RSS); + try { + cfg.setValueB(enabled); + cfgDao.update(cfg, null); + r.run(); + } finally { + cfg.setValueB(prevRss); + cfgDao.update(cfg, null); + } + } + + @Test + public void testRssDisabled() { + testRss(false, () -> reminderJob.loadRss()); + } + + @Test + public void testRssEnabled() { + testRss(true, () -> reminderJob.loadRss()); + } }
