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() } }