debug和superagent提交的数据保持一致

This commit is contained in:
andy
2026-07-13 17:03:27 +08:00
parent c55090bc2e
commit 9a2812fe74
11 changed files with 191 additions and 86 deletions

View File

@@ -6,6 +6,7 @@ import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.not;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
@@ -16,6 +17,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import cn.nianxx.thhotel.ThHotelApplication;
import cn.nianxx.thhotel.integrations.ai.superagent.common.request.SuperAgentMailDebugRequest;
import cn.nianxx.thhotel.integrations.ai.superagent.common.result.SuperAgentOpenApiResult;
import cn.nianxx.thhotel.integrations.ai.superagent.common.result.SuperAgentOpenApiTraceEvent;
import cn.nianxx.thhotel.integrations.ai.superagent.service.SuperAgentOpenApiClient;
@@ -33,6 +35,7 @@ import java.util.function.Consumer;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
@@ -139,11 +142,18 @@ class DebugEmlSuperAgentControllerTest {
.andExpect(jsonPath("$.html_body_sanitized", containsString("https://oss.example.test/")))
.andExpect(jsonPath("$.html_sanitize_required").value(true))
.andExpect(jsonPath("$.html_render_mode").value("SANITIZED_HTML"))
.andExpect(jsonPath("$.agentbus_like_payload.schema_version").value("debug-eml-upload-v1"))
.andExpect(jsonPath("$.agentbus_like_payload.source.provider").value("DEBUG_EML_UPLOAD"))
.andExpect(jsonPath("$.agentbus_like_payload.source.original_message_id")
.value("debug-controller-message-001@example.test"))
.andExpect(jsonPath("$.agentbus_like_payload.reply_policy.mode").value("debug_only"))
.andExpect(jsonPath("$.agentbus_like_payload.text",
containsString("Please create booking from debug email.")))
.andExpect(jsonPath("$.agentbus_like_payload.body.html", containsString("https://oss.example.test/")))
.andExpect(jsonPath("$.agentbus_like_payload.source.channel").value("EMAIL"))
.andExpect(jsonPath("$.agentbus_like_payload.source.external_message_id",
containsString("debug-eml-run-")))
.andExpect(jsonPath("$.agentbus_like_payload.schema_version").doesNotExist())
.andExpect(jsonPath("$.agentbus_like_payload.source.provider").doesNotExist())
.andExpect(jsonPath("$.agentbus_like_payload.source.original_message_id").doesNotExist())
.andExpect(jsonPath("$.agentbus_like_payload.reply_policy.mode").value("manual"))
.andExpect(jsonPath("$.agentbus_like_payload.reply_policy.final_only").value(true))
.andExpect(jsonPath("$.agentbus_like_payload.debug_context").doesNotExist())
.andExpect(jsonPath("$.superagent_session_id").value("session-debug-001"))
.andExpect(jsonPath("$.superagent_run_id").value("run-debug-001"))
.andExpect(jsonPath("$.superagent_raw_answer", containsString("ai_task_results")))
@@ -153,13 +163,15 @@ class DebugEmlSuperAgentControllerTest {
Long sourceCount = jdbcTemplate.queryForObject("""
SELECT COUNT(*)
FROM platform_source_message_inbox inbox
FROM platform_debug_eml_superagent_run run
JOIN platform_source_message_inbox inbox ON inbox.id = run.source_message_id
JOIN platform_source_message_payload payload ON payload.inbox_id = inbox.id
WHERE inbox.hotel_id = 'HOTEL-TEST'
AND inbox.provider = 'DEBUG_EML_UPLOAD'
AND inbox.channel = 'EMAIL'
AND payload.schema_version = 'debug-eml-upload-v1'
AND payload.payload_json LIKE '%controller-test%'
AND inbox.external_message_id LIKE 'debug-eml-run-%'
AND run.run_label = 'controller-test'
""", Long.class);
org.assertj.core.api.Assertions.assertThat(sourceCount).isEqualTo(1L);
@@ -167,13 +179,35 @@ class DebugEmlSuperAgentControllerTest {
SELECT COUNT(*)
FROM platform_source_message_media media
JOIN platform_source_message_inbox inbox ON inbox.id = media.inbox_id
JOIN platform_debug_eml_superagent_run run ON run.source_message_id = inbox.id
JOIN platform_source_message_payload payload ON payload.inbox_id = inbox.id
WHERE inbox.provider = 'DEBUG_EML_UPLOAD'
AND media.media_type = 'ORIGINAL_EMAIL'
AND payload.payload_json LIKE '%controller-test%'
AND inbox.external_message_id LIKE 'debug-eml-run-%'
AND run.run_label = 'controller-test'
""", Long.class);
org.assertj.core.api.Assertions.assertThat(originalEmailMediaCount).isEqualTo(1L);
ArgumentCaptor<SuperAgentMailDebugRequest> superAgentRequestCaptor =
ArgumentCaptor.forClass(SuperAgentMailDebugRequest.class);
verify(superAgentOpenApiClient).invokeMailDebug(superAgentRequestCaptor.capture());
SuperAgentMailDebugRequest superAgentRequest = superAgentRequestCaptor.getValue();
org.assertj.core.api.Assertions.assertThat(superAgentRequest.message())
.contains("AgentBus Outlook 邮件 JSON")
.contains("\"external_message_id\":\"debug-eml-run-")
.contains("\"body\"")
.doesNotContain("\"provider\":\"DEBUG_EML_UPLOAD\"")
.doesNotContain("\"schema_version\"")
.doesNotContain("\"debug_context\"")
.doesNotContain("\"original_message_id\"")
.doesNotContain("\"mode\":\"debug_only\"")
.contains("\"reply_policy\"")
.contains("\"mode\":\"manual\"")
.contains("\"final_only\":true");
org.assertj.core.api.Assertions.assertThat(superAgentRequest.metadata())
.containsEntry("source", "th-hotel-debug-eml-upload")
.containsKey("debug_context");
Long debugRunCount = jdbcTemplate.queryForObject("""
SELECT COUNT(*)
FROM platform_debug_eml_superagent_run
@@ -509,13 +543,13 @@ class DebugEmlSuperAgentControllerTest {
Long sourceCount = jdbcTemplate.queryForObject("""
SELECT COUNT(*)
FROM platform_source_message_inbox inbox
JOIN platform_source_message_payload payload ON payload.inbox_id = inbox.id
FROM platform_debug_eml_superagent_run run
JOIN platform_source_message_inbox inbox ON inbox.id = run.source_message_id
WHERE inbox.hotel_id = 'HOTEL-TEST'
AND inbox.provider = 'DEBUG_EML_UPLOAD'
AND inbox.channel = 'EMAIL'
AND inbox.external_message_id LIKE 'debug-eml-run-%'
AND payload.payload_json LIKE '%repeat-debug-upload%'
AND run.run_label = 'repeat-debug-upload'
""", Long.class);
org.assertj.core.api.Assertions.assertThat(sourceCount).isEqualTo(2L);
}
@@ -534,11 +568,11 @@ class DebugEmlSuperAgentControllerTest {
Long sourceCount = jdbcTemplate.queryForObject("""
SELECT COUNT(*)
FROM platform_source_message_inbox inbox
JOIN platform_source_message_payload payload ON payload.inbox_id = inbox.id
FROM platform_debug_eml_superagent_run run
JOIN platform_source_message_inbox inbox ON inbox.id = run.source_message_id
WHERE inbox.hotel_id = 'HOTEL-TEST'
AND inbox.provider = 'DEBUG_EML_UPLOAD'
AND payload.payload_json LIKE '%system-hotel-debug-upload%'
AND run.run_label = 'system-hotel-debug-upload'
""", Long.class);
org.assertj.core.api.Assertions.assertThat(sourceCount).isEqualTo(1L);
}