/
EmailSampleAppApplicationTests.java
123 lines (95 loc) · 5.31 KB
/
EmailSampleAppApplicationTests.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.fortytwotalent.emailsampleapp;
import com.fortytwotalent.emailsampleapp.email.EmailService;
import com.icegreen.greenmail.junit5.GreenMailExtension;
import com.icegreen.greenmail.util.GreenMailUtil;
import com.icegreen.greenmail.util.ServerSetupTest;
import org.jsoup.Jsoup;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.test.context.ActiveProfiles;
import javax.mail.BodyPart;
import javax.mail.Part;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
@ActiveProfiles("email")
class EmailSampleAppApplicationTests {
private static final String FROM = "hello@42talents.com";
private static final String TO = "patrick.baumgartner@42talents.com";
private static final String SUBJECT = "Subject";
private static final String CONTENT = "Content";
private static final String FILE = "classpath:SpringBoot.png";
@RegisterExtension
static GreenMailExtension greenMail = new GreenMailExtension(ServerSetupTest.SMTP);
@Autowired
private EmailService emailService;
@Test
public void sendEmail() throws Exception {
emailService.sendEmail(TO, FROM, SUBJECT, CONTENT);
MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
assertThat(receivedMessages.length).isEqualTo(1);
// Check Message
MimeMessage receivedMessage = receivedMessages[0];
assertThat(receivedMessage.getAllRecipients()[0].toString()).isEqualTo(TO);
assertThat(receivedMessage.getFrom()[0].toString()).isEqualTo(FROM);
assertThat(receivedMessage.getSubject()).isEqualTo(SUBJECT);
assertThat(receivedMessage.getContent().toString()).contains(CONTENT);
// Or
assertThat(CONTENT).isEqualTo(GreenMailUtil.getBody(greenMail.getReceivedMessages()[0]));
}
@Test
public void sendEmailWithAttachments() throws Exception {
emailService.sendEmailWithAttachment(TO, FROM, SUBJECT, CONTENT, FILE);
MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
assertThat(receivedMessages.length).isEqualTo(1);
// Check Message
MimeMessage receivedMessage = receivedMessages[0];
assertThat(receivedMessage.getAllRecipients()[0].toString()).isEqualTo(TO);
assertThat(receivedMessage.getFrom()[0].toString()).isEqualTo(FROM);
assertThat(receivedMessage.getSubject()).isEqualTo(SUBJECT);
assertThat(((MimeMultipart) receivedMessage.getContent()).getCount()).isEqualTo(2);
BodyPart body = ((MimeMultipart) receivedMessage.getContent()).getBodyPart(0);
assertThat(body.getContentType()).contains("multipart/related");
// Check Text Body
BodyPart message = ((MimeMultipart) body.getContent()).getBodyPart(0);
assertThat(message.getContentType()).contains("text/plain");
assertThat(((MimeMultipart) body.getContent()).getBodyPart(0).getContent().toString()).contains(CONTENT);
// Check Attached Image
BodyPart attachment = ((MimeMultipart) receivedMessage.getContent()).getBodyPart(1);
assertThat(attachment.getContentType()).contains("image/png; name=SpringBoot.png");
assertThat(attachment.getDisposition()).contains(Part.ATTACHMENT);
Resource resource = new DefaultResourceLoader().getResource(FILE);
assertThat(attachment.getInputStream()).hasSameContentAs(resource.getInputStream());
}
@Test
public void sendHtmlEmailWithAttachments() throws Exception {
emailService.sendHtmlEmailWithInlineImage(TO, FROM, SUBJECT, Locale.ENGLISH, FILE);
MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
assertThat(receivedMessages.length).isEqualTo(1);
// Check Message
MimeMessage receivedMessage = receivedMessages[0];
assertThat(receivedMessage.getAllRecipients()[0].toString()).isEqualTo(TO);
assertThat(receivedMessage.getFrom()[0].toString()).isEqualTo(FROM);
assertThat(receivedMessage.getSubject()).isEqualTo(SUBJECT);
assertThat(((MimeMultipart) receivedMessage.getContent()).getCount()).isEqualTo(1);
BodyPart body = ((MimeMultipart) receivedMessage.getContent()).getBodyPart(0);
assertThat(body.getContentType()).contains("multipart/related");
// Check Text Body
BodyPart message = ((MimeMultipart) body.getContent()).getBodyPart(0);
assertThat(message.getContentType()).contains("text/html");
String htmlMessage = message.getContent().toString();
assertThat(Jsoup.parse(htmlMessage).text()).contains("Hi, " + TO);
// Check Inlined Image
BodyPart attachment = ((MimeMultipart) body.getContent()).getBodyPart(1);
assertThat(attachment.getContentType()).contains("image/png");
assertThat(attachment.getDisposition()).contains(Part.INLINE);
Resource resource = new DefaultResourceLoader().getResource(FILE);
assertThat(attachment.getInputStream()).hasSameContentAs(resource.getInputStream());
}
}