diff --git a/backend/internal/handler/widget/widget_handler_test.go b/backend/internal/handler/widget/widget_handler_test.go index ca26631e..d3dda5db 100644 --- a/backend/internal/handler/widget/widget_handler_test.go +++ b/backend/internal/handler/widget/widget_handler_test.go @@ -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) {