Skip to content

Commit 5587673

Browse files
Email delivery Unit Tests (#72)
* Email Delivery Unit Test --------- Signed-off-by: Anders Swanson <anders.swanson@oracle.com>
1 parent b6be759 commit 5587673

File tree

6 files changed

+121
-10
lines changed

6 files changed

+121
-10
lines changed

docs/src/main/asciidoc/email.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
[#email-delivery]
55
== Email Delivery
66

7-
https://docs.oracle.com/en-us/iaas/Content/Email/home.htm[Email Delivery] provides an implementation of the Spring Mail interface, providing MailSender and JavaMailSender beans to send email using OCI Email Delivery.
7+
https://docs.oracle.com/en-us/iaas/Content/Email/home.htm[Email Delivery] module provides an implementation of the Spring Mail interface, implementing MailSender and JavaMailSender interfaces to send email using OCI Email Delivery.
88

99
Maven coordinates:
1010

@@ -74,7 +74,7 @@ public class EmailService {
7474

7575
=== Using JavaMailSender
7676

77-
For more complex emails, such as those with attachments, use the JavaMailSender interface. The followign example shows how to send an email with the JavaMailSender API.
77+
For more complex emails, such as those with attachments, use the JavaMailSender interface. The following example shows how to send an email with the JavaMailSender API.
7878

7979
[source,java]
8080
----

spring-cloud-oci-email/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,5 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.or
6767
<groupId>org.eclipse.angus</groupId>
6868
<artifactId>jakarta.mail</artifactId>
6969
</dependency>
70-
71-
<dependency>
72-
<groupId>org.projectlombok</groupId>
73-
<artifactId>lombok</artifactId>
74-
<scope>provided</scope>
75-
</dependency>
7670
</dependencies>
7771
</project>

spring-cloud-oci-email/src/main/java/com/oracle/cloud/spring/email/EmailDeliveryMailSender.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414
import jakarta.mail.internet.AddressException;
1515
import jakarta.mail.internet.InternetAddress;
1616
import jakarta.mail.internet.MimeMessage;
17-
import lombok.Builder;
1817
import org.springframework.mail.MailException;
1918
import org.springframework.mail.MailPreparationException;
2019
import org.springframework.mail.MailSendException;
2120
import org.springframework.mail.MailSender;
2221
import org.springframework.mail.SimpleMailMessage;
2322

24-
@Builder
2523
public class EmailDeliveryMailSender implements MailSender {
2624
protected final Session session;
2725
private final String smtpHost;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.oracle.cloud.spring.email;
2+
3+
import jakarta.mail.Message;
4+
import jakarta.mail.MessagingException;
5+
import jakarta.mail.internet.MimeMessage;
6+
import org.junit.jupiter.api.Test;
7+
8+
import static org.mockito.ArgumentMatchers.any;
9+
import static org.mockito.Mockito.times;
10+
import static org.mockito.Mockito.verify;
11+
12+
public class EmailDeliveryJavaMailSenderTest extends EmailTest {
13+
@Test
14+
void sendMessage() throws MessagingException {
15+
EmailDeliveryJavaMailSender sender = getSender();
16+
sender.send(getMimeMessage(sender));
17+
verify(transport, times(1)).sendMessage(any(), any());
18+
}
19+
20+
@Test
21+
void sendMessages() throws MessagingException {
22+
EmailDeliveryJavaMailSender sender = getSender();
23+
sender.send(getMimeMessage(sender), getMimeMessage(sender), getMimeMessage(sender));
24+
verify(transport, times(3)).sendMessage(any(), any());
25+
}
26+
27+
private EmailDeliveryJavaMailSender getSender() {
28+
return new EmailDeliveryJavaMailSender(session, "x", "y", "z");
29+
}
30+
31+
private MimeMessage getMimeMessage(EmailDeliveryJavaMailSender sender) throws MessagingException {
32+
MimeMessage message = sender.createMimeMessage();
33+
message.setFrom(testEmail);
34+
message.setRecipients(Message.RecipientType.TO, testEmail2);
35+
message.setText(testBody);
36+
message.setSubject(testSubject);
37+
return message;
38+
}
39+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.oracle.cloud.spring.email;
2+
3+
import jakarta.mail.MessagingException;
4+
import org.junit.jupiter.api.Test;
5+
import org.springframework.mail.SimpleMailMessage;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
9+
import static org.mockito.ArgumentMatchers.any;
10+
import static org.mockito.Mockito.times;
11+
import static org.mockito.Mockito.verify;
12+
13+
public class EmailDeliveryMailSenderTest extends EmailTest {
14+
@Test
15+
void sendNoFrom() throws MessagingException {
16+
SimpleMailMessage message = getMessage();
17+
message.setFrom(null);
18+
assertThatExceptionOfType(NullPointerException.class)
19+
.isThrownBy(() -> getSender().send(message))
20+
.withMessage("From address is null");
21+
verify(transport, times(0)).sendMessage(any(), any());
22+
}
23+
24+
@Test
25+
void sendMessage() throws MessagingException {
26+
getSender().send(getMessage());
27+
verify(transport, times(1)).sendMessage(any(), any());
28+
}
29+
30+
@Test
31+
void sendMessages() throws MessagingException {
32+
getSender().send(getMessage(), getMessage(), getMessage());
33+
verify(transport, times(3)).sendMessage(any(), any());
34+
}
35+
36+
private EmailDeliveryMailSender getSender() {
37+
return new EmailDeliveryMailSender(session, "x", "y", "z");
38+
}
39+
40+
private SimpleMailMessage getMessage() {
41+
SimpleMailMessage message = new SimpleMailMessage();
42+
message.setFrom(testEmail);
43+
message.setTo(testEmail);
44+
message.setCc(testEmail2);
45+
message.setBcc(testEmail3);
46+
message.setSubject(testSubject);
47+
message.setText(testBody);
48+
message.setReplyTo(testEmail2);
49+
return message;
50+
}
51+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.oracle.cloud.spring.email;
2+
3+
import java.util.Properties;
4+
5+
import jakarta.mail.NoSuchProviderException;
6+
import jakarta.mail.Session;
7+
import jakarta.mail.Transport;
8+
import org.junit.jupiter.api.BeforeEach;
9+
10+
import static org.mockito.Mockito.mock;
11+
import static org.mockito.Mockito.when;
12+
13+
public class EmailTest {
14+
final String testEmail = "test@test.xyz";
15+
final String testEmail2 = "test2@test.xyz";
16+
final String testEmail3 = "test3@test.xyz";
17+
final String testSubject = "test subject";
18+
final String testBody = "test body";
19+
Session session;
20+
Transport transport;
21+
22+
@BeforeEach
23+
void setUpEach() throws NoSuchProviderException {
24+
session = mock(Session.class);
25+
transport = mock(Transport.class);
26+
when(session.getTransport()).thenReturn(transport);
27+
when(session.getProperties()).thenReturn(new Properties());
28+
}
29+
}

0 commit comments

Comments
 (0)