diff options
Diffstat (limited to 'api4')
-rw-r--r-- | api4/channel.go | 27 | ||||
-rw-r--r-- | api4/channel_test.go | 50 |
2 files changed, 77 insertions, 0 deletions
diff --git a/api4/channel.go b/api4/channel.go index ea4f2783a..b7f9508d6 100644 --- a/api4/channel.go +++ b/api4/channel.go @@ -43,6 +43,7 @@ func InitChannel() { BaseRoutes.ChannelMember.Handle("", ApiSessionRequired(getChannelMember)).Methods("GET") BaseRoutes.ChannelMember.Handle("", ApiSessionRequired(removeChannelMember)).Methods("DELETE") BaseRoutes.ChannelMember.Handle("/roles", ApiSessionRequired(updateChannelMemberRoles)).Methods("PUT") + BaseRoutes.ChannelMember.Handle("/notify_props", ApiSessionRequired(updateChannelMemberNotifyProps)).Methods("PUT") } func createChannel(c *Context, w http.ResponseWriter, r *http.Request) { @@ -660,6 +661,32 @@ func updateChannelMemberRoles(c *Context, w http.ResponseWriter, r *http.Request ReturnStatusOK(w) } +func updateChannelMemberNotifyProps(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireChannelId().RequireUserId() + if c.Err != nil { + return + } + + props := model.MapFromJson(r.Body) + if props == nil { + c.SetInvalidParam("notify_props") + return + } + + if !app.SessionHasPermissionToUser(c.Session, c.Params.UserId) { + c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) + return + } + + _, err := app.UpdateChannelMemberNotifyProps(props, c.Params.ChannelId, c.Params.UserId) + if err != nil { + c.Err = err + return + } + + ReturnStatusOK(w) +} + func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { c.RequireChannelId() if c.Err != nil { diff --git a/api4/channel_test.go b/api4/channel_test.go index 3cc1cb64f..1875f2c44 100644 --- a/api4/channel_test.go +++ b/api4/channel_test.go @@ -1440,6 +1440,56 @@ func TestUpdateChannelRoles(t *testing.T) { CheckForbiddenStatus(t, resp) } +func TestUpdateChannelNotifyProps(t *testing.T) { + th := Setup().InitBasic().InitSystemAdmin() + defer TearDown() + Client := th.Client + + props := map[string]string{} + props[model.DESKTOP_NOTIFY_PROP] = model.CHANNEL_NOTIFY_MENTION + props[model.MARK_UNREAD_NOTIFY_PROP] = model.CHANNEL_MARK_UNREAD_MENTION + + pass, resp := Client.UpdateChannelNotifyProps(th.BasicChannel.Id, th.BasicUser.Id, props) + CheckNoError(t, resp) + + if !pass { + t.Fatal("should have passed") + } + + member, err := app.GetChannelMember(th.BasicChannel.Id, th.BasicUser.Id) + if err != nil { + t.Fatal(err) + } + + if member.NotifyProps[model.DESKTOP_NOTIFY_PROP] != model.CHANNEL_NOTIFY_MENTION { + t.Fatal("bad update") + } else if member.NotifyProps[model.MARK_UNREAD_NOTIFY_PROP] != model.CHANNEL_MARK_UNREAD_MENTION { + t.Fatal("bad update") + } + + _, resp = Client.UpdateChannelNotifyProps("junk", th.BasicUser.Id, props) + CheckBadRequestStatus(t, resp) + + _, resp = Client.UpdateChannelNotifyProps(th.BasicChannel.Id, "junk", props) + CheckBadRequestStatus(t, resp) + + _, resp = Client.UpdateChannelNotifyProps(model.NewId(), th.BasicUser.Id, props) + CheckNotFoundStatus(t, resp) + + _, resp = Client.UpdateChannelNotifyProps(th.BasicChannel.Id, model.NewId(), props) + CheckForbiddenStatus(t, resp) + + _, resp = Client.UpdateChannelNotifyProps(th.BasicChannel.Id, th.BasicUser.Id, map[string]string{}) + CheckNoError(t, resp) + + Client.Logout() + _, resp = Client.UpdateChannelNotifyProps(th.BasicChannel.Id, th.BasicUser.Id, props) + CheckUnauthorizedStatus(t, resp) + + _, resp = th.SystemAdminClient.UpdateChannelNotifyProps(th.BasicChannel.Id, th.BasicUser.Id, props) + CheckNoError(t, resp) +} + func TestAddChannelMember(t *testing.T) { th := Setup().InitBasic().InitSystemAdmin() defer TearDown() |