From 54b7a29581c8d93c876a2a5840b05410f2a35fb9 Mon Sep 17 00:00:00 2001 From: Vadim Date: Wed, 24 Oct 2018 17:34:43 +0300 Subject: MM-12459 Include User Notify Props in the Bulk Export (#9724) --- app/export.go | 23 +++++++++++++++++++++++ app/export_test.go | 31 ++++++++++++++++++++++++++++++- model/user.go | 34 ++++++++++++++++++---------------- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/app/export.go b/app/export.go index b911954a5..7c1736157 100644 --- a/app/export.go +++ b/app/export.go @@ -150,6 +150,8 @@ func (a *App) ExportAllUsers(writer io.Writer) *model.AppError { userLine := ImportLineFromUser(user) + userLine.User.NotifyProps = a.buildUserNotifyProps(user.NotifyProps) + // Do the Team Memberships. members, err := a.buildUserTeamAndChannelMemberships(user.Id) if err != nil { @@ -218,6 +220,27 @@ func (a *App) buildUserChannelMemberships(userId string, teamId string) (*[]User return &memberships, nil } +func (a *App) buildUserNotifyProps(notifyProps model.StringMap) *UserNotifyPropsImportData { + + getProp := func(key string) *string { + if v, ok := notifyProps[key]; ok { + return &v + } + return nil + } + + return &UserNotifyPropsImportData{ + Desktop: getProp(model.DESKTOP_NOTIFY_PROP), + DesktopSound: getProp(model.DESKTOP_SOUND_NOTIFY_PROP), + Email: getProp(model.EMAIL_NOTIFY_PROP), + Mobile: getProp(model.MOBILE_NOTIFY_PROP), + MobilePushStatus: getProp(model.MOBILE_PUSH_STATUS_NOTIFY_PROP), + ChannelTrigger: getProp(model.CHANNEL_MENTIONS_NOTIFY_PROP), + CommentsTrigger: getProp(model.COMMENTS_NOTIFY_PROP), + MentionKeys: getProp(model.MENTION_KEYS_NOTIFY_PROP), + } +} + func (a *App) ExportAllPosts(writer io.Writer) *model.AppError { afterId := strings.Repeat("0", 26) for { diff --git a/app/export_test.go b/app/export_test.go index 05b81387a..bb6d53392 100644 --- a/app/export_test.go +++ b/app/export_test.go @@ -1,10 +1,11 @@ package app import ( - "github.com/stretchr/testify/assert" "testing" "github.com/mattermost/mattermost-server/model" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestReactionsOfPost(t *testing.T) { @@ -30,3 +31,31 @@ func TestReactionsOfPost(t *testing.T) { assert.Equal(t, reactionObject.EmojiName, *(*reactionsOfPost)[0].EmojiName) } + +func TestExportUserNotifyProps(t *testing.T) { + + th := Setup().InitBasic() + defer th.TearDown() + + userNotifyProps := model.StringMap{ + model.DESKTOP_NOTIFY_PROP: model.USER_NOTIFY_ALL, + model.DESKTOP_SOUND_NOTIFY_PROP: "true", + model.EMAIL_NOTIFY_PROP: "true", + model.MOBILE_NOTIFY_PROP: model.USER_NOTIFY_ALL, + model.MOBILE_PUSH_STATUS_NOTIFY_PROP: model.STATUS_ONLINE, + model.CHANNEL_MENTIONS_NOTIFY_PROP: "true", + model.COMMENTS_NOTIFY_PROP: model.COMMENTS_NOTIFY_ROOT, + model.MENTION_KEYS_NOTIFY_PROP: "valid,misc", + } + + exportNotifyProps := th.App.buildUserNotifyProps(userNotifyProps) + + require.Equal(t, userNotifyProps[model.DESKTOP_NOTIFY_PROP], *exportNotifyProps.Desktop) + require.Equal(t, userNotifyProps[model.DESKTOP_SOUND_NOTIFY_PROP], *exportNotifyProps.DesktopSound) + require.Equal(t, userNotifyProps[model.EMAIL_NOTIFY_PROP], *exportNotifyProps.Email) + require.Equal(t, userNotifyProps[model.MOBILE_NOTIFY_PROP], *exportNotifyProps.Mobile) + require.Equal(t, userNotifyProps[model.MOBILE_PUSH_STATUS_NOTIFY_PROP], *exportNotifyProps.MobilePushStatus) + require.Equal(t, userNotifyProps[model.CHANNEL_MENTIONS_NOTIFY_PROP], *exportNotifyProps.ChannelTrigger) + require.Equal(t, userNotifyProps[model.COMMENTS_NOTIFY_PROP], *exportNotifyProps.CommentsTrigger) + require.Equal(t, userNotifyProps[model.MENTION_KEYS_NOTIFY_PROP], *exportNotifyProps.MentionKeys) +} diff --git a/model/user.go b/model/user.go index 06ad9294f..40ccd1661 100644 --- a/model/user.go +++ b/model/user.go @@ -16,22 +16,24 @@ import ( ) const ( - ME = "me" - USER_NOTIFY_ALL = "all" - USER_NOTIFY_MENTION = "mention" - USER_NOTIFY_NONE = "none" - DESKTOP_NOTIFY_PROP = "desktop" - DESKTOP_SOUND_NOTIFY_PROP = "desktop_sound" - MARK_UNREAD_NOTIFY_PROP = "mark_unread" - PUSH_NOTIFY_PROP = "push" - PUSH_STATUS_NOTIFY_PROP = "push_status" - EMAIL_NOTIFY_PROP = "email" - CHANNEL_MENTIONS_NOTIFY_PROP = "channel" - COMMENTS_NOTIFY_PROP = "comments" - MENTION_KEYS_NOTIFY_PROP = "mention_keys" - COMMENTS_NOTIFY_NEVER = "never" - COMMENTS_NOTIFY_ROOT = "root" - COMMENTS_NOTIFY_ANY = "any" + ME = "me" + USER_NOTIFY_ALL = "all" + USER_NOTIFY_MENTION = "mention" + USER_NOTIFY_NONE = "none" + DESKTOP_NOTIFY_PROP = "desktop" + DESKTOP_SOUND_NOTIFY_PROP = "desktop_sound" + MARK_UNREAD_NOTIFY_PROP = "mark_unread" + PUSH_NOTIFY_PROP = "push" + PUSH_STATUS_NOTIFY_PROP = "push_status" + EMAIL_NOTIFY_PROP = "email" + MOBILE_NOTIFY_PROP = "mobile" + MOBILE_PUSH_STATUS_NOTIFY_PROP = "mobile_push_status" + CHANNEL_MENTIONS_NOTIFY_PROP = "channel" + COMMENTS_NOTIFY_PROP = "comments" + MENTION_KEYS_NOTIFY_PROP = "mention_keys" + COMMENTS_NOTIFY_NEVER = "never" + COMMENTS_NOTIFY_ROOT = "root" + COMMENTS_NOTIFY_ANY = "any" DEFAULT_LOCALE = "en" USER_AUTH_SERVICE_EMAIL = "email" -- cgit v1.2.3-1-g7c22