package com.ibm.sbt.services.client.email;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.ibm.commons.util.io.json.JsonJavaObject;
import com.ibm.commons.util.io.json.JsonObject;
public class MimeEmailTest {
List<String> to = new ArrayList<String>();
List<String> cc = new ArrayList<String>();
List<String> bcc = new ArrayList<String>();
private JsonObject jsonTextPart;
private JsonObject jsonHtmlPart;
private JsonObject jsonEEPart;
private JsonObject jsonEEDataModel;
private JsonObject jsonHtmlEmail;
private JsonObject jsonTextEmail;
private JsonObject jsonEEEmail;
private JsonObject jsonNoMimeParts;
private MimeEmail eeEmail;
private MimeEmail textEmail;
private MimeEmail htmlEmail;
private MimeEmail noMimePartsEmail;
private MimeEmail email;
private List<MimePart> emailParts = new ArrayList<MimePart>();
@Before
public void setUp() throws Exception {
to.add("sdaryn@renovations.com");
to.add("tamado@renovations.com");
cc.add("pclemmons@renovations.com");
bcc.add("example@renovations.com");
jsonEEDataModel = new JsonJavaObject();
jsonEEDataModel.putJsonProperty("gadget", "http://renovations.com/gadget.xml");
jsonEEDataModel.putJsonProperty("context", "This is some context");
jsonTextPart = new JsonJavaObject();
jsonTextPart.putJsonProperty(MimePart.MIME_TYPE, "text/plain");
jsonTextPart.putJsonProperty(MimePart.CONTENT, "This is some text");
jsonHtmlPart = new JsonJavaObject();
jsonHtmlPart.putJsonProperty(MimePart.MIME_TYPE, "text/html");
jsonHtmlPart.putJsonProperty(MimePart.CONTENT, "<b>This is some html</b>");
jsonEEPart = new JsonJavaObject();
jsonEEPart.putJsonProperty(MimePart.MIME_TYPE, "application/embed+json");
jsonEEPart.putJsonProperty(MimePart.CONTENT, jsonEEDataModel);
List<JsonObject> textMimeParts = new ArrayList<JsonObject>();
textMimeParts.add(jsonTextPart);
jsonTextEmail = new JsonJavaObject();
jsonTextEmail.putJsonProperty(MimeEmail.TO, to);
jsonTextEmail.putJsonProperty(MimeEmail.CC, cc);
jsonTextEmail.putJsonProperty(MimeEmail.BCC, bcc);
jsonTextEmail.putJsonProperty(MimeEmail.SUBJECT, "Look At This");
jsonTextEmail.putJsonProperty(MimeEmail.MIME_PARTS, textMimeParts);
textEmail = new DefaultMimeEmail(jsonTextEmail);
List<JsonObject> htmlMimeParts = new ArrayList<JsonObject>();
htmlMimeParts.add(jsonHtmlPart);
jsonHtmlEmail = new JsonJavaObject();
jsonHtmlEmail.putJsonProperty(MimeEmail.TO, to);
jsonHtmlEmail.putJsonProperty(MimeEmail.CC, cc);
jsonHtmlEmail.putJsonProperty(MimeEmail.BCC, bcc);
jsonHtmlEmail.putJsonProperty(MimeEmail.MIME_PARTS, htmlMimeParts);
htmlEmail = new DefaultMimeEmail(jsonHtmlEmail);
List<JsonObject> eeMimeParts = new ArrayList<JsonObject>();
eeMimeParts.add(jsonTextPart);
eeMimeParts.add(jsonHtmlPart);
eeMimeParts.add(jsonEEPart);
jsonEEEmail = new JsonJavaObject();
jsonEEEmail.putJsonProperty(MimeEmail.TO, to);
jsonEEEmail.putJsonProperty(MimeEmail.SUBJECT, "EE Email");
jsonEEEmail.putJsonProperty(MimeEmail.MIME_PARTS, eeMimeParts);
eeEmail = new DefaultMimeEmail(jsonEEEmail);
jsonNoMimeParts = new JsonJavaObject();
jsonNoMimeParts.putJsonProperty(MimeEmail.TO, to);
jsonNoMimeParts.putJsonProperty(MimeEmail.CC, cc);
jsonNoMimeParts.putJsonProperty(MimeEmail.BCC, bcc);
noMimePartsEmail = new DefaultMimeEmail(jsonNoMimeParts);
for(JsonObject json : eeMimeParts){
emailParts.add(new MimePart(json));
}
email = new DefaultMimeEmail(to, cc, bcc, "Look At This", emailParts);
}
@After
public void tearDown() throws Exception {
to = new ArrayList<String>();
cc = new ArrayList<String>();
bcc = new ArrayList<String>();
jsonTextPart = null;
jsonHtmlPart = null;
jsonEEPart = null;
jsonEEDataModel = null;
jsonHtmlEmail = null;
jsonTextEmail = null;
jsonEEEmail = null;
jsonNoMimeParts = null;
eeEmail = null;
textEmail = null;
htmlEmail = null;
noMimePartsEmail = null;
email = null;
emailParts = new ArrayList<MimePart>();
}
@Test(expected = MimeEmailException.class)
public void testMimeEmailNull() throws Exception {
new DefaultMimeEmail(null, null, null, "Subject", new ArrayList<MimePart>()).send();
}
@Test(expected = MimeEmailException.class)
public void testMimeEmailEmpty() throws Exception {
new DefaultMimeEmail(new ArrayList<String>(), new ArrayList<String>(),
new ArrayList<String>(), "Subject", new ArrayList<MimePart>()).send();
}
@Test(expected = MimeEmailException.class)
public void testMimeEmailJson() throws Exception {
List<JsonObject> eeMimeParts = new ArrayList<JsonObject>();
eeMimeParts.add(jsonTextPart);
eeMimeParts.add(jsonHtmlPart);
eeMimeParts.add(jsonEEPart);
JsonObject json = new JsonJavaObject();
json.putJsonProperty(MimeEmail.MIME_PARTS, eeMimeParts);
new DefaultMimeEmail(json).send();
}
@Test
public void testGetSubject() {
assertEquals("EE Email", eeEmail.getSubject());
assertEquals("Look At This", textEmail.getSubject());
assertEquals("", htmlEmail.getSubject());
assertEquals("", noMimePartsEmail.getSubject());
assertEquals("Look At This", email.getSubject());
}
@Test
public void testSetSubject() {
eeEmail.setSubject("new subject");
assertEquals("new subject", eeEmail.getSubject());
eeEmail.setSubject(null);
assertEquals("", eeEmail.getSubject());
}
@Test
public void testGetTo() {
assertEquals(to, eeEmail.getTo());
assertEquals(to, textEmail.getTo());
assertEquals(to, htmlEmail.getTo());
assertEquals(to, noMimePartsEmail.getTo());
assertEquals(to, email.getTo());
}
@Test
public void testGetCommaSeparatedTo() {
assertEquals("sdaryn@renovations.com,tamado@renovations.com", eeEmail.getCommaSeparatedTo());
assertEquals("sdaryn@renovations.com,tamado@renovations.com", textEmail.getCommaSeparatedTo());
assertEquals("sdaryn@renovations.com,tamado@renovations.com", htmlEmail.getCommaSeparatedTo());
assertEquals("sdaryn@renovations.com,tamado@renovations.com", noMimePartsEmail.getCommaSeparatedTo());
assertEquals("sdaryn@renovations.com,tamado@renovations.com", email.getCommaSeparatedTo());
}
@Test
public void testSetTo() {
email.setTo(bcc);
assertEquals(bcc, email.getTo());
email.setTo(null);
assertEquals(new ArrayList<String>(), email.getTo());
}
@Test
public void testAddToAddress() {
String testEmail = "example@renovations.com";
List<String> test = new ArrayList<String>();
test.add(testEmail);
MimeEmail email = new DefaultMimeEmail();
email.addToAddress(testEmail);
assertEquals(test, email.getTo());
email.addToAddress(null);
assertEquals(test, email.getTo());
}
@Test
public void testRemoveToAddress() {
String testEmail = "example@renovations.com";
List<String> test = new ArrayList<String>();
test.add(testEmail);
MimeEmail email = new DefaultMimeEmail();
email.addToAddress(testEmail);
assertEquals(test, email.getTo());
email.removeToAddress(null);
assertEquals(test, email.getTo());
email.removeToAddress(testEmail);
assertEquals(new ArrayList<String>(), email.getTo());
}
@Test
public void testGetCC() {
assertEquals(new ArrayList<String>(), eeEmail.getCC());
assertEquals(cc, textEmail.getCC());
assertEquals(cc, htmlEmail.getCC());
assertEquals(cc, noMimePartsEmail.getCC());
assertEquals(cc, email.getCC());
}
@Test
public void testGetCommaSeparatedCC() {
assertEquals("", eeEmail.getCommaSeparatedCC());
assertEquals("pclemmons@renovations.com", textEmail.getCommaSeparatedCC());
assertEquals("pclemmons@renovations.com", htmlEmail.getCommaSeparatedCC());
assertEquals("pclemmons@renovations.com", noMimePartsEmail.getCommaSeparatedCC());
assertEquals("pclemmons@renovations.com", email.getCommaSeparatedCC());
}
@Test
public void testSetCC() {
email.setCC(to);
assertEquals(to, email.getCC());
email.setCC(null);
assertEquals(new ArrayList<String>(), email.getCC());
}
@Test
public void testAddCCAddress() {
String testEmail = "example@renovations.com";
List<String> test = new ArrayList<String>();
test.add(testEmail);
MimeEmail email = new DefaultMimeEmail();
email.addCCAddress(testEmail);
assertEquals(test, email.getCC());
email.addCCAddress(null);
assertEquals(test, email.getCC());
}
@Test
public void testRemoveCCAddress() {
String testEmail = "example@renovations.com";
List<String> test = new ArrayList<String>();
test.add(testEmail);
MimeEmail email = new DefaultMimeEmail();
email.addCCAddress(testEmail);
assertEquals(test, email.getCC());
email.removeCCAddress(null);
assertEquals(test, email.getCC());
email.removeCCAddress(testEmail);
assertEquals(new ArrayList<String>(), email.getCC());
}
@Test
public void testGetBCC() {
assertEquals(new ArrayList<String>(), eeEmail.getBCC());
assertEquals(bcc, textEmail.getBCC());
assertEquals(bcc, htmlEmail.getBCC());
assertEquals(bcc, noMimePartsEmail.getBCC());
assertEquals(bcc, email.getBCC());
}
@Test
public void testGetCommaSeparatedBCC() {
assertEquals("", eeEmail.getCommaSeparatedBCC());
assertEquals("example@renovations.com", textEmail.getCommaSeparatedBCC());
assertEquals("example@renovations.com", htmlEmail.getCommaSeparatedBCC());
assertEquals("example@renovations.com", noMimePartsEmail.getCommaSeparatedBCC());
assertEquals("example@renovations.com", email.getCommaSeparatedBCC());
}
@Test
public void testSetBCC() {
email.setBCC(to);
assertEquals(to, email.getBCC());
email.setBCC(null);
assertEquals(new ArrayList<String>(), email.getBCC());
}
@Test
public void testAddBCCAddress() {
String testEmail = "example@renovations.com";
List<String> test = new ArrayList<String>();
test.add(testEmail);
MimeEmail email = new DefaultMimeEmail();
email.addBCCAddress(testEmail);
assertEquals(test, email.getBCC());
email.addBCCAddress(null);
assertEquals(test, email.getBCC());
}
@Test
public void testRemoveBCCAddress() {
String testEmail = "example@renovations.com";
List<String> test = new ArrayList<String>();
test.add(testEmail);
MimeEmail email = new DefaultMimeEmail();
email.addBCCAddress(testEmail);
assertEquals(test, email.getBCC());
email.removeBCCAddress(null);
assertEquals(test, email.getBCC());
email.removeBCCAddress(testEmail);
assertEquals(new ArrayList<String>(), email.getBCC());
}
@Test
public void testGetMimeParts() throws Exception {
List<MimePart> textParts = new ArrayList<MimePart>();
textParts.add(new MimePart(jsonTextPart));
List<MimePart> htmlParts = new ArrayList<MimePart>();
htmlParts.add(new MimePart(jsonHtmlPart));
assertEquals(emailParts, eeEmail.getMimeParts());
assertEquals(textParts, textEmail.getMimeParts());
assertEquals(htmlParts, htmlEmail.getMimeParts());
assertEquals(new ArrayList<MimePart>(), noMimePartsEmail.getMimeParts());
assertEquals(emailParts, email.getMimeParts());
}
@Test
public void testSetMimeParts() throws Exception {
email.setMimeParts(null);
assertEquals(new ArrayList<String>(), email.getMimeParts());
List<MimePart> parts = new ArrayList<MimePart>();
parts.add(new MimePart(jsonTextPart));
email.setMimeParts(parts);
}
@Test
public void testAddMimePart() throws MimeEmailException {
MimePart part = new MimePart("some/text", "some content", new HashMap<String, String>());
List<MimePart> parts = new ArrayList<MimePart>();
parts.add(part);
MimeEmail email = new DefaultMimeEmail();
email.addMimePart(part);
assertEquals(parts, email.getMimeParts());
email.addMimePart(null);
assertEquals(parts, email.getMimeParts());
}
@Test
public void testRemoveMimePart() throws MimeEmailException {
MimePart part = new MimePart("some/text", "some content", new HashMap<String, String>());
List<MimePart> parts = new ArrayList<MimePart>();
parts.add(part);
MimeEmail email = new DefaultMimeEmail();
email.addMimePart(part);
assertEquals(parts, email.getMimeParts());
email.removeMimePart(null);
assertEquals(parts, email.getMimeParts());
email.removeMimePart(part);
assertEquals(new ArrayList<MimePart>(), email.getMimeParts());
}
@Test
public void testEqualsObject() throws Exception {
MimeEmail test = new DefaultMimeEmail(to, cc, bcc, null, new ArrayList<MimePart>());
assertFalse(test.equals(eeEmail));
assertTrue(test.equals(noMimePartsEmail));
assertFalse(test.equals(email));
assertFalse(test.equals(null));
assertFalse(test.equals(new Object()));
}
}