diff --git a/backend/src/test/kotlin/com/condado/newsletter/service/PromptBuilderServiceTest.kt b/backend/src/test/kotlin/com/condado/newsletter/service/PromptBuilderServiceTest.kt new file mode 100644 index 0000000..6326007 --- /dev/null +++ b/backend/src/test/kotlin/com/condado/newsletter/service/PromptBuilderServiceTest.kt @@ -0,0 +1,75 @@ +package com.condado.newsletter.service + +import com.condado.newsletter.model.EmailContext +import com.condado.newsletter.model.VirtualEntity +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import java.time.LocalDateTime + +class PromptBuilderServiceTest { + + private val service = PromptBuilderService() + + private val entity = VirtualEntity( + name = "Rodrigo Alves", + email = "rodrigo@condado.com", + jobTitle = "Head of Casual Affairs", + personality = "Extremely pedantic but only talks about cats", + scheduleCron = "0 9 * * 1", + contextWindowDays = 3 + ) + + private val emailContext = listOf( + EmailContext( + from = "Maria Santos ", + subject = "Re: The weekly snack situation", + body = "I think we need more chips in the pantry.", + receivedAt = LocalDateTime.now().minusHours(2) + ) + ) + + @Test + fun should_containEntityName_when_buildPromptCalled() { + val prompt = service.buildPrompt(entity, emailContext) + assertThat(prompt).contains("Rodrigo Alves") + } + + @Test + fun should_containEntityJobTitle_when_buildPromptCalled() { + val prompt = service.buildPrompt(entity, emailContext) + assertThat(prompt).contains("Head of Casual Affairs") + } + + @Test + fun should_containEntityPersonality_when_buildPromptCalled() { + val prompt = service.buildPrompt(entity, emailContext) + assertThat(prompt).contains("Extremely pedantic but only talks about cats") + } + + @Test + fun should_containContextWindowDays_when_buildPromptCalled() { + val prompt = service.buildPrompt(entity, emailContext) + assertThat(prompt).contains("3") + } + + @Test + fun should_containEachEmailSenderAndSubject_when_emailContextProvided() { + val prompt = service.buildPrompt(entity, emailContext) + assertThat(prompt).contains("Maria Santos ") + assertThat(prompt).contains("Re: The weekly snack situation") + } + + @Test + fun should_containFormatInstruction_when_buildPromptCalled() { + val prompt = service.buildPrompt(entity, emailContext) + assertThat(prompt).contains("SUBJECT:") + assertThat(prompt).contains("BODY:") + } + + @Test + fun should_returnPromptWithNoEmails_when_emailContextIsEmpty() { + val prompt = service.buildPrompt(entity, emptyList()) + assertThat(prompt).contains("Rodrigo Alves") + assertThat(prompt).isNotEmpty() + } +}