H-386: unify legacy widget message serialization (#69)

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-21 13:18:13 +08:00
committed by GitHub
co-authored by rogee
parent 517a6090b3
commit a0a6c338f5
2 changed files with 18 additions and 14 deletions
@@ -196,14 +196,6 @@ func (h *WidgetHandler) SendMessage(c *gin.Context) {
return
}
if c.FullPath() == "/widget/messages" {
payload := widgetMessagePayload(resp.Message, resp.ConversationID)
if len(resp.Attachments) > 0 {
payload["attachments"] = widgetAttachmentPayloads(resp.Attachments)
}
c.JSON(http.StatusOK, resp)
return
}
conversationID := resp.ConversationID
if conversation, lookupErr := h.widgetService.GetConversation(c.Request.Context(), widgetToken, resp.ConversationID); lookupErr == nil {
conversationID = widgetConversationID(*conversation)
@@ -1931,7 +1931,7 @@ func TestWidgetHandler_ChatwootLabelsReturnNotFoundWithoutConversationContext(t
// ========== SendMessage Handler Tests ==========
func TestWidgetHandler_SendMessage_Success(t *testing.T) {
func TestWidgetHandler_LegacySendMessageUsesWidgetPayload(t *testing.T) {
db, router, _ := setupWidgetHandlerTest(t)
_, _ = seedWidgetHandlerData(t, db)
@@ -1967,9 +1967,23 @@ func TestWidgetHandler_SendMessage_Success(t *testing.T) {
assert.Equal(t, http.StatusOK, w.Code)
var conversation model.Conversation
require.NoError(t, db.First(&conversation).Error)
displayID := uint(42)
require.NoError(t, db.Model(&conversation).Update("display_id", displayID).Error)
w = httptest.NewRecorder()
req, _ = http.NewRequest("POST", "/widget/messages", bytes.NewReader(msgJSON))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Widget-Token", widgetToken)
router.ServeHTTP(w, req)
require.Equal(t, http.StatusOK, w.Code)
var msgResp map[string]interface{}
require.NoError(t, json.Unmarshal(w.Body.Bytes(), &msgResp))
assert.NotEmpty(t, msgResp["message"])
assert.Nil(t, msgResp["message"])
assert.Equal(t, float64(0), msgResp["message_type"])
assert.Equal(t, float64(displayID), msgResp["conversation_id"])
}
func TestWidgetHandler_SendMessage_NoWidgetToken(t *testing.T) {
@@ -2098,8 +2112,7 @@ func TestWidgetHandler_GetMessages_Success(t *testing.T) {
var msgResp map[string]interface{}
require.NoError(t, json.Unmarshal(wMsg.Body.Bytes(), &msgResp))
msgData := msgResp["message"].(map[string]interface{})
conversationID := uint(msgData["conversation_id"].(float64))
conversationID := uint(msgResp["conversation_id"].(float64))
// Get messages for that conversation
url := "/widget/conversations/" + strconv.FormatUint(uint64(conversationID), 10) + "/messages"
@@ -2256,8 +2269,7 @@ func TestWidgetHandler_ToggleTyping_Success(t *testing.T) {
var msgResp map[string]interface{}
require.NoError(t, json.Unmarshal(wMsg.Body.Bytes(), &msgResp))
msgData := msgResp["message"].(map[string]interface{})
conversationID := uint(msgData["conversation_id"].(float64))
conversationID := uint(msgResp["conversation_id"].(float64))
// Toggle typing
typingBody := map[string]interface{}{