From fe9a81208e4d8290df7b8d89bac2d880c045b84b Mon Sep 17 00:00:00 2001 From: Simone Salsi Date: Mon, 8 Oct 2018 18:01:27 +0200 Subject: Added the changes requested for MM-8860: Bulk import email intervals (#8498) (#9578) MM-8860: Bulk import email intervals (#8498) --- app/import_functions.go | 24 ++++++++++++++++++++++++ app/import_functions_test.go | 4 ++++ app/import_types.go | 1 + app/import_validators.go | 4 ++++ app/import_validators_test.go | 18 ++++++++++++++++++ 5 files changed, 51 insertions(+) (limited to 'app') diff --git a/app/import_functions.go b/app/import_functions.go index bec215eec..81acf0380 100644 --- a/app/import_functions.go +++ b/app/import_functions.go @@ -581,6 +581,30 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError { }) } + if data.EmailInterval != nil || savedUser.NotifyProps[model.EMAIL_NOTIFY_PROP] == "false" { + var intervalSeconds string + if value := savedUser.NotifyProps[model.EMAIL_NOTIFY_PROP]; value == "false" { + intervalSeconds = "0" + } else { + switch *data.EmailInterval { + case model.PREFERENCE_EMAIL_INTERVAL_IMMEDIATELY: + intervalSeconds = model.PREFERENCE_EMAIL_INTERVAL_NO_BATCHING_SECONDS + case model.PREFERENCE_EMAIL_INTERVAL_FIFTEEN: + intervalSeconds = model.PREFERENCE_EMAIL_INTERVAL_FIFTEEN_AS_SECONDS + case model.PREFERENCE_EMAIL_INTERVAL_HOUR: + intervalSeconds = model.PREFERENCE_EMAIL_INTERVAL_HOUR_AS_SECONDS + } + } + if intervalSeconds != "" { + preferences = append(preferences, model.Preference{ + UserId: savedUser.Id, + Category: model.PREFERENCE_CATEGORY_NOTIFICATIONS, + Name: model.PREFERENCE_NAME_EMAIL_INTERVAL, + Value: intervalSeconds, + }) + } + } + if len(preferences) > 0 { if result := <-a.Srv.Store.Preference().Save(&preferences); result.Err != nil { return model.NewAppError("BulkImport", "app.import.import_user.save_preferences.error", nil, result.Err.Error(), http.StatusInternalServerError) diff --git a/app/import_functions_test.go b/app/import_functions_test.go index 2e710a3df..5e950d7d5 100644 --- a/app/import_functions_test.go +++ b/app/import_functions_test.go @@ -1079,6 +1079,7 @@ func TestImportImportUser(t *testing.T) { UseMarkdownPreview: ptrStr("true"), UseFormatting: ptrStr("true"), ShowUnreadSection: ptrStr("true"), + EmailInterval: ptrStr("immediately"), } if err := th.App.ImportUser(&data, false); err != nil { t.Fatalf("Should have succeeded.") @@ -1099,6 +1100,7 @@ func TestImportImportUser(t *testing.T) { checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS, "feature_enabled_markdown_preview", *data.UseMarkdownPreview) checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_ADVANCED_SETTINGS, "formatting", *data.UseFormatting) checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_SIDEBAR_SETTINGS, "show_unread_section", *data.ShowUnreadSection) + checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_NOTIFICATIONS, model.PREFERENCE_NAME_EMAIL_INTERVAL, "30") // Change those preferences. data = UserImportData{ @@ -1110,6 +1112,7 @@ func TestImportImportUser(t *testing.T) { MessageDisplay: ptrStr("clean"), ChannelDisplayMode: ptrStr("full"), TutorialStep: ptrStr("2"), + EmailInterval: ptrStr("hour"), } if err := th.App.ImportUser(&data, false); err != nil { t.Fatalf("Should have succeeded.") @@ -1122,6 +1125,7 @@ func TestImportImportUser(t *testing.T) { checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS, model.PREFERENCE_NAME_MESSAGE_DISPLAY, *data.MessageDisplay) checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS, model.PREFERENCE_NAME_CHANNEL_DISPLAY_MODE, *data.ChannelDisplayMode) checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_TUTORIAL_STEPS, user.Id, *data.TutorialStep) + checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_NOTIFICATIONS, model.PREFERENCE_NAME_EMAIL_INTERVAL, "3600") // Set Notify Props data.NotifyProps = &UserNotifyPropsImportData{ diff --git a/app/import_types.go b/app/import_types.go index 1a2e44018..f8eb91f46 100644 --- a/app/import_types.go +++ b/app/import_types.go @@ -64,6 +64,7 @@ type UserImportData struct { MessageDisplay *string `json:"message_display,omitempty"` ChannelDisplayMode *string `json:"channel_display_mode,omitempty"` TutorialStep *string `json:"tutorial_step,omitempty"` + EmailInterval *string `json:"email_interval,omitempty"` NotifyProps *UserNotifyPropsImportData `json:"notify_props,omitempty"` } diff --git a/app/import_validators.go b/app/import_validators.go index 683ebb769..2522d709f 100644 --- a/app/import_validators.go +++ b/app/import_validators.go @@ -281,6 +281,10 @@ func validateUserImportData(data *UserImportData) *model.AppError { return model.NewAppError("BulkImport", "app.import.validate_user_import_data.advanced_props_show_unread_section.error", nil, "", http.StatusBadRequest) } + if data.EmailInterval != nil && !model.IsValidEmailBatchingInterval(*data.EmailInterval) { + return model.NewAppError("BulkImport", "app.import.validate_user_import_data.advanced_props_email_interval.error", nil, "", http.StatusBadRequest) + } + if data.Teams != nil { return validateUserTeamsImportData(data.Teams) } diff --git a/app/import_validators_test.go b/app/import_validators_test.go index 617b5cd96..d54edff21 100644 --- a/app/import_validators_test.go +++ b/app/import_validators_test.go @@ -660,6 +660,24 @@ func TestImportValidateUserImportData(t *testing.T) { data.NotifyProps.CommentsTrigger = ptrStr(model.COMMENTS_NOTIFY_ROOT) data.NotifyProps.MentionKeys = ptrStr("valid") checkNoError(t, validateUserImportData(&data)) + + //Test the emai batching interval validators + //Happy paths + data.EmailInterval = ptrStr("immediately") + checkNoError(t, validateUserImportData(&data)) + + data.EmailInterval = ptrStr("fifteen") + checkNoError(t, validateUserImportData(&data)) + + data.EmailInterval = ptrStr("hour") + checkNoError(t, validateUserImportData(&data)) + + //Invalid values + data.EmailInterval = ptrStr("invalid") + checkError(t, validateUserImportData(&data)) + + data.EmailInterval = ptrStr("") + checkError(t, validateUserImportData(&data)) } func TestImportValidateUserTeamsImportData(t *testing.T) { -- cgit v1.2.3-1-g7c22