PLT-1384 Added websocket event when preferences are updated/deleted (#6107)

Этот коммит содержится в:
Harrison Healey
2017-04-20 08:57:31 -04:00
коммит произвёл George Goldberg
родитель b79439e92b
Коммит 1a0f8d1b3c
7 изменённых файлов: 187 добавлений и 91 удалений

Просмотреть файл

@@ -76,7 +76,7 @@ type Routes struct {
System *mux.Router // 'api/v4/system'
Preferences *mux.Router // 'api/v4/preferences'
Preferences *mux.Router // 'api/v4/users/{user_id:[A-Za-z0-9]+}/preferences'
License *mux.Router // 'api/v4/license'

Просмотреть файл

@@ -99,17 +99,7 @@ func updatePreferences(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
for _, preference := range preferences {
if c.Params.UserId != preference.UserId {
c.Err = model.NewAppError("savePreferences", "api.preference.update_preferences.set.app_error", nil,
c.T("api.preference.update_preferences.set_details.app_error",
map[string]interface{}{"SessionUserId": c.Params.UserId, "PreferenceUserId": preference.UserId}),
http.StatusForbidden)
return
}
}
if _, err := app.UpdatePreferences(preferences); err != nil {
if err := app.UpdatePreferences(c.Params.UserId, preferences); err != nil {
c.Err = err
return
}
@@ -134,17 +124,7 @@ func deletePreferences(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
for _, preference := range preferences {
if c.Params.UserId != preference.UserId {
c.Err = model.NewAppError("deletePreferences", "api.preference.delete_preferences.delete.app_error", nil,
c.T("api.preference.delete_preferences.delete.app_error",
map[string]interface{}{"SessionUserId": c.Params.UserId, "PreferenceUserId": preference.UserId}),
http.StatusForbidden)
return
}
}
if _, err := app.DeletePreferences(c.Params.UserId, preferences); err != nil {
if err := app.DeletePreferences(c.Params.UserId, preferences); err != nil {
c.Err = err
return
}

Просмотреть файл

@@ -4,8 +4,11 @@
package api4
import (
"github.com/mattermost/platform/model"
"strings"
"testing"
"time"
"github.com/mattermost/platform/model"
)
func TestGetPreferences(t *testing.T) {
@@ -239,6 +242,61 @@ func TestUpdatePreferences(t *testing.T) {
CheckUnauthorizedStatus(t, resp)
}
func TestUpdatePreferencesWebsocket(t *testing.T) {
th := Setup().InitBasic()
WebSocketClient, err := th.CreateWebSocketClient()
if err != nil {
t.Fatal(err)
}
WebSocketClient.Listen()
userId := th.BasicUser.Id
preferences := &model.Preferences{
{
UserId: userId,
Category: model.NewId(),
Name: model.NewId(),
},
{
UserId: userId,
Category: model.NewId(),
Name: model.NewId(),
},
}
_, resp := th.Client.UpdatePreferences(userId, preferences)
CheckNoError(t, resp)
timeout := time.After(300 * time.Millisecond)
waiting := true
for waiting {
select {
case event := <-WebSocketClient.EventChannel:
if event.Event != model.WEBSOCKET_EVENT_PREFERENCES_CHANGED {
// Ignore any other events
continue
}
received, err := model.PreferencesFromJson(strings.NewReader(event.Data["preferences"].(string)))
if err != nil {
t.Fatal(err)
}
for i, preference := range *preferences {
if preference.UserId != received[i].UserId || preference.Category != received[i].Category || preference.Name != received[i].Name {
t.Fatal("received incorrect preference")
}
}
waiting = false
case <-timeout:
t.Fatal("timed out waiting for preference update event")
}
}
}
func TestDeletePreferences(t *testing.T) {
th := Setup().InitBasic()
defer TearDown()
@@ -285,3 +343,61 @@ func TestDeletePreferences(t *testing.T) {
_, resp = Client.DeletePreferences(th.BasicUser.Id, &preferences)
CheckUnauthorizedStatus(t, resp)
}
func TestDeletePreferencesWebsocket(t *testing.T) {
th := Setup().InitBasic()
userId := th.BasicUser.Id
preferences := &model.Preferences{
{
UserId: userId,
Category: model.NewId(),
Name: model.NewId(),
},
{
UserId: userId,
Category: model.NewId(),
Name: model.NewId(),
},
}
_, resp := th.Client.UpdatePreferences(userId, preferences)
CheckNoError(t, resp)
WebSocketClient, err := th.CreateWebSocketClient()
if err != nil {
t.Fatal(err)
}
WebSocketClient.Listen()
_, resp = th.Client.DeletePreferences(userId, preferences)
CheckNoError(t, resp)
timeout := time.After(30000 * time.Millisecond)
waiting := true
for waiting {
select {
case event := <-WebSocketClient.EventChannel:
if event.Event != model.WEBSOCKET_EVENT_PREFERENCES_DELETED {
// Ignore any other events
continue
}
received, err := model.PreferencesFromJson(strings.NewReader(event.Data["preferences"].(string)))
if err != nil {
t.Fatal(err)
}
for i, preference := range *preferences {
if preference.UserId != received[i].UserId || preference.Category != received[i].Category || preference.Name != received[i].Name {
t.Fatal("received incorrect preference")
}
}
waiting = false
case <-timeout:
t.Fatal("timed out waiting for preference delete event")
}
}
}