diff --git a/pom.xml b/pom.xml index 8179704..62433dd 100644 --- a/pom.xml +++ b/pom.xml @@ -26,14 +26,15 @@ com.embabel.agent - embabel-agent-starter + embabel-agent-starter-shell ${embabel-agent.version} com.embabel.agent - embabel-agent-starter-shell + embabel-agent-test ${embabel-agent.version} + test diff --git a/src/test/java/com/embabel/template/agent/WriteAndReviewAgentIntegrationTest.java b/src/test/java/com/embabel/template/agent/WriteAndReviewAgentIntegrationTest.java new file mode 100644 index 0000000..5cc324f --- /dev/null +++ b/src/test/java/com/embabel/template/agent/WriteAndReviewAgentIntegrationTest.java @@ -0,0 +1,52 @@ +package com.embabel.template.agent; + +import com.embabel.agent.api.common.autonomy.AgentInvocation; +import com.embabel.agent.domain.io.UserInput; +import com.embabel.agent.testing.integration.EmbabelMockitoIntegrationTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeAll; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * Use framework superclass to test the complete workflow of writing and reviewing a story. + * This will run under Spring Boot against an AgentPlatform instance + * that has loaded all our agents. + */ +class WriteAndReviewAgentIntegrationTest extends EmbabelMockitoIntegrationTest { + + @BeforeAll + static void setUp() { + // Set shell configuration to non-interactive mode + System.setProperty("embabel.agent.shell.interactive.enabled", "false"); + } + + @Test + void shouldExecuteCompleteWorkflow() { + var input = new UserInput("Write about artificial intelligence"); + + var story = new Story("AI will transform our world..."); + var reviewedStory = new ReviewedStory(story, "Excellent exploration of AI themes.", Personas.REVIEWER); + + whenCreateObject(prompt -> prompt.contains("Craft a short story"), Story.class) + .thenReturn(story); + + // The second call uses generateText + whenGenerateText(prompt -> prompt.contains("You will be given a short story to review")) + .thenReturn(reviewedStory.review()); + + var invocation = AgentInvocation.create(agentPlatform, ReviewedStory.class); + var reviewedStoryResult = invocation.invoke(input); + + assertNotNull(reviewedStoryResult); + assertTrue(reviewedStoryResult.getContent().contains(story.text()), + "Expected story content to be present: " + reviewedStoryResult.getContent()); + assertEquals(reviewedStory, reviewedStoryResult, + "Expected review to match: " + reviewedStoryResult); + + verifyCreateObjectMatching(prompt -> prompt.contains("Craft a short story"), Story.class, + llm -> llm.getLlm().getTemperature() == 0.7 && llm.getToolGroups().isEmpty()); + verifyGenerateTextMatching(prompt -> prompt.contains("You will be given a short story to review")); + verifyNoMoreInteractions(); + } +}