Align GoChat with Chatwoot frontend contracts

This commit is contained in:
2026-06-13 22:13:32 +08:00
parent 71abf58636
commit d884fdda0a
162 changed files with 9825 additions and 528 deletions
@@ -88,8 +88,10 @@ func (s *NotificationSettingHandlerTestSuite) TestShow_Success() {
assert.NotContains(s.T(), body, "notification_setting")
assert.Equal(s.T(), float64(s.account.ID), body["account_id"])
assert.Equal(s.T(), float64(11), body["user_id"])
s.Require().Contains(body, "all_email_flags")
s.Require().Contains(body, "selected_email_flags")
assert.Equal(s.T(), stringSliceToInterfaceSlice(model.AllEmailFlagNames()), body["all_email_flags"])
assert.Equal(s.T(), stringSliceToInterfaceSlice(model.AllPushFlagNames()), body["all_push_flags"])
assert.Equal(s.T(), stringSliceToInterfaceSlice(model.AllEmailFlagNames()), body["selected_email_flags"])
assert.Equal(s.T(), stringSliceToInterfaceSlice(model.AllPushFlagNames()), body["selected_push_flags"])
}
func (s *NotificationSettingHandlerTestSuite) TestUpdate_BadRequest_InvalidAccountID() {
@@ -109,6 +111,10 @@ func (s *NotificationSettingHandlerTestSuite) TestUpdate_BadRequest_InvalidAccou
func (s *NotificationSettingHandlerTestSuite) TestUpdate_ReturnsRawChatwootPayload() {
r := gin.New()
r.GET("/api/v1/accounts/:account_id/notification_settings", func(c *gin.Context) {
c.Set("user_id", float64(12))
s.handler.Show(c)
})
r.PATCH("/api/v1/accounts/:account_id/notification_settings", func(c *gin.Context) {
c.Set("user_id", float64(12))
s.handler.Update(c)
@@ -128,6 +134,30 @@ func (s *NotificationSettingHandlerTestSuite) TestUpdate_ReturnsRawChatwootPaylo
assert.NotContains(s.T(), data, "notification_setting")
assert.Equal(s.T(), float64(s.account.ID), data["account_id"])
assert.Equal(s.T(), float64(12), data["user_id"])
assert.Equal(s.T(), stringSliceToInterfaceSlice(model.AllEmailFlagNames()), data["all_email_flags"])
assert.Equal(s.T(), stringSliceToInterfaceSlice(model.AllPushFlagNames()), data["all_push_flags"])
assert.Equal(s.T(), []interface{}{"email_conversation_assignment"}, data["selected_email_flags"])
assert.Equal(s.T(), []interface{}{"push_conversation_mention"}, data["selected_push_flags"])
var persisted model.NotificationSetting
s.Require().NoError(s.db.Where("account_id = ? AND user_id = ?", s.account.ID, 12).First(&persisted).Error)
assert.Equal(s.T(), []string{"email_conversation_assignment"}, persisted.SelectedEmailFlagNames())
assert.Equal(s.T(), []string{"push_conversation_mention"}, persisted.SelectedPushFlagNames())
w = httptest.NewRecorder()
req, _ = http.NewRequest("GET", fmt.Sprintf("/api/v1/accounts/%d/notification_settings", s.account.ID), nil)
r.ServeHTTP(w, req)
assert.Equal(s.T(), http.StatusOK, w.Code)
s.Require().NoError(json.Unmarshal(w.Body.Bytes(), &data))
assert.Equal(s.T(), []interface{}{"email_conversation_assignment"}, data["selected_email_flags"])
assert.Equal(s.T(), []interface{}{"push_conversation_mention"}, data["selected_push_flags"])
}
func stringSliceToInterfaceSlice(values []string) []interface{} {
items := make([]interface{}, 0, len(values))
for _, value := range values {
items = append(items, value)
}
return items
}