From a4fb543b7f9fbd65045f1a04a963ca83ab5532ad Mon Sep 17 00:00:00 2001 From: Gabriel Sancho Date: Thu, 26 Mar 2026 18:45:31 -0300 Subject: [PATCH] =?UTF-8?q?test(backend):=20add=20failing=20tests=20for=20?= =?UTF-8?q?step=205=20=E2=80=94=20PromptBuilderService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/PromptBuilderServiceTest.kt | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 backend/src/test/kotlin/com/condado/newsletter/service/PromptBuilderServiceTest.kt 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() + } +}