Align GoChat with Chatwoot frontend contracts
This commit is contained in:
@@ -279,3 +279,56 @@ func (s *MacroHandlerTestSuite) TestExecute_UsesConversationDisplayIDsAndMutates
|
||||
assert.Equal(s.T(), "Internal macro note", messages[1].Content)
|
||||
assert.True(s.T(), messages[1].Private)
|
||||
}
|
||||
|
||||
func (s *MacroHandlerTestSuite) TestExecute_ChatwootFrontendAwaitsEmptyOKAndSupportsSingleConversationID() {
|
||||
admin := &model.User{Name: "Exec Single Admin", Email: "macro-exec-single@example.com", Role: "administrator"}
|
||||
s.Require().NoError(s.db.Create(admin).Error)
|
||||
inbox := &model.Inbox{AccountID: s.account.ID, Name: "Macro Single Inbox", ChannelType: "web"}
|
||||
s.Require().NoError(s.db.Create(inbox).Error)
|
||||
contact := &model.Contact{AccountID: s.account.ID, Name: "Macro Single Contact", Email: "macro-single@example.com"}
|
||||
s.Require().NoError(s.db.Create(contact).Error)
|
||||
displayID := uint(555)
|
||||
conversation := &model.Conversation{AccountID: s.account.ID, InboxID: inbox.ID, ContactID: contact.ID, DisplayID: &displayID, Status: "open", Priority: "low", ChannelType: "web", Channel: "web_widget"}
|
||||
s.Require().NoError(s.db.Create(conversation).Error)
|
||||
macro := &automation.Macro{
|
||||
AccountID: s.account.ID,
|
||||
Name: "single execute macro",
|
||||
Actions: automation.Actions{
|
||||
{ActionName: "change_status", ActionParams: map[string]interface{}{"status": "resolved"}},
|
||||
},
|
||||
Visibility: automation.MacroVisibilityGlobal,
|
||||
Active: true,
|
||||
CreatedByID: admin.ID,
|
||||
UpdatedByID: admin.ID,
|
||||
}
|
||||
s.Require().NoError(s.db.Create(macro).Error)
|
||||
|
||||
r := gin.New()
|
||||
r.POST("/api/v1/accounts/:account_id/macros/:macro_id/execute", func(c *gin.Context) {
|
||||
c.Set("user_id", admin.ID)
|
||||
c.Set("role", "administrator")
|
||||
c.Next()
|
||||
}, s.handler.Execute)
|
||||
|
||||
w := httptest.NewRecorder()
|
||||
req, _ := http.NewRequest("POST", fmt.Sprintf("/api/v1/accounts/%d/macros/%d/execute", s.account.ID, macro.ID), bytes.NewBufferString(`{"conversation_id":555}`))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
r.ServeHTTP(w, req)
|
||||
assert.Equal(s.T(), http.StatusOK, w.Code)
|
||||
assert.Empty(s.T(), w.Body.String())
|
||||
|
||||
var reloaded model.Conversation
|
||||
s.Require().NoError(s.db.First(&reloaded, conversation.ID).Error)
|
||||
assert.Equal(s.T(), "resolved", reloaded.Status)
|
||||
|
||||
w = httptest.NewRecorder()
|
||||
req, _ = http.NewRequest("POST", fmt.Sprintf("/api/v1/accounts/%d/macros/%d/execute", s.account.ID, macro.ID), nil)
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
r.ServeHTTP(w, req)
|
||||
assert.Equal(s.T(), http.StatusBadRequest, w.Code)
|
||||
var errorResp map[string]interface{}
|
||||
s.Require().NoError(json.Unmarshal(w.Body.Bytes(), &errorResp))
|
||||
validationError := errorResp["error"].(map[string]interface{})
|
||||
assert.Equal(s.T(), "VALIDATION_ERROR", validationError["code"])
|
||||
assert.Equal(s.T(), "conversation_ids is required", validationError["message"])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user