summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorSimone Salsi <thedos@terminus.space>2018-10-08 18:01:27 +0200
committerGeorge Goldberg <george@gberg.me>2018-10-08 17:01:27 +0100
commitfe9a81208e4d8290df7b8d89bac2d880c045b84b (patch)
tree79db085e0447214d18dd145ec99eb67c50ff61c1 /app
parent9a4f3ce1e5b22a297eeb00b2aaff44f88304ae8c (diff)
downloadchat-fe9a81208e4d8290df7b8d89bac2d880c045b84b.tar.gz
chat-fe9a81208e4d8290df7b8d89bac2d880c045b84b.tar.bz2
chat-fe9a81208e4d8290df7b8d89bac2d880c045b84b.zip
Added the changes requested for MM-8860: Bulk import email intervals (#8498) (#9578)
MM-8860: Bulk import email intervals (#8498)
Diffstat (limited to 'app')
-rw-r--r--app/import_functions.go24
-rw-r--r--app/import_functions_test.go4
-rw-r--r--app/import_types.go1
-rw-r--r--app/import_validators.go4
-rw-r--r--app/import_validators_test.go18
5 files changed, 51 insertions, 0 deletions
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) {