H-412: cover legacy widget attachment parity (#73)

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-21 13:50:08 +08:00
committed by GitHub
co-authored by rogee
parent 1afe9dddeb
commit dddbe25899
@@ -1933,7 +1933,7 @@ func TestWidgetHandler_ChatwootLabelsReturnNotFoundWithoutConversationContext(t
func TestWidgetHandler_LegacySendMessageUsesWidgetPayload(t *testing.T) {
db, router, _ := setupWidgetHandlerTest(t)
_, _ = seedWidgetHandlerData(t, db)
account, _ := seedWidgetHandlerData(t, db)
// First init to get a widget_token
initBody := map[string]interface{}{
@@ -1971,19 +1971,46 @@ func TestWidgetHandler_LegacySendMessageUsesWidgetPayload(t *testing.T) {
require.NoError(t, db.First(&conversation).Error)
displayID := uint(42)
require.NoError(t, db.Model(&conversation).Update("display_id", displayID).Error)
upload := &model.DirectUpload{
UploadUUID: "signed-legacy-widget-upload",
AccountID: account.ID,
Status: model.DirectUploadStatusPending,
Source: model.DirectUploadSourceWidget,
OriginalName: "legacy.png",
FileType: "image",
MimeType: "image/png",
FileSize: 12,
FileURL: "/uploads/widget_direct/signed-legacy-widget-upload.png",
ThumbURL: "/uploads/widget_direct/signed-legacy-widget-upload.png",
ExpiresAt: time.Now().Add(time.Hour),
}
require.NoError(t, db.Create(upload).Error)
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
require.NoError(t, writer.WriteField("content", "Hello from handler test!"))
require.NoError(t, writer.WriteField("message[attachments][]", upload.UploadUUID))
require.NoError(t, writer.Close())
w = httptest.NewRecorder()
req, _ = http.NewRequest("POST", "/widget/messages", bytes.NewReader(msgJSON))
req.Header.Set("Content-Type", "application/json")
req, _ = http.NewRequest("POST", "/widget/messages", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
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))
assertWidgetMessageFixtureShape(t, msgResp)
assert.Nil(t, msgResp["message"])
assert.Equal(t, float64(0), msgResp["message_type"])
assert.Equal(t, float64(displayID), msgResp["conversation_id"])
attachments := msgResp["attachments"].([]interface{})
require.Len(t, attachments, 1)
attachment := attachments[0].(map[string]interface{})
assertWidgetAttachmentFixtureShape(t, attachment)
assert.Equal(t, upload.FileURL, attachment["data_url"])
assert.Equal(t, "image", attachment["file_type"])
assert.Equal(t, float64(account.ID), attachment["account_id"])
}
func TestWidgetHandler_SendMessage_NoWidgetToken(t *testing.T) {