feat(conversations): align toggle priority fallback

This commit is contained in:
2026-06-07 11:04:40 +08:00
parent e6c9660659
commit 148201905a
3 changed files with 38 additions and 7 deletions
@@ -576,9 +576,11 @@ func (h *ConversationHandler) TogglePriority(c *gin.Context) {
var req struct {
Priority *string `json:"priority"`
}
if err := c.ShouldBindJSON(&req); err != nil {
response.AbortWithStatusError(c, http.StatusBadRequest, response.ErrValidation, err.Error())
return
if c.Request.Body != nil && c.Request.Body != http.NoBody {
if err := c.ShouldBindJSON(&req); err != nil && !errors.Is(err, io.EOF) {
response.AbortWithStatusError(c, http.StatusBadRequest, response.ErrValidation, err.Error())
return
}
}
priority := ""
if req.Priority != nil {
@@ -125,6 +125,7 @@ func (s *ConversationCrudTestSuite) SetupSuite() {
conversations.DELETE("/:conversation_id", handler.Delete)
conversations.POST("/:conversation_id/assign", handler.AssignAgent)
conversations.POST("/:conversation_id/toggle_status", handler.ToggleStatus)
conversations.POST("/:conversation_id/toggle_priority", handler.TogglePriority)
conversations.POST("/:conversation_id/mute", handler.Mute)
conversations.POST("/:conversation_id/unmute", handler.Unmute)
conversations.POST("/:conversation_id/labels", handler.UpdateLabels)
@@ -1553,6 +1554,30 @@ func (s *ConversationCrudTestSuite) TestUpdatePriority_NotFound() {
assert.Equal(s.T(), http.StatusNotFound, w.Code)
}
func (s *ConversationCrudTestSuite) TestTogglePriority_EmptyBodyClearsPriorityLikeChatwoot() {
s.Require().NoError(s.db.Model(&model.Conversation{}).Where("id = ?", s.testConv.ID).Update("priority", "urgent").Error)
w := httptest.NewRecorder()
req, _ := http.NewRequest("POST", s.convURL(s.testConv.ID)+"/toggle_priority", nil)
s.router.ServeHTTP(w, req)
assert.Equal(s.T(), http.StatusOK, w.Code)
assert.Empty(s.T(), w.Body.String())
var conversation model.Conversation
s.Require().NoError(s.db.First(&conversation, s.testConv.ID).Error)
assert.Equal(s.T(), "none", conversation.Priority)
}
func (s *ConversationCrudTestSuite) TestTogglePriority_InvalidJSON() {
w := httptest.NewRecorder()
req, _ := http.NewRequest("POST", s.convURL(s.testConv.ID)+"/toggle_priority", bytes.NewReader([]byte("{bad json")))
req.Header.Set("Content-Type", "application/json")
s.router.ServeHTTP(w, req)
assert.Equal(s.T(), http.StatusBadRequest, w.Code)
}
// ========== AssignTeam Handler Tests ==========
func (s *ConversationCrudTestSuite) TestAssignTeam_Success() {