mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-06 23:56:37 +08:00
feat(push): validate push channels presence before enabling push event
- Reject toggling an event to enabled in ToggleEvent handler if channels list is empty. - Add model-level validation in PushEvent.Validate() to prevent enabling events without channels during creation/updates. - Update TestPushRouters/toggle_event_status unit test to cover this verification.
This commit is contained in:
@@ -363,11 +363,20 @@ func TestPushRouters(t *testing.T) {
|
|||||||
var event model.PushEvent
|
var event model.PushEvent
|
||||||
dbConn.First(&event)
|
dbConn.First(&event)
|
||||||
|
|
||||||
|
// 1. 未配置任何渠道时开启,应该被拒绝
|
||||||
req, _ := http.NewRequest("POST", "/api/v1/admin/push/events/"+strconv.FormatUint(event.ID, 10)+"/toggle", nil)
|
req, _ := http.NewRequest("POST", "/api/v1/admin/push/events/"+strconv.FormatUint(event.ID, 10)+"/toggle", nil)
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
r.ServeHTTP(w, req)
|
r.ServeHTTP(w, req)
|
||||||
|
assert.Equal(t, http.StatusBadRequest, w.Code)
|
||||||
|
|
||||||
assert.Equal(t, http.StatusOK, w.Code)
|
// 2. 为该事件关联渠道后,再切换开启,应当成功
|
||||||
|
event.Channels = []string{"email"}
|
||||||
|
dbConn.Save(&event)
|
||||||
|
|
||||||
|
req2, _ := http.NewRequest("POST", "/api/v1/admin/push/events/"+strconv.FormatUint(event.ID, 10)+"/toggle", nil)
|
||||||
|
w2 := httptest.NewRecorder()
|
||||||
|
r.ServeHTTP(w2, req2)
|
||||||
|
assert.Equal(t, http.StatusOK, w2.Code)
|
||||||
|
|
||||||
var updated model.PushEvent
|
var updated model.PushEvent
|
||||||
dbConn.First(&updated)
|
dbConn.First(&updated)
|
||||||
|
|||||||
@@ -351,6 +351,10 @@ func ToggleEvent(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
event.Enabled = !event.Enabled
|
event.Enabled = !event.Enabled
|
||||||
|
if event.Enabled && len(event.Channels) == 0 {
|
||||||
|
c.JSON(http.StatusBadRequest, response.Err("cannot enable event without any push channels configured"))
|
||||||
|
return
|
||||||
|
}
|
||||||
if err := db.DB(c.Request.Context()).Model(&event).Update("enabled", event.Enabled).Error; err != nil {
|
if err := db.DB(c.Request.Context()).Model(&event).Update("enabled", event.Enabled).Error; err != nil {
|
||||||
c.JSON(http.StatusInternalServerError, response.Err(err.Error()))
|
c.JSON(http.StatusInternalServerError, response.Err(err.Error()))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ func (pe *PushEvent) Validate() error {
|
|||||||
if pe.Template == "" {
|
if pe.Template == "" {
|
||||||
return errors.New("event template is required")
|
return errors.New("event template is required")
|
||||||
}
|
}
|
||||||
|
if pe.Enabled && len(pe.Channels) == 0 {
|
||||||
|
return errors.New("cannot enable event without any push channels configured")
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user