fix(conversations): 修复状态切换与历史会话路由

- 处理历史主键与 display_id 冲突,确保消息和状态操作命中同一会话
- 允许已软删除收件箱中的历史会话切换状态
- 解决会话后自动打开列表中的相邻会话
This commit is contained in:
Rogee
2026-08-06 10:08:05 +08:00
parent cb50726620
commit 8f2cc12628
5 changed files with 117 additions and 9 deletions
@@ -799,6 +799,27 @@ func (s *ConversationCrudTestSuite) TestToggleStatus_Success() {
assert.Equal(s.T(), "resolved", resp.Payload.CurrentStatus)
}
func (s *ConversationCrudTestSuite) TestToggleStatus_SoftDeletedInboxStillUpdatesConversation() {
s.Require().NoError(s.db.Delete(s.testInbox).Error)
body, _ := json.Marshal(map[string]interface{}{
"status": "resolved",
})
w := httptest.NewRecorder()
req, _ := http.NewRequest("POST", s.convURL(s.testConv.ID)+"/toggle_status", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
s.router.ServeHTTP(w, req)
s.Require().Equal(http.StatusOK, w.Code, w.Body.String())
var resp struct {
Payload struct {
CurrentStatus string `json:"current_status"`
} `json:"payload"`
}
s.Require().NoError(json.Unmarshal(w.Body.Bytes(), &resp))
s.Equal("resolved", resp.Payload.CurrentStatus)
}
func (s *ConversationCrudTestSuite) TestToggleStatus_NoStatusTogglesLikeChatwoot() {
w := httptest.NewRecorder()
req, _ := http.NewRequest("POST", s.convURL(s.testConv.ID)+"/toggle_status", nil)