130 lines
5.7 KiB
Java
130 lines
5.7 KiB
Java
|
|
package com.example.mapper.conversation;
|
|
|
|
import com.example.dto.dialogflow.base.DetectIntentResponseDTO;
|
|
import com.example.dto.dialogflow.conversation.QueryResultDTO;
|
|
import com.google.cloud.dialogflow.cx.v3.DetectIntentResponse;
|
|
import com.google.cloud.dialogflow.cx.v3.QueryResult;
|
|
import com.google.cloud.dialogflow.cx.v3.ResponseMessage;
|
|
import com.google.protobuf.Struct;
|
|
import com.google.protobuf.Value;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
import org.mockito.InjectMocks;
|
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.Collections;
|
|
import java.util.Map;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
|
@ExtendWith(MockitoExtension.class)
|
|
class DialogflowResponseMapperTest {
|
|
|
|
@InjectMocks
|
|
private DialogflowResponseMapper dialogflowResponseMapper;
|
|
|
|
@Test
|
|
void mapFromDialogflowResponse_shouldMapCorrectly() {
|
|
// Given
|
|
ResponseMessage.Text text1 = ResponseMessage.Text.newBuilder()
|
|
.addAllText(Collections.singletonList("Hello")).build();
|
|
ResponseMessage message1 = ResponseMessage.newBuilder().setText(text1).build();
|
|
ResponseMessage.Text text2 = ResponseMessage.Text.newBuilder()
|
|
.addAllText(Collections.singletonList("World")).build();
|
|
ResponseMessage message2 = ResponseMessage.newBuilder().setText(text2).build();
|
|
|
|
Struct params = Struct.newBuilder()
|
|
.putFields("param1", Value.newBuilder().setStringValue("value1").build())
|
|
.putFields("param2", Value.newBuilder().setNumberValue(123).build())
|
|
.build();
|
|
|
|
QueryResult queryResult = QueryResult.newBuilder()
|
|
.addAllResponseMessages(Arrays.asList(message1, message2))
|
|
.setParameters(params)
|
|
.build();
|
|
|
|
DetectIntentResponse detectIntentResponse = DetectIntentResponse.newBuilder()
|
|
.setResponseId("test-response-id")
|
|
.setQueryResult(queryResult)
|
|
.build();
|
|
|
|
// When
|
|
DetectIntentResponseDTO responseDTO = dialogflowResponseMapper
|
|
.mapFromDialogflowResponse(detectIntentResponse, "test-session-id");
|
|
|
|
// Then
|
|
assertNotNull(responseDTO);
|
|
assertEquals("test-response-id", responseDTO.responseId());
|
|
|
|
QueryResultDTO queryResultDTO = responseDTO.queryResult();
|
|
assertNotNull(queryResultDTO);
|
|
assertEquals("Hello World", queryResultDTO.responseText());
|
|
|
|
Map<String, Object> parameters = queryResultDTO.parameters();
|
|
assertNotNull(parameters);
|
|
assertEquals(2, parameters.size());
|
|
assertEquals("value1", parameters.get("param1"));
|
|
assertEquals(123.0, parameters.get("param2"));
|
|
}
|
|
|
|
@Test
|
|
void mapFromDialogflowResponse_withNoMessages_shouldReturnEmptyFulfillmentText() {
|
|
// Given
|
|
QueryResult queryResult = QueryResult.newBuilder()
|
|
.build();
|
|
|
|
DetectIntentResponse detectIntentResponse = DetectIntentResponse.newBuilder()
|
|
.setResponseId("test-response-id")
|
|
.setQueryResult(queryResult)
|
|
.build();
|
|
|
|
// When
|
|
DetectIntentResponseDTO responseDTO = dialogflowResponseMapper
|
|
.mapFromDialogflowResponse(detectIntentResponse, "test-session-id");
|
|
|
|
// Then
|
|
assertNotNull(responseDTO);
|
|
assertEquals("test-response-id", responseDTO.responseId());
|
|
|
|
QueryResultDTO queryResultDTO = responseDTO.queryResult();
|
|
assertNotNull(queryResultDTO);
|
|
assertEquals("", queryResultDTO.responseText());
|
|
}
|
|
|
|
@Test
|
|
void mapFromDialogflowResponse_withNoParameters_shouldReturnEmptyMap() {
|
|
// Given
|
|
ResponseMessage.Text text = ResponseMessage.Text.newBuilder()
|
|
.addAllText(Collections.singletonList("Hello")).build();
|
|
ResponseMessage message = ResponseMessage.newBuilder().setText(text).build();
|
|
|
|
QueryResult queryResult = QueryResult.newBuilder()
|
|
.addResponseMessages(message)
|
|
.build();
|
|
|
|
DetectIntentResponse detectIntentResponse = DetectIntentResponse.newBuilder()
|
|
.setResponseId("test-response-id")
|
|
.setQueryResult(queryResult)
|
|
.build();
|
|
|
|
// When
|
|
DetectIntentResponseDTO responseDTO = dialogflowResponseMapper
|
|
.mapFromDialogflowResponse(detectIntentResponse, "test-session-id");
|
|
|
|
// Then
|
|
assertNotNull(responseDTO);
|
|
assertEquals("test-response-id", responseDTO.responseId());
|
|
|
|
QueryResultDTO queryResultDTO = responseDTO.queryResult();
|
|
assertNotNull(queryResultDTO);
|
|
assertEquals("Hello", queryResultDTO.responseText());
|
|
|
|
Map<String, Object> parameters = queryResultDTO.parameters();
|
|
assertNotNull(parameters);
|
|
assertEquals(0, parameters.size());
|
|
}
|
|
}
|