#4755 Combining consecutive user join/leave system messages to single message and few other changes. (#5945)

fix 7 and 8

remove @ at "{username} joined the channel"

refactor and update test
Этот коммит содержится в:
Debanshu Kundu
2017-07-31 23:47:21 +05:30
коммит произвёл Saturnino Abril
родитель 59992ae4a4
Коммит 8a91235fb3
14 изменённых файлов: 574 добавлений и 66 удалений

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

@@ -1,6 +1,11 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package app
import (
"fmt"
"reflect"
"testing"
"github.com/mattermost/platform/model"
@@ -64,3 +69,193 @@ func TestPermanentDeleteChannel(t *testing.T) {
t.Error("outgoing webhook wasn't deleted")
}
}
func PostUserActivitySystemMessage(t *testing.T, testFunc func(user *model.User, channel *model.Channel) *model.AppError, postType string, messageKey string) {
th := Setup().InitBasic()
// Test when last post was a leave/join post
user := &model.User{Id: model.NewId(), Email: "test@example.com", Username: "test"}
post := &model.Post{
ChannelId: th.BasicChannel.Id, UserId: user.Id, Type: postType, Message: "message",
Props: model.StringInterface{"username": user.Username},
}
post = (<-Srv.Store.Post().Save(post)).Data.(*model.Post)
testFunc(user, th.BasicChannel)
post = (<-Srv.Store.Post().GetSingle(post.Id)).Data.(*model.Post)
if post.Message != "message "+fmt.Sprintf(utils.T(messageKey), user.Username) {
t.Fatal("Leave/join a channel message wasn't appended to last leave/join post")
}
if !reflect.DeepEqual(
post.Props["messages"].([]interface{}),
[]interface{}{
map[string]interface{}{"type": postType, "username": user.Username},
map[string]interface{}{"type": postType, "username": user.Username},
},
) {
t.Fatal("Invalid leave/join a channel props")
}
// Test when last post was not a leave/join post
post.Id = ""
post.Message = "message1"
post.Type = model.POST_DEFAULT
post.Props = nil
post = (<-Srv.Store.Post().Save(post)).Data.(*model.Post)
testFunc(user, th.BasicChannel)
post = (<-Srv.Store.Post().GetSingle(post.Id)).Data.(*model.Post)
if post.Message == "message1 "+fmt.Sprintf(utils.T(messageKey), user.Username) {
t.Fatal("Leave/join a channel message was appended to last non leave/join post")
}
if _, ok := post.Props["messages"]; ok {
t.Fatal("Invalid leave/join a channel props. \"message\" shouldn't be present")
}
}
func TestPostJoinChannelMessage(t *testing.T) {
PostUserActivitySystemMessage(t, postJoinChannelMessage, model.POST_JOIN_CHANNEL, "api.channel.join_channel.post_and_forget")
}
func TestPostLeaveChannelMessage(t *testing.T) {
PostUserActivitySystemMessage(t, postLeaveChannelMessage, model.POST_LEAVE_CHANNEL, "api.channel.leave.left")
}
func TestPostAddToChannelMessage(t *testing.T) {
th := Setup().InitBasic()
// Test when last post was a user activity system message post
user := &model.User{Id: model.NewId(), Email: "test@example.com", Username: "test"}
addedUser := &model.User{Id: model.NewId(), Email: "test1@example.com", Username: "test1"}
post := &model.Post{
ChannelId: th.BasicChannel.Id, UserId: user.Id, Type: model.POST_ADD_TO_CHANNEL, Message: "message",
Props: model.StringInterface{"username": user.Username, "addedUsername": addedUser.Username},
}
post = (<-Srv.Store.Post().Save(post)).Data.(*model.Post)
PostAddToChannelMessage(user, addedUser, th.BasicChannel)
post = (<-Srv.Store.Post().GetSingle(post.Id)).Data.(*model.Post)
if post.Message != "message "+fmt.Sprintf(utils.T("api.channel.add_member.added"), user.Username, addedUser.Username) {
t.Fatal("Add message wasn't appended to last user activity system message post")
}
if !reflect.DeepEqual(
post.Props["messages"].([]interface{}),
[]interface{}{
map[string]interface{}{"type": model.POST_ADD_TO_CHANNEL, "username": user.Username, "addedUsername": addedUser.Username},
map[string]interface{}{"type": model.POST_ADD_TO_CHANNEL, "username": user.Username, "addedUsername": addedUser.Username},
},
) {
t.Fatal("Invalid added to channel props")
}
// Test when last post was not a user activity system message post
post.Id = ""
post.Message = "message1"
post.Type = model.POST_DEFAULT
post.Props = nil
post = (<-Srv.Store.Post().Save(post)).Data.(*model.Post)
PostAddToChannelMessage(user, addedUser, th.BasicChannel)
post = (<-Srv.Store.Post().GetSingle(post.Id)).Data.(*model.Post)
if post.Message == "message1\n"+fmt.Sprintf(utils.T("api.channel.add_member.added"), addedUser.Username, user.Username) {
t.Fatal("Added to channel message was appended to last non user activity system message post")
}
if _, ok := post.Props["messages"]; ok {
t.Fatal("Invalid added to channel props. \"message\" shouldn't be present")
}
}
func TestPostRemoveFromChannelMessage(t *testing.T) {
th := Setup().InitBasic()
user := th.BasicUser
// // Test when last post was a user activity system message post
removedUser := &model.User{Id: model.NewId(), Email: "test1@example.com", Username: "test1"}
post := &model.Post{
ChannelId: th.BasicChannel.Id, UserId: user.Id, Type: model.POST_REMOVE_FROM_CHANNEL, Message: "message",
Props: model.StringInterface{"removedUsername": removedUser.Username},
}
post = (<-Srv.Store.Post().Save(post)).Data.(*model.Post)
PostRemoveFromChannelMessage(user.Id, removedUser, th.BasicChannel)
post = (<-Srv.Store.Post().GetSingle(post.Id)).Data.(*model.Post)
if post.Message != "message "+fmt.Sprintf(utils.T("api.channel.remove_member.removed"), removedUser.Username) {
t.Fatal("Post removed from a channel message wasn't appended to last user activity system message post")
}
if !reflect.DeepEqual(
post.Props["messages"].([]interface{}),
[]interface{}{
map[string]interface{}{"type": model.POST_REMOVE_FROM_CHANNEL, "removedUsername": removedUser.Username},
map[string]interface{}{"type": model.POST_REMOVE_FROM_CHANNEL, "removedUsername": removedUser.Username},
},
) {
t.Fatal("Invalid removed from a channel props")
}
// Test when last post was not a user activity system message post
post.Id = ""
post.Message = "message1"
post.Type = model.POST_DEFAULT
post.Props = nil
post = (<-Srv.Store.Post().Save(post)).Data.(*model.Post)
PostRemoveFromChannelMessage(user.Id, removedUser, th.BasicChannel)
post = (<-Srv.Store.Post().GetSingle(post.Id)).Data.(*model.Post)
if post.Message == "message1 "+fmt.Sprintf(utils.T("api.channel.remove_member.removed"), removedUser.Username) {
t.Fatal("Post removed from a channel message was appended to last non user activity system message post")
}
if _, ok := post.Props["messages"]; ok {
t.Fatal("Invalid removed from a channel props. \"message\" shouldn't be present")
}
}
func TestGetLastPostForChannel(t *testing.T) {
th := Setup().InitBasic()
user := th.BasicUser
post1 := &model.Post{
ChannelId: th.BasicChannel.Id,
UserId: user.Id,
Message: "message",
}
post1 = (<-Srv.Store.Post().Save(post1)).Data.(*model.Post)
rpost1, err := GetLastPostForChannel(th.BasicChannel.Id)
if err != nil {
t.Fatal("Last post should have been returned")
}
if post1.Message != rpost1.Message {
t.Fatal("Should match post message")
}
post2 := &model.Post{
ChannelId: th.BasicChannel.Id,
UserId: user.Id,
Message: "message",
}
post2 = (<-Srv.Store.Post().Save(post2)).Data.(*model.Post)
rpost2, err := GetLastPostForChannel(th.BasicChannel.Id)
if err != nil {
t.Fatal("Last post should have been returned")
}
if post2.Message != rpost2.Message {
t.Fatal("Should match post message")
}
_, err = GetLastPostForChannel(model.NewId())
if err != nil {
t.Fatal("Should not return err")
}
}