test(backend): add failing tests for step 7 — EmailSenderService
This commit is contained in:
@@ -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) }
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user