package org.jooby.internal.mail; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; import java.util.Arrays; import java.util.Collection; import javax.mail.internet.InternetAddress; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; import org.apache.commons.mail.SimpleEmail; import org.jooby.mail.CommonsEmail; import org.jooby.test.MockUnit; import org.jooby.test.MockUnit.Block; import org.junit.Test; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigValueFactory; public class EmailFactoryTest { protected Block defprops = unit -> { SimpleEmail email = unit.get(SimpleEmail.class); email.setCharset("UTF-8"); email.setDebug(false); expect(email.setSendPartial(false)).andReturn(email); email.setSmtpPort(25); email.setSocketConnectionTimeout(60000); email.setSocketTimeout(60000); expect(email.setSSLOnConnect(false)).andReturn(email); email.setSslSmtpPort("465"); }; private Block fullprops = unit -> { SimpleEmail email = unit.get(SimpleEmail.class); email.setCharset("UTF-8"); email.setDebug(false); expect(email.setSendPartial(false)).andReturn(email); email.setSmtpPort(25); email.setSocketConnectionTimeout(60000); email.setSocketTimeout(60000); expect(email.setSSLOnConnect(false)).andReturn(email); email.setSslSmtpPort("465"); email.setAuthentication("uname", "pwd"); expect(email.setBcc(Arrays.asList(new InternetAddress("Bcc Name <bcc@bcc.com>")))).andReturn( email); expect(email.setBounceAddress("bounceAddress@mail.com")).andReturn(email); expect(email.setCc(Arrays.asList(new InternetAddress("Cc Name <cc@cc.com>")))).andReturn(email); expect(email.setFrom("from@mail.com")).andReturn(email); email.setHostName("hostname.com"); expect(email.setMsg("msg")).andReturn(email); expect(email.setReplyTo(Arrays.asList(new InternetAddress("Reply To <reply@to.com>")))) .andReturn(email); expect(email.setSSLCheckServerIdentity(false)).andReturn(email); expect(email.setStartTLSEnabled(false)).andReturn(email); expect(email.setStartTLSRequired(false)).andReturn(email); expect(email.setSubject("subject")).andReturn(email); expect(email.setTo(Arrays.asList(new InternetAddress("To <to@to.com>")))).andReturn(email); }; private Block htmlfullprops = unit -> { HtmlEmail email = unit.get(HtmlEmail.class); email.setCharset("UTF-8"); email.setDebug(false); expect(email.setSendPartial(false)).andReturn(email); email.setSmtpPort(25); email.setSocketConnectionTimeout(60000); email.setSocketTimeout(60000); expect(email.setSSLOnConnect(false)).andReturn(email); email.setSslSmtpPort("465"); email.setAuthentication("uname", "pwd"); expect(email.setBcc(Arrays.asList(new InternetAddress("Bcc Name <bcc@bcc.com>")))).andReturn( email); expect(email.setBounceAddress("bounceAddress@mail.com")).andReturn(email); expect(email.setCc(Arrays.asList(new InternetAddress("Cc Name <cc@cc.com>")))).andReturn(email); expect(email.setFrom("from@mail.com")).andReturn(email); email.setHostName("hostname.com"); expect(email.setHtmlMsg("msg")).andReturn(email); expect(email.setReplyTo(Arrays.asList(new InternetAddress("Reply To <reply@to.com>")))) .andReturn(email); expect(email.setSSLCheckServerIdentity(false)).andReturn(email); expect(email.setStartTLSEnabled(false)).andReturn(email); expect(email.setStartTLSRequired(false)).andReturn(email); expect(email.setSubject("subject")).andReturn(email); expect(email.setTo(Arrays.asList(new InternetAddress("To <to@to.com>")))).andReturn(email); }; @SuppressWarnings("unchecked") private Block badprops = unit -> { SimpleEmail email = unit.get(SimpleEmail.class); email.setCharset("UTF-8"); email.setDebug(false); expect(email.setSendPartial(false)).andReturn(email); email.setSmtpPort(25); email.setSocketConnectionTimeout(60000); email.setSocketTimeout(60000); expect(email.setSSLOnConnect(false)).andReturn(email); email.setSslSmtpPort("465"); expect(email.setTo(isA(Collection.class))).andThrow(new EmailException()); }; @Test public void defaults() throws Exception { new MockUnit() .run(unit -> { new EmailFactory(config()); }); } @Test public void set() throws Exception { new MockUnit(SimpleEmail.class) .expect(defprops) .run(unit -> { new EmailFactory(config()) .newEmail(unit.get(SimpleEmail.class)); }); } @Test public void setfull() throws Exception { new MockUnit(SimpleEmail.class) .expect(fullprops) .run(unit -> { new EmailFactory(fconfig()) .newEmail(unit.get(SimpleEmail.class)); }); } @Test public void sethtmlfull() throws Exception { new MockUnit(HtmlEmail.class) .expect(htmlfullprops) .run(unit -> { new EmailFactory(fconfig()) .newEmail(unit.get(HtmlEmail.class)); }); } @Test(expected = IllegalArgumentException.class) public void setbad() throws Exception { new MockUnit(SimpleEmail.class) .expect(badprops) .run(unit -> { new EmailFactory(config() .withValue("to", ConfigValueFactory.fromAnyRef(""))) .newEmail(unit.get(SimpleEmail.class)); }); } private Config fconfig() { return config() .withValue("username", ConfigValueFactory.fromAnyRef("uname")) .withValue("password", ConfigValueFactory.fromAnyRef("pwd")) .withValue("bcc", ConfigValueFactory.fromAnyRef("Bcc Name <bcc@bcc.com>")) .withValue("bounceAddress", ConfigValueFactory.fromAnyRef("bounceAddress@mail.com")) .withValue("cc", ConfigValueFactory.fromAnyRef(Arrays.asList("Cc Name <cc@cc.com>"))) .withValue("from", ConfigValueFactory.fromAnyRef("from@mail.com")) .withValue("hostName", ConfigValueFactory.fromAnyRef("hostname.com")) .withValue("msg", ConfigValueFactory.fromAnyRef("msg")) .withValue("replyTo", ConfigValueFactory.fromAnyRef(Arrays.asList("Reply To <reply@to.com>"))) .withValue("ssl.checkServerIdentity", ConfigValueFactory.fromAnyRef(false)) .withValue("ssl.onConnect", ConfigValueFactory.fromAnyRef(false)) .withValue("startTLSEnabled", ConfigValueFactory.fromAnyRef(false)) .withValue("startTLSRequired", ConfigValueFactory.fromAnyRef(false)) .withValue("subject", ConfigValueFactory.fromAnyRef("subject")) .withValue("to", ConfigValueFactory.fromAnyRef("To <to@to.com>")); } protected Config config() { return ConfigFactory.parseResources(CommonsEmail.class, "commons-email.conf") .getConfig("mail") .withValue("application.charset", ConfigValueFactory.fromAnyRef("UTF-8")) .resolve(); } }