Skip to content

Commit 979d9b8

Browse files
committed
Add edge case tests
1 parent d704396 commit 979d9b8

File tree

1 file changed

+49
-3
lines changed

1 file changed

+49
-3
lines changed

apps/opik-backend/src/test/java/com/comet/opik/api/resources/v1/events/OnlineScoringEngineTest.java

+49-3
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@
2424
import org.junit.jupiter.api.DisplayName;
2525
import org.junit.jupiter.api.Test;
2626
import org.junit.jupiter.api.TestInstance;
27+
import org.junit.jupiter.api.extension.ExtendWith;
2728
import org.junit.jupiter.params.ParameterizedTest;
2829
import org.junit.jupiter.params.provider.Arguments;
2930
import org.junit.jupiter.params.provider.MethodSource;
3031
import org.mockito.Mock;
3132
import org.mockito.Mockito;
32-
import org.mockito.MockitoAnnotations;
33+
import org.mockito.junit.jupiter.MockitoExtension;
3334
import uk.co.jemos.podam.api.PodamFactory;
3435

3536
import java.math.BigDecimal;
@@ -42,6 +43,7 @@
4243
@Slf4j
4344
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
4445
@DisplayName("LlmAsJudge Message Render")
46+
@ExtendWith(MockitoExtension.class)
4547
class OnlineScoringEngineTest {
4648

4749
@Mock
@@ -99,14 +101,37 @@ class OnlineScoringEngineTest {
99101
}
100102
""".formatted(outputStr).trim();
101103

104+
String edgeCaseTemplate = "Summary: {{summary}}\\nInstruction: {{ instruction }}\\n\\n";
105+
String testEvaluatorEdgeCase = """
106+
{
107+
"model": { "name": "gpt-4o", "temperature": 0.3 },
108+
"messages": [
109+
{ "role": "USER", "content": "%s" },
110+
{ "role": "SYSTEM", "content": "You're a helpful AI, be cordial." }
111+
],
112+
"variables": {
113+
"summary": "input.questions.question1",
114+
"instruction": "output.output",
115+
"nonUsed": "input.questions.question2",
116+
"toFail1": "metadata.nonexistent.path"
117+
},
118+
"schema": [
119+
{ "name": "Relevance", "type": "INTEGER", "description": "Relevance of the summary" },
120+
{ "name": "Conciseness", "type": "DOUBLE", "description": "Conciseness of the summary" },
121+
{ "name": "Technical Accuracy", "type": "BOOLEAN", "description": "Technical accuracy of the summary" }
122+
]
123+
}
124+
"""
125+
.formatted(edgeCaseTemplate).trim();
126+
127+
private ObjectMapper mapper = new ObjectMapper();
128+
102129
@BeforeEach
103130
void setUp() throws JsonProcessingException {
104-
MockitoAnnotations.openMocks(this);
105131
Mockito.doNothing().when(eventBus).register(Mockito.any());
106132
onlineScoringEventListener = new OnlineScoringEventListener(eventBus, ruleEvaluatorService,
107133
aiProxyService, feedbackScoreService);
108134

109-
var mapper = new ObjectMapper();
110135
evaluatorCode = mapper.readValue(testEvaluator, AutomationRuleEvaluatorLlmAsJudge.LlmAsJudgeCode.class);
111136
trace = Trace.builder().input(mapper.readTree(input)).output(mapper.readTree(output)).build();
112137
}
@@ -239,4 +264,25 @@ void testParseResponseIntoFeedbacks(String aiMessage, Integer expectedResults) {
239264

240265
}
241266
}
267+
268+
@Test
269+
@DisplayName("render a message template with edge cases")
270+
void testRenderEdgeCaseTemplate() throws JsonProcessingException {
271+
272+
var evaluatorEdgeCase = mapper.readValue(testEvaluatorEdgeCase,
273+
AutomationRuleEvaluatorLlmAsJudge.LlmAsJudgeCode.class);
274+
275+
var renderedMessages = OnlineScoringEngine.renderMessages(evaluatorEdgeCase.messages(),
276+
evaluatorEdgeCase.variables(), trace);
277+
278+
assertThat(renderedMessages).hasSize(2);
279+
280+
var userMessage = renderedMessages.get(0);
281+
assertThat(userMessage.getClass()).isEqualTo(UserMessage.class);
282+
assertThat(((UserMessage) userMessage).singleText()).contains(summaryStr);
283+
assertThat(((UserMessage) userMessage).singleText()).contains(outputStr);
284+
285+
var systemMessage = renderedMessages.get(1);
286+
assertThat(systemMessage.getClass()).isEqualTo(SystemMessage.class);
287+
}
242288
}

0 commit comments

Comments
 (0)