补齐任务列表状态筛选和邮件HTML安全字段

This commit is contained in:
andy
2026-07-09 00:15:51 +08:00
parent a0cb3a05d7
commit 855396e553
13 changed files with 203 additions and 43 deletions

View File

@@ -132,7 +132,8 @@ class SourceMessageControllerTest {
"mail-conversation-p0-001",
"conversation-p0-001",
"First full text body with booking context.",
"<html><body><p>First HTML body</p><img src=\"cid:image-001\" /></body></html>",
"<html><body><p>First HTML body</p><img src=\"cid:image-001\" onerror=\"alert(1)\" />"
+ "<a href=\"javascript:alert(2)\">unsafe</a><script>alert(3)</script></body></html>",
List.of(
media("INLINE_IMAGE", "image-001.png", "image/png", 100L,
"https://media.example.test/image-001.png?token=secret", "image-001"),
@@ -161,6 +162,20 @@ class SourceMessageControllerTest {
.value(contains(containsString("First full text body"))))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_body")
.value(contains(containsString("First HTML body"))))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_body")
.value(contains(containsString("<script>alert(3)</script>"))))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_body_sanitized")
.value(contains(containsString("First HTML body"))))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_body_sanitized")
.value(contains(not(containsString("<script")))))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_body_sanitized")
.value(contains(not(containsString("onerror")))))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_body_sanitized")
.value(contains(not(containsString("javascript:")))))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_sanitize_required")
.value(contains(true)))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].html_render_mode")
.value(contains("SANITIZED_HTML")))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].inline_images[0].externalUrl")
.value(contains("https://media.example.test/image-001.png?token=secret")))
.andExpect(jsonPath("$.messages[?(@.external_message_id=='mail-conversation-p0-001')].attachments[0].externalUrl")

View File

@@ -122,6 +122,40 @@ class ReservationFrontendQueryControllerTest {
verify(workflowRepository, never()).findQueueTasksBefore(anyString(), anyLong(), any());
}
@Test
void shouldFilterTaskWorkbenchListByOrderStatus() throws Exception {
SourceMessageCaptureResult source = captureSourceMessage(
"mail-frontend-task-order-status-001",
"Frontend Query Task Order Status Smoke");
Long activeOrderId = 930000000000001101L;
Long endedOrderId = 930000000000001102L;
Long activeTaskId = 930000000000001301L;
Long endedTaskId = 930000000000001302L;
insertGroupOrder(activeOrderId, source.inboxId(), "GRP-FRONTEND-TASK-ACTIVE-001", "ACTIVE");
insertGroupOrder(endedOrderId, source.inboxId(), "GRP-FRONTEND-TASK-ENDED-001", "ENDED");
insertTransition(930000000000001201L, source.inboxId(), 1, "GRP-FRONTEND-TASK-ACTIVE-001",
"New Booking", "NEW_BOOKING", "NEW_BOOKING");
insertTransition(930000000000001202L, source.inboxId(), 2, "GRP-FRONTEND-TASK-ENDED-001",
"Cancel Booking", "CANCEL_BOOKING", "CANCEL_BOOKING");
insertTask(activeTaskId, activeOrderId, source.inboxId(), 930000000000001201L, "New Booking",
"NEW_BOOKING", "NEW_BOOKING", "PENDING_CONFIRM", 1);
insertTask(endedTaskId, endedOrderId, source.inboxId(), 930000000000001202L, "Cancel Booking",
"CANCEL_BOOKING", "CANCEL_BOOKING", "PENDING_CONFIRM", 1);
mockMvc.perform(get("/api/reservation/tasks")
.param("hotel_id", HOTEL_ID)
.param("order_status", "ENDED")
.param("keyword", "GRP-FRONTEND-TASK-")
.param("page_num", "1")
.param("page_size", "20"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.items.length()").value(1))
.andExpect(jsonPath("$.items[0].task_id").value(endedTaskId.toString()))
.andExpect(jsonPath("$.items[0].order_id").value(endedOrderId.toString()))
.andExpect(jsonPath("$.items[0].display_order_key").value("GRP-FRONTEND-TASK-ENDED-001"))
.andExpect(jsonPath("$.page.total").value(1));
}
@Test
void shouldReturnOrderDetailWithTaskTimeline() throws Exception {
SourceMessageCaptureResult source = captureSourceMessage(