Initial Python rewrite
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
|
||||
package com.example.mapper.conversation;
|
||||
|
||||
import com.example.dto.dialogflow.base.DetectIntentRequestDTO;
|
||||
import com.example.dto.dialogflow.conversation.QueryInputDTO;
|
||||
import com.example.dto.dialogflow.conversation.QueryParamsDTO;
|
||||
import com.example.dto.dialogflow.conversation.TextInputDTO;
|
||||
import com.example.dto.dialogflow.notification.EventInputDTO;
|
||||
import com.google.cloud.dialogflow.cx.v3.DetectIntentRequest;
|
||||
import com.google.cloud.dialogflow.cx.v3.QueryInput;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DialogflowRequestMapperTest {
|
||||
|
||||
@InjectMocks
|
||||
private DialogflowRequestMapper dialogflowRequestMapper;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
ReflectionTestUtils.setField(dialogflowRequestMapper, "defaultLanguageCode", "es");
|
||||
}
|
||||
|
||||
@Test
|
||||
void mapToDetectIntentRequestBuilder_withTextInput_shouldMapCorrectly() {
|
||||
// Given
|
||||
TextInputDTO textInputDTO = new TextInputDTO("Hola");
|
||||
QueryInputDTO queryInputDTO = new QueryInputDTO(textInputDTO, null, "es");
|
||||
DetectIntentRequestDTO requestDTO = new DetectIntentRequestDTO(queryInputDTO, null);
|
||||
|
||||
// When
|
||||
DetectIntentRequest.Builder builder = dialogflowRequestMapper.mapToDetectIntentRequestBuilder(requestDTO);
|
||||
DetectIntentRequest request = builder.build();
|
||||
|
||||
// Then
|
||||
assertNotNull(request);
|
||||
assertTrue(request.hasQueryInput());
|
||||
QueryInput queryInput = request.getQueryInput();
|
||||
assertEquals("es", queryInput.getLanguageCode());
|
||||
assertTrue(queryInput.hasText());
|
||||
assertEquals("Hola", queryInput.getText().getText());
|
||||
assertFalse(queryInput.hasEvent());
|
||||
}
|
||||
|
||||
@Test
|
||||
void mapToDetectIntentRequestBuilder_withEventInput_shouldMapCorrectly() {
|
||||
// Given
|
||||
EventInputDTO eventInputDTO = new EventInputDTO("welcome_event");
|
||||
QueryInputDTO queryInputDTO = new QueryInputDTO(null, eventInputDTO, "es");
|
||||
DetectIntentRequestDTO requestDTO = new DetectIntentRequestDTO(queryInputDTO, null);
|
||||
|
||||
// When
|
||||
DetectIntentRequest.Builder builder = dialogflowRequestMapper.mapToDetectIntentRequestBuilder(requestDTO);
|
||||
DetectIntentRequest request = builder.build();
|
||||
|
||||
// Then
|
||||
assertNotNull(request);
|
||||
assertTrue(request.hasQueryInput());
|
||||
QueryInput queryInput = request.getQueryInput();
|
||||
assertEquals("es", queryInput.getLanguageCode());
|
||||
assertTrue(queryInput.hasEvent());
|
||||
assertEquals("welcome_event", queryInput.getEvent().getEvent());
|
||||
assertFalse(queryInput.hasText());
|
||||
}
|
||||
|
||||
@Test
|
||||
void mapToDetectIntentRequestBuilder_withNoInput_shouldThrowException() {
|
||||
// Given
|
||||
QueryInputDTO queryInputDTO = new QueryInputDTO(null, null, "es");
|
||||
DetectIntentRequestDTO requestDTO = new DetectIntentRequestDTO(queryInputDTO, null);
|
||||
|
||||
// When & Then
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
dialogflowRequestMapper.mapToDetectIntentRequestBuilder(requestDTO);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void mapToDetectIntentRequestBuilder_withParameters_shouldMapCorrectly() {
|
||||
// Given
|
||||
TextInputDTO textInputDTO = new TextInputDTO("Hola");
|
||||
QueryInputDTO queryInputDTO = new QueryInputDTO(textInputDTO, null, "es");
|
||||
Map<String, Object> parameters = Collections.singletonMap("param1", "value1");
|
||||
QueryParamsDTO queryParamsDTO = new QueryParamsDTO(parameters);
|
||||
DetectIntentRequestDTO requestDTO = new DetectIntentRequestDTO(queryInputDTO, queryParamsDTO);
|
||||
|
||||
// When
|
||||
DetectIntentRequest.Builder builder = dialogflowRequestMapper.mapToDetectIntentRequestBuilder(requestDTO);
|
||||
DetectIntentRequest request = builder.build();
|
||||
|
||||
// Then
|
||||
assertNotNull(request);
|
||||
assertTrue(request.hasQueryParams());
|
||||
assertTrue(request.getQueryParams().hasParameters());
|
||||
assertEquals("value1", request.getQueryParams().getParameters().getFieldsMap().get("param1").getStringValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
void mapToDetectIntentRequestBuilder_withNullRequestDTO_shouldThrowException() {
|
||||
// When & Then
|
||||
assertThrows(NullPointerException.class, () -> {
|
||||
dialogflowRequestMapper.mapToDetectIntentRequestBuilder(null);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void mapToDetectIntentRequestBuilder_withDefaultLanguageCode_shouldMapCorrectly() {
|
||||
// Given
|
||||
TextInputDTO textInputDTO = new TextInputDTO("Hola");
|
||||
QueryInputDTO queryInputDTO = new QueryInputDTO(textInputDTO, null, null);
|
||||
DetectIntentRequestDTO requestDTO = new DetectIntentRequestDTO(queryInputDTO, null);
|
||||
|
||||
// When
|
||||
DetectIntentRequest.Builder builder = dialogflowRequestMapper.mapToDetectIntentRequestBuilder(requestDTO);
|
||||
DetectIntentRequest request = builder.build();
|
||||
|
||||
// Then
|
||||
assertNotNull(request);
|
||||
assertTrue(request.hasQueryInput());
|
||||
assertEquals("es", request.getQueryInput().getLanguageCode());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user