FEATURE: add more granular user option levels for email notifications (#7143)

Migrates email user options to a new data structure, where `email_always`, `email_direct` and `email_private_messages` are replace by

* `email_messages_level`, with options: `always`, `only_when_away` and `never` (defaults to `always`)
* `email_level`, with options: `always`, `only_when_away` and `never` (defaults to `only_when_away`)
This commit is contained in:
Penar Musaraj
2019-03-15 10:55:11 -04:00
committed by GitHub
parent 93490fbfaf
commit 9334d2f4f7
37 changed files with 334 additions and 118 deletions

View File

@ -265,8 +265,8 @@ describe User do
expect(subject.email_tokens).to be_present
expect(subject.user_stat).to be_present
expect(subject.user_profile).to be_present
expect(subject.user_option.email_private_messages).to eq(true)
expect(subject.user_option.email_direct).to eq(true)
expect(subject.user_option.email_messages_level).to eq(UserOption.email_level_types[:always])
expect(subject.user_option.email_level).to eq(UserOption.email_level_types[:only_when_away])
end
end
@ -1461,10 +1461,9 @@ describe User do
before do
SiteSetting.default_email_digest_frequency = 1440 # daily
SiteSetting.default_email_personal_messages = false
SiteSetting.default_email_direct = false
SiteSetting.default_email_level = UserOption.email_level_types[:never]
SiteSetting.default_email_messages_level = UserOption.email_level_types[:never]
SiteSetting.default_email_mailing_list_mode = true
SiteSetting.default_email_always = true
SiteSetting.default_other_new_topic_duration_minutes = -1 # not viewed
SiteSetting.default_other_auto_track_topics_after_msecs = 0 # immediately
@ -1485,16 +1484,15 @@ describe User do
it "has overriden preferences" do
user = Fabricate(:user)
options = user.user_option
expect(options.email_always).to eq(true)
expect(options.mailing_list_mode).to eq(true)
expect(options.digest_after_minutes).to eq(1440)
expect(options.email_private_messages).to eq(false)
expect(options.email_level).to eq(UserOption.email_level_types[:never])
expect(options.email_messages_level).to eq(UserOption.email_level_types[:never])
expect(options.external_links_in_new_tab).to eq(true)
expect(options.enable_quoting).to eq(false)
expect(options.dynamic_favicon).to eq(true)
expect(options.disable_jump_reply).to eq(true)
expect(options.automatically_unpin_topics).to eq(false)
expect(options.email_direct).to eq(false)
expect(options.new_topic_duration_minutes).to eq(-1)
expect(options.auto_track_topics_after_msecs).to eq(0)
expect(options.notification_level_when_replying).to eq(3)
@ -1518,7 +1516,7 @@ describe User do
it "Creates a UserOption row when a user record is created and destroys once done" do
user = Fabricate(:user)
expect(user.user_option.email_always).to eq(false)
expect(user.user_option.email_level).to eq(UserOption.email_level_types[:only_when_away])
user_id = user.id
user.destroy!