feat(notification-settings): align chatwoot payloads
This commit is contained in:
@@ -55,9 +55,7 @@ func (h *NotificationSettingHandler) Show(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
response.OK(c, gin.H{
|
||||
"notification_setting": serializeNotificationSetting(ns),
|
||||
})
|
||||
c.JSON(http.StatusOK, serializeNotificationSetting(ns))
|
||||
}
|
||||
|
||||
// Update modifies notification settings for the current user in the account.
|
||||
@@ -89,21 +87,19 @@ func (h *NotificationSettingHandler) Update(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
response.OK(c, gin.H{
|
||||
"notification_setting": serializeNotificationSetting(ns),
|
||||
})
|
||||
c.JSON(http.StatusOK, serializeNotificationSetting(ns))
|
||||
}
|
||||
|
||||
// serializeNotificationSetting builds the response object matching Chatwoot Jbuilder show.json.jbuilder:
|
||||
// id, user_id, account_id, all_email_flags, selected_email_flags, all_push_flags, selected_push_flags
|
||||
func serializeNotificationSetting(ns *model.NotificationSetting) gin.H {
|
||||
return gin.H{
|
||||
"id": ns.ID,
|
||||
"user_id": ns.UserID,
|
||||
"account_id": ns.AccountID,
|
||||
"all_email_flags": model.AllEmailFlagNames(),
|
||||
"id": ns.ID,
|
||||
"user_id": ns.UserID,
|
||||
"account_id": ns.AccountID,
|
||||
"all_email_flags": model.AllEmailFlagNames(),
|
||||
"selected_email_flags": ns.SelectedEmailFlagNames(),
|
||||
"all_push_flags": model.AllPushFlagNames(),
|
||||
"selected_push_flags": ns.SelectedPushFlagNames(),
|
||||
"all_push_flags": model.AllPushFlagNames(),
|
||||
"selected_push_flags": ns.SelectedPushFlagNames(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package v1
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
@@ -70,7 +71,7 @@ func (s *NotificationSettingHandlerTestSuite) TestShow_BadRequest_InvalidAccount
|
||||
func (s *NotificationSettingHandlerTestSuite) TestShow_Success() {
|
||||
r := gin.New()
|
||||
r.GET("/api/v1/accounts/:account_id/notification_settings", func(c *gin.Context) {
|
||||
c.Set("user_id", float64(1))
|
||||
c.Set("user_id", float64(11))
|
||||
s.handler.Show(c)
|
||||
})
|
||||
|
||||
@@ -79,6 +80,16 @@ func (s *NotificationSettingHandlerTestSuite) TestShow_Success() {
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
assert.Equal(s.T(), http.StatusOK, w.Code)
|
||||
|
||||
var body map[string]interface{}
|
||||
s.Require().NoError(json.Unmarshal(w.Body.Bytes(), &body))
|
||||
assert.NotContains(s.T(), body, "success")
|
||||
assert.NotContains(s.T(), body, "data")
|
||||
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")
|
||||
}
|
||||
|
||||
func (s *NotificationSettingHandlerTestSuite) TestUpdate_BadRequest_InvalidAccountID() {
|
||||
@@ -94,4 +105,29 @@ func (s *NotificationSettingHandlerTestSuite) TestUpdate_BadRequest_InvalidAccou
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
assert.Equal(s.T(), http.StatusBadRequest, w.Code)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *NotificationSettingHandlerTestSuite) TestUpdate_ReturnsRawChatwootPayload() {
|
||||
r := gin.New()
|
||||
r.PATCH("/api/v1/accounts/:account_id/notification_settings", func(c *gin.Context) {
|
||||
c.Set("user_id", float64(12))
|
||||
s.handler.Update(c)
|
||||
})
|
||||
|
||||
body := `{"notification_settings":{"selected_email_flags":["email_conversation_assignment"],"selected_push_flags":["push_conversation_mention"]}}`
|
||||
w := httptest.NewRecorder()
|
||||
req, _ := http.NewRequest("PATCH", fmt.Sprintf("/api/v1/accounts/%d/notification_settings", s.account.ID), bytes.NewBufferString(body))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
assert.Equal(s.T(), http.StatusOK, w.Code)
|
||||
var data map[string]interface{}
|
||||
s.Require().NoError(json.Unmarshal(w.Body.Bytes(), &data))
|
||||
assert.NotContains(s.T(), data, "success")
|
||||
assert.NotContains(s.T(), data, "data")
|
||||
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(), []interface{}{"email_conversation_assignment"}, data["selected_email_flags"])
|
||||
assert.Equal(s.T(), []interface{}{"push_conversation_mention"}, data["selected_push_flags"])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user