diff options
Diffstat (limited to 'api')
-rw-r--r-- | api/preference.go | 28 | ||||
-rw-r--r-- | api/preference_test.go | 46 |
2 files changed, 74 insertions, 0 deletions
diff --git a/api/preference.go b/api/preference.go index d9ddb1a21..240ead571 100644 --- a/api/preference.go +++ b/api/preference.go @@ -16,6 +16,7 @@ func InitPreference() { BaseRoutes.Preferences.Handle("/", ApiUserRequired(getAllPreferences)).Methods("GET") BaseRoutes.Preferences.Handle("/save", ApiUserRequired(savePreferences)).Methods("POST") + BaseRoutes.Preferences.Handle("/delete", ApiUserRequired(deletePreferences)).Methods("POST") BaseRoutes.Preferences.Handle("/{category:[A-Za-z0-9_]+}", ApiUserRequired(getPreferenceCategory)).Methods("GET") BaseRoutes.Preferences.Handle("/{category:[A-Za-z0-9_]+}/{name:[A-Za-z0-9_]+}", ApiUserRequired(getPreference)).Methods("GET") } @@ -81,3 +82,30 @@ func getPreference(c *Context, w http.ResponseWriter, r *http.Request) { w.Write([]byte(data.ToJson())) } } + +func deletePreferences(c *Context, w http.ResponseWriter, r *http.Request) { + preferences, err := model.PreferencesFromJson(r.Body) + if err != nil { + c.Err = model.NewLocAppError("savePreferences", "api.preference.delete_preferences.decode.app_error", nil, err.Error()) + c.Err.StatusCode = http.StatusBadRequest + return + } + + for _, preference := range preferences { + if c.Session.UserId != preference.UserId { + c.Err = model.NewLocAppError("deletePreferences", "api.preference.delete_preferences.user_id.app_error", + nil, "session.user_id="+c.Session.UserId+",preference.user_id="+preference.UserId) + c.Err.StatusCode = http.StatusForbidden + return + } + } + + for _, preference := range preferences { + if result := <-Srv.Store.Preference().Delete(c.Session.UserId, preference.Category, preference.Name); result.Err != nil { + c.Err = result.Err + return + } + } + + ReturnStatusOK(w) +} diff --git a/api/preference_test.go b/api/preference_test.go index 082f02527..3e41c884f 100644 --- a/api/preference_test.go +++ b/api/preference_test.go @@ -161,3 +161,49 @@ func TestGetPreference(t *testing.T) { t.Fatal("preference updated incorrectly") } } + +func TestDeletePreferences(t *testing.T) { + th := Setup().InitBasic() + Client := th.BasicClient + user1 := th.BasicUser + + var originalCount int + if result, err := Client.GetAllPreferences(); err != nil { + t.Fatal(err) + } else { + originalCount = len(result.Data.(model.Preferences)) + } + + // save 10 preferences + var preferences model.Preferences + for i := 0; i < 10; i++ { + preference := model.Preference{ + UserId: user1.Id, + Category: model.PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW, + Name: model.NewId(), + } + preferences = append(preferences, preference) + } + + if _, err := Client.SetPreferences(&preferences); err != nil { + t.Fatal(err) + } + + // delete 10 preferences + th.LoginBasic2() + + if _, err := Client.DeletePreferences(&preferences); err == nil { + t.Fatal("shouldn't have been able to delete another user's preferences") + } + + th.LoginBasic() + if _, err := Client.DeletePreferences(&preferences); err != nil { + t.Fatal(err) + } + + if result, err := Client.GetAllPreferences(); err != nil { + t.Fatal(err) + } else if data := result.Data.(model.Preferences); len(data) != originalCount { + t.Fatal("should've deleted preferences") + } +} |