Package com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter

Source Code of com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.TestNewsletterManager

/*
*
* 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;
 
}
TOP

Related Classes of com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.TestNewsletterManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.