import org.apache.http.HttpStatus; import org.json.JSONException; import org.json.JSONObject; import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import kidozen.client.KZApplication; import kidozen.client.Mail; import kidozen.client.ServiceEvent; import kidozen.client.ServiceEventListener; import kidozen.client.ServiceResponseListener; import kidozen.client.SynchronousException; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; /** * Created with IntelliJ IDEA. * User: christian * Date: 5/27/13 * Time: 4:17 PM * To change this template use File | Settings | File Templates. */ @RunWith(RobolectricTestRunner.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) @Config(manifest= Config.NONE) public class EmailTest { public static final int TEST_TIMEOUT_IN_MINUTES = 3; KZApplication kidozen = null; @Before public void Setup() { try { final CountDownLatch signal = new CountDownLatch(1); kidozen = new KZApplication(AppSettings.KZ_TENANT, AppSettings.KZ_APP, AppSettings.KZ_KEY, false); kidozen.Authenticate(AppSettings.KZ_USER, AppSettings.KZ_PASS,AppSettings.KZ_PROVIDER, kidoAuthCallback(signal)); signal.await(TEST_TIMEOUT_IN_MINUTES, TimeUnit.MINUTES); } catch (Exception e) { fail(e.getMessage()); } } @Test public void ShouldSendEmail() throws Exception { final CountDownLatch lcd = new CountDownLatch(1); Mail mail = new Mail(); mail.to(AppSettings.KZ_EMAIL_TO); mail.from(AppSettings.KZ_EMAIL_FROM); mail.subject(this.CreateRandomValue()); mail.textBody(this.CreateRandomValue()); kidozen.SendEmail(mail, sendCallback(lcd)); assertTrue(lcd.await(TEST_TIMEOUT_IN_MINUTES, TimeUnit.MINUTES)); } @Test public void ShouldAttachFiles() throws Exception { List<String> attachs = new ArrayList<String>(); attachs.add(AppSettings.KZ_EMAIL_ATTACH); final CountDownLatch lcd = new CountDownLatch(1); Mail mail = new Mail(); mail.to(AppSettings.KZ_EMAIL_TO); mail.from(AppSettings.KZ_EMAIL_FROM); mail.subject(this.CreateRandomValue()); mail.textBody(this.CreateRandomValue()); mail.attachments(attachs); kidozen.SendEmail(mail, sendCallback(lcd)); assertTrue(lcd.await(TEST_TIMEOUT_IN_MINUTES, TimeUnit.MINUTES)); } @Test public void ShouldReturnInternalServerError() throws Exception { List<String> attachs = new ArrayList<String>(); attachs.add("/folder/nofile.txt"); final CountDownLatch lcd = new CountDownLatch(1); Mail mail = new Mail(); mail.to(AppSettings.KZ_EMAIL_TO); mail.from(AppSettings.KZ_EMAIL_FROM); mail.subject(this.CreateRandomValue()); mail.textBody(this.CreateRandomValue()); mail.attachments(attachs); kidozen.SendEmail(mail, new ServiceEventListener() { @Override public void onFinish(ServiceEvent e) { assertThat(e.StatusCode, equalTo( HttpStatus.SC_INTERNAL_SERVER_ERROR)); lcd.countDown(); } }); assertTrue(lcd.await(TEST_TIMEOUT_IN_MINUTES, TimeUnit.MINUTES)); } @Test public void ShouldSendEmailWithMultipleRecipients() throws Exception { final CountDownLatch lcd = new CountDownLatch(1); Mail mail = new Mail(); mail.to(AppSettings.KZ_EMAIL_TO + "," + AppSettings.KZ_EMAIL_FROM); mail.from(AppSettings.KZ_EMAIL_FROM); mail.subject(this.CreateRandomValue()); mail.textBody(this.CreateRandomValue()); kidozen.SendEmail(mail, sendCallback(lcd)); assertTrue(lcd.await(TEST_TIMEOUT_IN_MINUTES, TimeUnit.MINUTES)); } @Test public void ShouldSendMailWithServiceResponse() throws Exception, SynchronousException { final CountDownLatch lcd = new CountDownLatch(1); Mail mail = new Mail(); mail.to(AppSettings.KZ_EMAIL_TO); mail.from(AppSettings.KZ_EMAIL_FROM); mail.subject(this.CreateRandomValue()); mail.textBody(this.CreateRandomValue()); kidozen.SendEmail(mail, new ServiceResponseListener() { @Override public void onError(int statusCode, String response) { fail(); } @Override public void onSuccess(int statusCode, String response) { assertEquals(HttpStatus.SC_CREATED, statusCode); lcd.countDown(); } }); assertTrue(lcd.await(TEST_TIMEOUT_IN_MINUTES, TimeUnit.SECONDS)); } @Test public void ShouldSendMailSync() throws Exception, SynchronousException { Mail mail = new Mail(); mail.to(AppSettings.KZ_EMAIL_TO); mail.from(AppSettings.KZ_EMAIL_FROM); mail.subject(this.CreateRandomValue()); mail.textBody(this.CreateRandomValue()); kidozen.SendEmail(mail); assertTrue(true); } // private ServiceEventListener sendCallback(final CountDownLatch signal) { return new ServiceEventListener() { @Override public void onFinish(ServiceEvent e) { assertThat(e.StatusCode, equalTo( HttpStatus.SC_CREATED)); signal.countDown(); } }; } private ServiceEventListener kidoInitCallback(final CountDownLatch signal) { return new ServiceEventListener() { @Override public void onFinish(ServiceEvent e) { assertThat(e.StatusCode, equalTo( HttpStatus.SC_OK)); signal.countDown(); } }; } private ServiceEventListener kidoAuthCallback(final CountDownLatch signal) { return new ServiceEventListener() { @Override public void onFinish(ServiceEvent e) { assertThat(e.StatusCode, equalTo( HttpStatus.SC_OK)); signal.countDown(); } }; } private String CreateRandomValue() { return AppSettings.CreateRandomValue(); } }