From 7562f940bb7b0de80bcfb8f5c3fc1b751a1a6b16 Mon Sep 17 00:00:00 2001 From: Wasim Thabraze Date: Wed, 17 Oct 2018 18:53:10 +0530 Subject: [MM-12465] Added capability to export reactions of posts during bulk export (#9600) * Added capability to export reactions of posts * Added capability to export reactions of replies of a post * Added test case to test the reactions of a post --- app/export.go | 36 +++++++++++++++++++++++++++++++++++- app/export_converters.go | 8 ++++++++ app/export_test.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 app/export_test.go diff --git a/app/export.go b/app/export.go index a7a78cfee..b911954a5 100644 --- a/app/export.go +++ b/app/export.go @@ -249,8 +249,15 @@ func (a *App) ExportAllPosts(writer io.Writer) *model.AppError { return err } + reactions, err := a.BuildPostReactions(post.Id) + if err != nil { + return err + } + postLine.Post.Replies = replies + postLine.Post.Reactions = reactions + if err := a.ExportWriteLine(writer, postLine); err != nil { return err } @@ -272,8 +279,35 @@ func (a *App) buildPostReplies(postId string) (*[]ReplyImportData, *model.AppErr replyPosts := result.Data.([]*model.ReplyForExport) for _, reply := range replyPosts { - replies = append(replies, *ImportReplyFromPost(reply)) + replyImportObject := ImportReplyFromPost(reply) + if reply.HasReactions == true { + reactionsOfReply, err := a.BuildPostReactions(reply.Id) + if err != nil { + return nil, err + } + replyImportObject.Reactions = reactionsOfReply + } + replies = append(replies, *replyImportObject) } return &replies, nil } + +func (a *App) BuildPostReactions(postId string) (*[]ReactionImportData, *model.AppError) { + var reactionsOfPost []ReactionImportData + + result := <-a.Srv.Store.Reaction().GetForPost(postId, true) + + if result.Err != nil { + return nil, result.Err + } + + reactions := result.Data.([]*model.Reaction) + + for _, reaction := range reactions { + reactionsOfPost = append(reactionsOfPost, *ImportReactionFromPost(reaction)) + } + + return &reactionsOfPost, nil + +} diff --git a/app/export_converters.go b/app/export_converters.go index cafe360cb..3b536c6e3 100644 --- a/app/export_converters.go +++ b/app/export_converters.go @@ -111,3 +111,11 @@ func ImportReplyFromPost(post *model.ReplyForExport) *ReplyImportData { CreateAt: &post.CreateAt, } } + +func ImportReactionFromPost(reaction *model.Reaction) *ReactionImportData { + return &ReactionImportData{ + User: &reaction.UserId, + EmojiName: &reaction.EmojiName, + CreateAt: &reaction.CreateAt, + } +} diff --git a/app/export_test.go b/app/export_test.go new file mode 100644 index 000000000..05b81387a --- /dev/null +++ b/app/export_test.go @@ -0,0 +1,32 @@ +package app + +import ( + "github.com/stretchr/testify/assert" + "testing" + + "github.com/mattermost/mattermost-server/model" +) + +func TestReactionsOfPost(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + + post := th.BasicPost + post.HasReactions = true + + reactionObject := model.Reaction{ + UserId: model.NewId(), + PostId: post.Id, + EmojiName: "emoji", + CreateAt: model.GetMillis(), + } + + th.App.SaveReactionForPost(&reactionObject) + reactionsOfPost, err := th.App.BuildPostReactions(post.Id) + + if err != nil { + t.Fatal("should have reactions") + } + + assert.Equal(t, reactionObject.EmojiName, *(*reactionsOfPost)[0].EmojiName) +} -- cgit v1.2.3-1-g7c22