test(backend): add failing tests for step 7 — EmailSenderService

This commit is contained in:
2026-03-26 18:50:04 -03:00
parent 5307856e55
commit 8c742ce3a4

View File

@@ -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 = "<p>I wish to formally announce that I am out of coffee.</p>"
)
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) }
}
}