diff --git a/src/test/java/ca/mgamble/postman/api/PostmanMessageBuilderTest.java b/src/test/java/ca/mgamble/postman/api/PostmanMessageBuilderTest.java new file mode 100644 index 0000000..cb4c52e --- /dev/null +++ b/src/test/java/ca/mgamble/postman/api/PostmanMessageBuilderTest.java @@ -0,0 +1,33 @@ +package ca.mgamble.postman.api.message; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class PostmanMessageBuilderTest { + + @Test + void builderTest() { + PostmanMessage message = new PostmanMessageBuilder() + .from("no-reply@my-domain.com") + .to("email@gmail.com") + .to("email2@gmail.com") + .cc("cc@gmail.com") + .withSubject("Testing with attachments") + .withPlainBody("Please view this email in a modern email client!") + .withHtmlBody("

html body

Please check your attachments!

") + .addAttachment(new Attachment("test-csv.csv", "application/octet-stream", "base64String")) + .withTag("tag") + .build(); + + assertEquals("no-reply@my-domain.com", message.getFrom()); + assertEquals(Arrays.asList("email@gmail.com", "email2@gmail.com"), message.getTo()); + assertEquals(new ArrayList<>(), message.getBcc()); + assertEquals(Collections.singletonList("cc@gmail.com"), message.getCc()); + assertEquals("Testing with attachments", message.getSubject()); + } +} diff --git a/src/test/java/ca/mgamble/postman/api/PostmanRawServiceTest.java b/src/test/java/ca/mgamble/postman/api/PostmanRawServiceTest.java new file mode 100644 index 0000000..c0177ac --- /dev/null +++ b/src/test/java/ca/mgamble/postman/api/PostmanRawServiceTest.java @@ -0,0 +1,63 @@ +package ca.mgamble.postman.api; + +import ca.mgamble.postman.api.message.Attachment; +import ca.mgamble.postman.api.message.EmbeddedImage; +import ca.mgamble.postman.api.message.PostmanMessage; +import ca.mgamble.postman.api.message.PostmanMessageBuilder; +import ca.mgamble.postman.api.response.OperationStatus; +import ca.mgamble.postman.api.response.PostmanApiResponse; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class PostmanRawServiceTest { + + public static final String TO_ADRESS = "email@test.com"; + public static final String POSTMAN_URL = "https://postman.prmail.vn"; + public static final String POSTMAN_API_KEY = "API_KEY"; + public static final String FROM_ADRESS = "no-reply@my-domain.com"; + + private PostmanService postmanService; + + @BeforeEach + void setUp() { + postmanService = new PostmanService(POSTMAN_URL, POSTMAN_API_KEY); + } + + @Disabled("Only used to test sending email via API Postman, not to be run automatically") + @Test + public void sendMailTest_withEmbeddedImage_withAttachment_shouldSendRawMessage() throws Exception { + // GIVEN + byte[] googleLogo = IOUtils.toByteArray(Objects.requireNonNull(this.getClass().getClassLoader().getResourceAsStream("google.png"))); + byte[] csvFile = IOUtils.toByteArray(Objects.requireNonNull(this.getClass().getClassLoader().getResourceAsStream("test-csv.csv"))); + PostmanMessage message = new PostmanMessageBuilder() + .from(FROM_ADRESS) + .to(TO_ADRESS) + .withSubject("Postman Java Google") + .withPlainBody("Please view this email in a modern email client!") + .withHtmlBody(getEmailBody()) + .addEmbeddedImage(new EmbeddedImage("google", "image/png", googleLogo)) + .addAttachment(new Attachment("test-csv.csv", "application/octet-stream", csvFile)) + .withTag("tag_name") + .build(); + // WHEN + PostmanApiResponse postmanApiResponse = postmanService.sendMessage(message); + // THEN + assertNotNull(postmanApiResponse); + assertEquals(OperationStatus.SUCCESS, postmanApiResponse.getStatus()); + } + + public String getEmailBody() throws IOException { + File file = new File(this.getClass().getClassLoader().getResource("email.html").getFile()); + return new String(Files.readAllBytes(file.toPath())); + } +} diff --git a/src/test/java/ca/mgamble/postman/api/PostmanServiceTest.java b/src/test/java/ca/mgamble/postman/api/PostmanServiceTest.java new file mode 100644 index 0000000..60fc091 --- /dev/null +++ b/src/test/java/ca/mgamble/postman/api/PostmanServiceTest.java @@ -0,0 +1,79 @@ +package ca.mgamble.postman.api; + +import ca.mgamble.postman.api.message.Attachment; +import ca.mgamble.postman.api.message.PostmanMessage; +import ca.mgamble.postman.api.message.PostmanMessageBuilder; +import ca.mgamble.postman.api.response.OperationStatus; +import ca.mgamble.postman.api.response.PostmanApiResponse; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Base64; +import java.util.Objects; + +import static ca.mgamble.postman.api.PostmanRawServiceTest.FROM_ADRESS; +import static ca.mgamble.postman.api.PostmanRawServiceTest.POSTMAN_API_KEY; +import static ca.mgamble.postman.api.PostmanRawServiceTest.POSTMAN_URL; +import static ca.mgamble.postman.api.PostmanRawServiceTest.TO_ADRESS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class PostmanServiceTest { + + private PostmanService postmanService; + + @BeforeEach + void setUp() { + postmanService = new PostmanService(POSTMAN_URL, POSTMAN_API_KEY); + } + + @Disabled("Only used to test sending email via API Postman, not to be run automatically") + @Test + public void sendMailTest_withAttachments() throws Exception { + // GIVEN + PostmanMessage message = buildPostmanMessageWithAttachments(TO_ADRESS); + // WHEN + PostmanApiResponse postmanApiResponse = postmanService.sendMessage(message); + // THEN + assertNotNull(postmanApiResponse); + assertEquals(OperationStatus.SUCCESS, postmanApiResponse.getStatus()); + } + + @Test + public void onSendMail_withBadPostmanServiceUrl_shouldThrowException() throws Exception { + // GIVEN + PostmanMessage message = buildPostmanMessageWithAttachments("test@email.com"); + // WHEN + Exception exception = assertThrows(Exception.class, () -> postmanService.sendMessage(message)); + // THEN + assertEquals("Could not send message, server responded with 404", exception.getMessage()); + } + + private PostmanMessage buildPostmanMessageWithAttachments(String to) throws IOException { + PostmanMessage message = new PostmanMessageBuilder() + .from(FROM_ADRESS) + .to(to) + .withSubject("Testing with attachments") + .withPlainBody("Please view this email in a modern email client!") + .withHtmlBody("

html body

Please check your attachments!

") + .withTag("tag_name") + .build(); + + try (InputStream inputStream = Objects.requireNonNull(this.getClass().getClassLoader().getResourceAsStream("test-csv.csv"))) { + byte[] tblBordByte = IOUtils.toByteArray(inputStream); + message.addAttachment(new Attachment("test-csv.csv", "application/octet-stream", new String(Base64.getEncoder().encode(tblBordByte)))); + } + + try (InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("test-text.txt")) { + byte[] tblBordByteTxt = IOUtils.toByteArray(Objects.requireNonNull(inputStream)); + message.addAttachment(new Attachment("test-text.txt", "text/plain", new String(Base64.getEncoder().encode(tblBordByteTxt)))); + } + + return message; + } +}