/* * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * * This file is part of Entando software. * Entando is a free software; * You can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * */ package com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.sql.DataSource; import com.agiletec.plugins.jpnewsletter.aps.ApsPluginBaseTestCase; import com.agiletec.plugins.jpnewsletter.util.JpnewsletterTestHelper; import com.agiletec.aps.system.common.entity.model.EntitySearchFilter; import com.agiletec.aps.system.services.group.Group; import com.agiletec.aps.util.DateConverter; import com.agiletec.plugins.jacms.aps.system.JacmsSystemConstants; import com.agiletec.plugins.jacms.aps.system.services.content.IContentManager; import com.agiletec.plugins.jacms.aps.system.services.content.model.Content; import com.agiletec.plugins.jpnewsletter.aps.system.JpnewsletterSystemConstants; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.INewsletterDAO; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.INewsletterManager; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.NewsletterDAO; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.ContentReport; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.NewsletterConfig; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.NewsletterContentReportVO; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.NewsletterReport; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.NewsletterSearchBean; import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.Subscriber; public class TestNewsletterManager extends ApsPluginBaseTestCase { public void testGetUpdateNewsletterConfig() throws Throwable { NewsletterConfig originaryConfig = this._newsletterManager.getNewsletterConfig(); this.checkOriginaryConfig(originaryConfig); try { NewsletterConfig newConfig = this.createNewsletterConfig(); this._newsletterManager.updateNewsletterConfig(newConfig); NewsletterConfig updatedConfig = this._newsletterManager.getNewsletterConfig(); this.compareConfigs(newConfig, updatedConfig); this._newsletterManager.updateNewsletterConfig(originaryConfig); updatedConfig = this._newsletterManager.getNewsletterConfig(); this.compareConfigs(originaryConfig, updatedConfig); } catch (Throwable t) { throw t; } finally { this._helper.resetConfig(); } } public void testAddGetRemoveContentFromQueue(String contentId) throws Throwable { try { this._helper.setNewsletterManagerThreadDelay(10000, false, null, this._newsletterManager); List<String> queue = this._newsletterManager.getContentQueue(); assertEquals(0, queue.size()); this._newsletterManager.addContentToQueue("id1"); this._newsletterManager.addContentToQueue("id2"); this._newsletterManager.addContentToQueue("id3"); this._newsletterManager.addContentToQueue("id4"); queue = this._newsletterManager.getContentQueue(); assertEquals(4, queue.size()); queue.contains("id1"); queue.contains("id2"); queue.contains("id3"); queue.contains("id4"); this._newsletterManager.removeContentFromQueue("id1"); this._newsletterManager.removeContentFromQueue("id3"); queue = this._newsletterManager.getContentQueue(); assertEquals(2, queue.size()); queue.contains("id2"); queue.contains("id4"); this._newsletterManager.addContentToQueue("id5"); queue = this._newsletterManager.getContentQueue(); assertEquals(3, queue.size()); queue.contains("id2"); queue.contains("id4"); queue.contains("id5"); this._newsletterManager.removeContentFromQueue("id2"); this._newsletterManager.removeContentFromQueue("id4"); this._newsletterManager.removeContentFromQueue("id5"); queue = this._newsletterManager.getContentQueue(); assertEquals(0, queue.size()); } catch (Throwable t) { throw t; } finally { this._helper.deleteNewsletters(); this._helper.resetConfig(); } } public void testGetContentReport() throws Throwable { Date date = new Date(); NewsletterReport newsletterReport1 = this._helper.createNewsletterReport(1, new Date(), "subject1"); ContentReport contentReport1 = this._helper.createContentReport(1, newsletterReport1.getId(), "ART1", "textBody1", "htmlBody1"); contentReport1.addRecipient("user1", "mail1@address.it"); contentReport1.addRecipient("user2", "mail2@address.it"); newsletterReport1.addContentReport(contentReport1); ContentReport contentReport2 = this._helper.createContentReport(2, newsletterReport1.getId(), "ART102", "textBody2", "htmlBody2"); contentReport2.addRecipient("user1", "mail1@address.it"); newsletterReport1.addContentReport(contentReport2); NewsletterReport newsletterReport2 = this._helper.createNewsletterReport(2, new Date(date.getTime()+100), "subject2"); ContentReport contentReport3 = this._helper.createContentReport(3, newsletterReport2.getId(), "ART1", "textBody1", "htmlBody1"); newsletterReport2.addContentReport(contentReport3); ContentReport contentReport4 = this._helper.createContentReport(4, newsletterReport2.getId(), "ART102", "textBody2", "htmlBody2"); newsletterReport2.addContentReport(contentReport4); try { this._newsletterDAO.addNewsletterReport(newsletterReport1); NewsletterContentReportVO report1 = this._newsletterManager.getContentReport("ART1"); this.compareContentReports(newsletterReport1, contentReport1, report1); NewsletterContentReportVO report2 = this._newsletterManager.getContentReport("ART102"); this.compareContentReports(newsletterReport1, contentReport2, report2); this._newsletterDAO.addNewsletterReport(newsletterReport2); NewsletterContentReportVO report3 = this._newsletterManager.getContentReport("ART1"); this.compareContentReports(newsletterReport2, contentReport3, report3); NewsletterContentReportVO report4 = this._newsletterManager.getContentReport("ART102"); this.compareContentReports(newsletterReport2, contentReport4, report4); List<String> contentIds = this._newsletterManager.getSentContentIds(); this.compareIds(contentIds, new String[] { "ART1", "ART102" }); assertTrue(this._newsletterManager.existsContentReport("ART1")); assertTrue(this._newsletterManager.existsContentReport("ART102")); assertFalse(this._newsletterManager.existsContentReport("ART104")); } catch (Throwable t) { throw t; } finally { this._helper.deleteNewsletters(); } } public void testLoadNewsletterContentIds() throws Throwable { EntitySearchFilter[] filters = { }; List<String> userGroupCodes = new ArrayList<String>(); userGroupCodes.add(Group.FREE_GROUP_NAME); NewsletterSearchBean searchBean = new NewsletterSearchBean(); List<String> contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART180" }); try { this._newsletterManager.addContentToQueue("ART180"); searchBean.setInQueue(new Boolean(false)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { }); searchBean.setInQueue(new Boolean(true)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART180" }); NewsletterReport newsletterReport = this._helper.createNewsletterReport(1, new Date(), "subject"); ContentReport contentReport = this._helper.createContentReport(1, newsletterReport.getId(), "ART180", "textBody1", "htmlBody1"); newsletterReport.addContentReport(contentReport); this._newsletterDAO.addNewsletterReport(newsletterReport); searchBean.setSent(new Boolean(true)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART180" }); searchBean.setSent(new Boolean(false)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { }); searchBean.setInQueue(new Boolean(false)); searchBean.setSent(new Boolean(true)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { }); searchBean.setInQueue(null); searchBean.setSent(new Boolean(true)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART180" }); searchBean.setSent(new Boolean(false)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { }); } catch (Throwable t) { throw t; } finally { this._helper.deleteNewsletters(); } } public void testLoadAllNewsletterContentIds() throws Throwable { EntitySearchFilter[] filters = { }; List<String> userGroupCodes = new ArrayList<String>(); userGroupCodes.add(Group.FREE_GROUP_NAME); NewsletterSearchBean searchBean = new NewsletterSearchBean(); List<String> contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART180" }); // imposta l'attributo per tutti i contenuti, quindi cercherà su tutti e non più per categoria NewsletterConfig config = this._newsletterManager.getNewsletterConfig(); try { config.setAllContentsAttributeName("allContents"); config.setActive(false); this._newsletterManager.updateNewsletterConfig(config); userGroupCodes.add("customers"); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART1", "ART112", "ART102", "ART111", "ART121", "ART122", "ART179", "ART180", "ART187" }); userGroupCodes.add(Group.ADMINS_GROUP_NAME); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART1", "ART112", "ART102", "ART104", "ART111", "ART120", "ART121", "ART122", "ART179", "ART180", "ART187" }); userGroupCodes.clear(); userGroupCodes.add(Group.FREE_GROUP_NAME); this._newsletterManager.addContentToQueue("ART180"); searchBean.setInQueue(new Boolean(false)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART1", "ART121", "ART179", "ART187" }); searchBean.setInQueue(new Boolean(true)); contentIds = this._newsletterManager.loadNewsletterContentIds(filters, userGroupCodes, searchBean); this.compareIds(contentIds, new String[] { "ART180" }); } catch (Throwable t) { throw t; } finally { this._helper.deleteNewsletters(); this._helper.resetConfig(); } } public void testBuildMailBody() throws Throwable { IContentManager contentManager = (IContentManager) this.getService(JacmsSystemConstants.CONTENT_MANAGER); Content content = contentManager.loadContent("ART180", true); String textBody = this._newsletterManager.buildMailBody(content, false); assertNotNull(textBody); String htmlBody = this._newsletterManager.buildMailBody(content, true); assertNotNull(htmlBody); } public void testSendNewsletters() throws Throwable { try { String email = JpnewsletterTestHelper.MAIL_ADDRESS; this._helper.addUser("editorCoach_temp", "aaa", "bbb", email, true, true); this._helper.addUser("editorCustomers_temp", "aaa", "bbb", email, true, true); NewsletterConfig config = this._newsletterManager.getNewsletterConfig(); config.setActive(true); config.setHoursDelay(1); config.setStartScheduler(new Date(new Date().getTime()+2000)); _newsletterManager.updateNewsletterConfig(config); this._newsletterManager.addContentToQueue("ART1"); this._newsletterManager.addContentToQueue("ART102"); this._newsletterManager.addContentToQueue("ART180"); assertNull(this._newsletterManager.getContentReport("ART1")); assertNull(this._newsletterManager.getContentReport("ART102")); assertNull(this._newsletterManager.getContentReport("ART180")); this._newsletterManager.sendNewsletter(); this.waitForSentNewsletter(); NewsletterContentReportVO contentReport1 = this._newsletterManager.getContentReport("ART1"); assertNotNull(contentReport1); assertEquals(0, contentReport1.getRecipients().size()); NewsletterContentReportVO contentReport2 = this._newsletterManager.getContentReport("ART102"); assertNotNull(contentReport2); assertEquals(0, contentReport2.getRecipients().size()); NewsletterContentReportVO contentReport3 = this._newsletterManager.getContentReport("ART180"); assertEquals("ART180", contentReport3.getContentId()); assertTrue(contentReport3.getSendDate().compareTo(new Date())<0); assertEquals("ART180", contentReport3.getContentId()); assertEquals("Oggetto della mail", contentReport3.getSubject()); String textBody = contentReport3.getTextBody(); assertFalse(textBody.contains("Header text")); assertFalse(textBody.contains("Footer text")); String htmlBody = contentReport3.getHtmlBody(); assertFalse(htmlBody.contains("Header html")); assertFalse(htmlBody.contains("Footer html")); assertEquals(2, contentReport3.getRecipients().size()); assertEquals(email, contentReport3.getRecipients().get("editorCoach_temp")); assertEquals(email, contentReport3.getRecipients().get("editorCustomers_temp")); } catch (Throwable t) { throw t; } finally { this._helper.deleteUser("editorCoach_temp"); this._helper.deleteUser("editorCustomers_temp"); this._helper.deleteNewsletters(); this._helper.resetConfig(); } } public void testAddSubscriber() throws Throwable{ String mail = "inesistente@inesistente.in"; List<Subscriber> subscribers = new ArrayList<Subscriber>(); try { this._newsletterManager.addSubscriber(mail); subscribers = this._newsletterManager.loadSubscribers(); String mailExpected = "inesistente@inesistente.in"; String mailActual = subscribers.get(0).getMailAddress(); assertEquals(mailExpected, mailActual); } catch (Throwable t) { throw t; } finally { this._newsletterManager.deleteSubscriber(mail); } } public void testActivateSubscriber() throws Throwable{ String mail = "inesistente@inesistente.in"; List<Subscriber> subscribers = new ArrayList<Subscriber>(); try { this._newsletterManager.activateSubscriber(mail, null);// TODO token this._newsletterManager.deleteSubscriber(mail); subscribers = this._newsletterManager.loadSubscribers(); Integer subscribersSizeExpected = 0; Integer subscribersSizeActual = subscribers.size(); assertEquals(subscribersSizeExpected, subscribersSizeActual); } catch (Throwable t) { this._newsletterManager.deleteSubscriber(mail); throw t; } } private void compareContentReports(NewsletterReport newsletterReport, ContentReport expected, NewsletterContentReportVO received) { assertEquals(expected.getId(), received.getId()); assertEquals(expected.getContentId(), received.getContentId()); assertEquals(expected.getTextBody(), received.getTextBody()); assertEquals(expected.getHtmlBody(), received.getHtmlBody()); assertEquals(newsletterReport.getId(), received.getNewsletterId()); assertEquals(newsletterReport.getSubject(), received.getSubject()); assertEquals(DateConverter.getFormattedDate(newsletterReport.getSendDate(), "ddMMyyyyHHmmss"), DateConverter.getFormattedDate(received.getSendDate(), "ddMMyyyyHHmmss")); Map<String, String> expectedRecipients = expected.getRecipients(); Map<String, String> receivedRecipients = received.getRecipients(); assertEquals(expectedRecipients.size(), receivedRecipients.size()); for (Entry<String, String> entry : expectedRecipients.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); assertEquals(value, receivedRecipients.get(key)); } } private void compareIds(List<String> received, String[] expected) { assertEquals(expected.length, received.size()); for (String id : expected) { assertTrue(received.contains(id)); } } @Override protected void init() throws Exception { super.init(); try { this._newsletterManager = (INewsletterManager) this.getService(JpnewsletterSystemConstants.NEWSLETTER_MANAGER); NewsletterDAO newsletterDAO = new NewsletterDAO(); DataSource dataSource = (DataSource) this.getApplicationContext().getBean("servDataSource"); newsletterDAO.setDataSource(dataSource); this._newsletterDAO = newsletterDAO; } catch (Exception e) { throw e; } } private INewsletterManager _newsletterManager; private INewsletterDAO _newsletterDAO; }