diff options
Diffstat (limited to 'model')
-rw-r--r-- | model/channel_view.go | 25 | ||||
-rw-r--r-- | model/channel_view_test.go | 38 | ||||
-rw-r--r-- | model/client4.go | 6 |
3 files changed, 66 insertions, 3 deletions
diff --git a/model/channel_view.go b/model/channel_view.go index 8a7ead76f..e7b1de306 100644 --- a/model/channel_view.go +++ b/model/channel_view.go @@ -32,3 +32,28 @@ func ChannelViewFromJson(data io.Reader) *ChannelView { return nil } } + +type ChannelViewResponse struct { + Status string `json:"status"` + LastViewedAtTimes map[string]int64 `json:"last_viewed_at_times"` +} + +func (o *ChannelViewResponse) ToJson() string { + b, err := json.Marshal(o) + if err != nil { + return "" + } else { + return string(b) + } +} + +func ChannelViewResponseFromJson(data io.Reader) *ChannelViewResponse { + decoder := json.NewDecoder(data) + var o ChannelViewResponse + err := decoder.Decode(&o) + if err == nil { + return &o + } else { + return nil + } +} diff --git a/model/channel_view_test.go b/model/channel_view_test.go new file mode 100644 index 000000000..fac455a74 --- /dev/null +++ b/model/channel_view_test.go @@ -0,0 +1,38 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "strings" + "testing" +) + +func TestChannelViewJson(t *testing.T) { + o := ChannelView{ChannelId: NewId(), PrevChannelId: NewId()} + json := o.ToJson() + ro := ChannelViewFromJson(strings.NewReader(json)) + + if o.ChannelId != ro.ChannelId { + t.Fatal("ChannelIdIds do not match") + } + + if o.PrevChannelId != ro.PrevChannelId { + t.Fatal("PrevChannelIds do not match") + } +} + +func TestChannelViewResponseJson(t *testing.T) { + id := NewId() + o := ChannelViewResponse{Status: "OK", LastViewedAtTimes: map[string]int64{id: 12345}} + json := o.ToJson() + ro := ChannelViewResponseFromJson(strings.NewReader(json)) + + if o.Status != ro.Status { + t.Fatal("ChannelIdIds do not match") + } + + if o.LastViewedAtTimes[id] != ro.LastViewedAtTimes[id] { + t.Fatal("LastViewedAtTimes do not match") + } +} diff --git a/model/client4.go b/model/client4.go index 42e89fd9c..eb8568a5e 100644 --- a/model/client4.go +++ b/model/client4.go @@ -1570,13 +1570,13 @@ func (c *Client4) GetChannelMembersForUser(userId, teamId, etag string) (*Channe } // ViewChannel performs a view action for a user. Synonymous with switching channels or marking channels as read by a user. -func (c *Client4) ViewChannel(userId string, view *ChannelView) (bool, *Response) { +func (c *Client4) ViewChannel(userId string, view *ChannelView) (*ChannelViewResponse, *Response) { url := fmt.Sprintf(c.GetChannelsRoute()+"/members/%v/view", userId) if r, err := c.DoApiPost(url, view.ToJson()); err != nil { - return false, BuildErrorResponse(r, err) + return nil, BuildErrorResponse(r, err) } else { defer closeBody(r) - return CheckStatusOK(r), BuildResponse(r) + return ChannelViewResponseFromJson(r.Body), BuildResponse(r) } } |