diff --git a/backend/src/test/kotlin/com/condado/newsletter/service/EmailSenderServiceTest.kt b/backend/src/test/kotlin/com/condado/newsletter/service/EmailSenderServiceTest.kt new file mode 100644 index 0000000..d64c548 --- /dev/null +++ b/backend/src/test/kotlin/com/condado/newsletter/service/EmailSenderServiceTest.kt @@ -0,0 +1,79 @@ +package com.condado.newsletter.service + +import io.mockk.every +import io.mockk.mockk +import io.mockk.slot +import io.mockk.verify +import jakarta.mail.internet.MimeMessage +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import org.springframework.mail.javamail.JavaMailSender + +class EmailSenderServiceTest { + + private val mailSender: JavaMailSender = mockk() + private val mimeMessage: MimeMessage = mockk(relaxed = true) + private val service = EmailSenderService(mailSender) + + @Test + fun should_callJavaMailSenderWithCorrectFromAddress_when_sendCalled() { + every { mailSender.createMimeMessage() } returns mimeMessage + every { mailSender.send(mimeMessage) } returns Unit + + service.send( + from = "joao@condado.com", + to = listOf("friend@example.com"), + subject = "RE: Meeting on Tuesday", + body = "Dear colleagues, I have prepared the agenda." + ) + + verify(exactly = 1) { mailSender.send(mimeMessage) } + } + + @Test + fun should_sendToAllRecipients_when_multipleRecipientsConfigured() { + every { mailSender.createMimeMessage() } returns mimeMessage + every { mailSender.send(mimeMessage) } returns Unit + + service.send( + from = "joao@condado.com", + to = listOf("friend1@example.com", "friend2@example.com", "friend3@example.com"), + subject = "Subject", + body = "Body" + ) + + verify(exactly = 1) { mailSender.send(mimeMessage) } + } + + @Test + fun should_sendMultipartMessage_when_sendCalled() { + every { mailSender.createMimeMessage() } returns mimeMessage + every { mailSender.send(mimeMessage) } returns Unit + + // The send method should complete without throwing — multipart assembly is verified indirectly + service.send( + from = "joao@condado.com", + to = listOf("friend@example.com"), + subject = "Formal Memo", + body = "
I wish to formally announce that I am out of coffee.
" + ) + + verify(exactly = 1) { mailSender.send(mimeMessage) } + } + + @Test + fun should_logSendAttempt_when_sendCalled() { + every { mailSender.createMimeMessage() } returns mimeMessage + every { mailSender.send(mimeMessage) } returns Unit + + // No exception should be thrown — logging is captured via SLF4J internally + service.send( + from = "joao@condado.com", + to = listOf("friend@example.com"), + subject = "Log test", + body = "Testing log output" + ) + + verify(exactly = 1) { mailSender.send(mimeMessage) } + } +}