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 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 parameters = queryResultDTO.parameters(); assertNotNull(parameters); assertEquals(0, parameters.size()); } }