MM-10425 Include active_channel in cluster update user status messages (#8967)

* Include active_channel in cluster update user status messages

* Update to use new ToJson method

* Update tests
Этот коммит содержится в:
Joram Wilander
2018-06-21 13:42:20 -04:00
коммит произвёл Christopher Speller
родитель d36ad6cb54
Коммит 46f969e5dd
3 изменённых файлов: 39 добавлений и 13 удалений

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

@@ -29,7 +29,7 @@ func (a *App) AddStatusCache(status *model.Status) {
msg := &model.ClusterMessage{ msg := &model.ClusterMessage{
Event: model.CLUSTER_EVENT_UPDATE_STATUS, Event: model.CLUSTER_EVENT_UPDATE_STATUS,
SendType: model.CLUSTER_SEND_BEST_EFFORT, SendType: model.CLUSTER_SEND_BEST_EFFORT,
Data: status.ToJson(), Data: status.ToClusterJson(),
} }
a.Cluster.SendClusterMessage(msg) a.Cluster.SendClusterMessage(msg)
} }

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

@@ -24,10 +24,18 @@ type Status struct {
Status string `json:"status"` Status string `json:"status"`
Manual bool `json:"manual"` Manual bool `json:"manual"`
LastActivityAt int64 `json:"last_activity_at"` LastActivityAt int64 `json:"last_activity_at"`
ActiveChannel string `json:"-" db:"-"` ActiveChannel string `json:"active_channel,omitempty" db:"-"`
} }
func (o *Status) ToJson() string { func (o *Status) ToJson() string {
tempChannelId := o.ActiveChannel
o.ActiveChannel = ""
b, _ := json.Marshal(o)
o.ActiveChannel = tempChannelId
return string(b)
}
func (o *Status) ToClusterJson() string {
b, _ := json.Marshal(o) b, _ := json.Marshal(o)
return string(b) return string(b)
} }
@@ -39,7 +47,18 @@ func StatusFromJson(data io.Reader) *Status {
} }
func StatusListToJson(u []*Status) string { func StatusListToJson(u []*Status) string {
activeChannels := make([]string, len(u))
for index, s := range u {
activeChannels[index] = s.ActiveChannel
s.ActiveChannel = ""
}
b, _ := json.Marshal(u) b, _ := json.Marshal(u)
for index, s := range u {
s.ActiveChannel = activeChannels[index]
}
return string(b) return string(b)
} }

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

@@ -7,10 +7,12 @@ import (
"encoding/json" "encoding/json"
"strings" "strings"
"testing" "testing"
"github.com/stretchr/testify/assert"
) )
func TestStatus(t *testing.T) { func TestStatus(t *testing.T) {
status := Status{NewId(), STATUS_ONLINE, true, 0, ""} status := Status{NewId(), STATUS_ONLINE, true, 0, "123"}
json := status.ToJson() json := status.ToJson()
status2 := StatusFromJson(strings.NewReader(json)) status2 := StatusFromJson(strings.NewReader(json))
@@ -29,10 +31,17 @@ func TestStatus(t *testing.T) {
if status.Manual != status2.Manual { if status.Manual != status2.Manual {
t.Fatal("Manual should have matched") t.Fatal("Manual should have matched")
} }
assert.Equal(t, "", status2.ActiveChannel)
json = status.ToClusterJson()
status2 = StatusFromJson(strings.NewReader(json))
assert.Equal(t, status.ActiveChannel, status2.ActiveChannel)
} }
func TestStatusListToJson(t *testing.T) { func TestStatusListToJson(t *testing.T) {
statuses := []*Status{{NewId(), STATUS_ONLINE, true, 0, ""}, {NewId(), STATUS_OFFLINE, true, 0, ""}} statuses := []*Status{{NewId(), STATUS_ONLINE, true, 0, "123"}, {NewId(), STATUS_OFFLINE, true, 0, ""}}
jsonStatuses := StatusListToJson(statuses) jsonStatuses := StatusListToJson(statuses)
var dat []map[string]interface{} var dat []map[string]interface{}
@@ -40,15 +49,13 @@ func TestStatusListToJson(t *testing.T) {
panic(err) panic(err)
} }
if len(dat) != 2 { assert.Equal(t, len(dat), 2)
t.Fatal("Status array should contain 2 elements")
} _, ok := dat[0]["active_channel"]
if statuses[0].UserId != dat[0]["user_id"] { assert.False(t, ok)
t.Fatal("UserId should be equal") assert.Equal(t, statuses[0].ActiveChannel, "123")
} assert.Equal(t, statuses[0].UserId, dat[0]["user_id"])
if statuses[1].UserId != dat[1]["user_id"] { assert.Equal(t, statuses[1].UserId, dat[1]["user_id"])
t.Fatal("UserId should be equal")
}
} }
func TestStatusListFromJson(t *testing.T) { func TestStatusListFromJson(t *testing.T) {