Skip to content

Commit 8cdac86

Browse files
committed
chore: aggiungti system test per esercizio 0
1 parent 98bc4d2 commit 8cdac86

File tree

5 files changed

+91
-29
lines changed

5 files changed

+91
-29
lines changed

00_problems/pom.xml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,21 @@
1818
<artifactId>spring-boot-starter-web</artifactId>
1919
</dependency>
2020
<dependency>
21-
<groupId>jakarta.mail</groupId>
22-
<artifactId>jakarta.mail-api</artifactId>
23-
<version>2.1.3</version>
21+
<groupId>com.sun.mail</groupId>
22+
<artifactId>jakarta.mail</artifactId>
23+
<version>2.0.1</version>
24+
</dependency>
25+
26+
<dependency>
27+
<groupId>org.springframework.boot</groupId>
28+
<artifactId>spring-boot-starter-test</artifactId>
29+
<scope>test</scope>
30+
</dependency>
31+
<dependency>
32+
<groupId>com.icegreen</groupId>
33+
<artifactId>greenmail</artifactId>
34+
<version>2.0.1</version>
35+
<scope>test</scope>
2436
</dependency>
2537
</dependencies>
2638

00_problems/src/main/java/io/doubleloop/problems/BirthdayController.java

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.doubleloop.problems;
22

33
import jakarta.mail.MessagingException;
4-
import org.springframework.beans.factory.annotation.Value;
54
import org.springframework.format.annotation.DateTimeFormat;
65
import org.springframework.http.ResponseEntity;
76
import org.springframework.web.bind.annotation.PostMapping;
@@ -16,29 +15,15 @@
1615
public class BirthdayController {
1716

1817
private final BirthdayService service;
19-
private final String filePath;
20-
private final String smtpHost;
21-
private final int smtpPort;
22-
23-
public BirthdayController(BirthdayService service,
24-
@Value("${app.employee.file}") String filePath,
25-
@Value("${app.smtp.host}") String smtpHost,
26-
@Value("${app.smtp.port}") int smtpPort) {
18+
19+
public BirthdayController(BirthdayService service) {
2720
this.service = service;
28-
this.filePath = filePath;
29-
this.smtpHost = smtpHost;
30-
this.smtpPort = smtpPort;
3121
}
3222

3323
@PostMapping("/sendGreetings")
3424
public ResponseEntity<Void> send(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date) throws MessagingException, IOException {
3525

36-
service.sendGreetings(
37-
filePath,
38-
getValueOrDefault(date),
39-
smtpHost,
40-
smtpPort
41-
);
26+
service.sendGreetings(getValueOrDefault(date));
4227

4328
return ResponseEntity.ok().build();
4429
}

00_problems/src/main/java/io/doubleloop/problems/BirthdayService.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,31 @@
66
import jakarta.mail.Transport;
77
import jakarta.mail.internet.InternetAddress;
88
import jakarta.mail.internet.MimeMessage;
9-
import org.springframework.stereotype.Service;
9+
import org.springframework.beans.factory.annotation.Value;
10+
import org.springframework.stereotype.Component;
1011

1112
import java.io.BufferedReader;
1213
import java.io.FileReader;
1314
import java.io.IOException;
1415
import java.time.LocalDate;
1516
import java.util.Properties;
1617

17-
@Service
18+
@Component
1819
public class BirthdayService {
19-
public void sendGreetings(String filePath, LocalDate today, String smtpHost, int smtpPort) throws IOException, MessagingException {
20+
21+
private final String filePath;
22+
private final String smtpHost;
23+
private final int smtpPort;
24+
25+
public BirthdayService(@Value("${app.employee.file}") String filePath,
26+
@Value("${app.smtp.host}") String smtpHost,
27+
@Value("${app.smtp.port}") int smtpPort) {
28+
this.filePath = filePath;
29+
this.smtpHost = smtpHost;
30+
this.smtpPort = smtpPort;
31+
}
32+
33+
public void sendGreetings(LocalDate today) throws IOException, MessagingException {
2034
BufferedReader in = new BufferedReader(new FileReader(filePath));
2135
String str = "";
2236
str = in.readLine(); // skip header
@@ -27,26 +41,23 @@ public void sendGreetings(String filePath, LocalDate today, String smtpHost, int
2741
String recipient = employee.getEmail();
2842
String body = "Happy Birthday, dear %NAME%".replace("%NAME%", employee.getFirstName());
2943
String subject = "Happy Birthday!";
30-
sendMessage(smtpHost, smtpPort, "[email protected]", subject, body, recipient);
44+
sendMessage("[email protected]", subject, body, recipient);
3145
}
3246
}
3347
}
3448

35-
private void sendMessage(String smtpHost, int smtpPort, String sender, String subject, String body, String recipient) throws MessagingException {
36-
// Create a mail session
49+
private void sendMessage(String sender, String subject, String body, String recipient) throws MessagingException {
3750
Properties props = new Properties();
3851
props.put("mail.smtp.host", smtpHost);
3952
props.put("mail.smtp.port", String.valueOf(smtpPort));
4053
Session session = Session.getInstance(props, null);
4154

42-
// Construct the message
4355
Message msg = new MimeMessage(session);
4456
msg.setFrom(new InternetAddress(sender));
4557
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
4658
msg.setSubject(subject);
4759
msg.setText(body);
4860

49-
// Send the message
5061
Transport.send(msg);
5162
}
5263
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.doubleloop.problems;
2+
3+
import com.icegreen.greenmail.util.GreenMail;
4+
import com.icegreen.greenmail.util.ServerSetup;
5+
import jakarta.mail.Message;
6+
import org.junit.jupiter.api.AfterEach;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.time.LocalDate;
11+
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
14+
class BirthdayServiceTest {
15+
16+
private String filePath;
17+
private String smtpHost = "localhost";
18+
private int smtpPort = 3025;
19+
private GreenMail mailServer;
20+
21+
@BeforeEach
22+
void setUp() {
23+
filePath = getClass()
24+
.getClassLoader()
25+
.getResource("employee_data.txt")
26+
.getPath();
27+
28+
mailServer = new GreenMail(new ServerSetup(smtpPort, null, "smtp"));
29+
mailServer.start();
30+
}
31+
32+
@AfterEach
33+
void tearDown() {
34+
mailServer.stop();
35+
}
36+
37+
@Test
38+
void testSendMessage() throws Exception {
39+
final var emailService = new BirthdayService(filePath, smtpHost, smtpPort);
40+
emailService.sendGreetings(LocalDate.of(2024, 10, 8));
41+
42+
final var receivedMessages = mailServer.getReceivedMessages();
43+
assertEquals(1, receivedMessages.length);
44+
45+
final var receivedMessage = receivedMessages[0];
46+
assertEquals("Happy Birthday!", receivedMessage.getSubject());
47+
assertEquals("Happy Birthday, dear John", receivedMessage.getContent().toString());
48+
assertEquals("[email protected]", receivedMessage.getFrom()[0].toString());
49+
assertEquals("[email protected]", receivedMessage.getRecipients(Message.RecipientType.TO)[0].toString());
50+
}
51+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
last_name, first_name, date_of_birth, email
2+
Doe, John, 1982/10/08, [email protected]
3+
Ann, Mary, 1975/03/11, [email protected]

0 commit comments

Comments
 (0)