mirror of
https://github.com/discourse/discourse.git
synced 2025-02-05 19:11:13 +00:00
Followup 30fdd7738ec942126bb055c9a6a8d69ddffba2da Adds a new site setting and corresponding user preference to disable smart lists. By default they are enabled, because this is a better experience for most users. A small number of users would prefer to not have this enabled. Smart lists automatically append new items to each list started in the composer when enter is pressed. If enter is pressed on an empty list item, it is cleared. This setting will be removed when the new composer is complete.
225 lines
8.2 KiB
Ruby
225 lines
8.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe UserOption do
|
|
describe "#ensure_consistency!" do
|
|
it "recreates missing user option records" do
|
|
user = Fabricate(:user)
|
|
user.user_option.destroy
|
|
UserOption.ensure_consistency!
|
|
|
|
user.reload
|
|
|
|
expect(user.user_option.email_level).to eq(SiteSetting.default_email_level)
|
|
expect(user.user_option.email_messages_level).to eq(SiteSetting.default_email_messages_level)
|
|
end
|
|
end
|
|
|
|
describe "defaults" do
|
|
fab!(:user)
|
|
|
|
it "should be redirected to top when there is a reason to" do
|
|
user.user_option.expects(:redirected_to_top).returns(reason: "42")
|
|
expect(user.user_option.should_be_redirected_to_top).to eq(true)
|
|
end
|
|
|
|
it "should not be redirected to top when there is no reason to" do
|
|
user.user_option.expects(:redirected_to_top).returns(nil)
|
|
expect(user.user_option.should_be_redirected_to_top).to eq(false)
|
|
end
|
|
|
|
it "should not hide the profile and presence by default" do
|
|
expect(user.user_option.hide_profile_and_presence).to eq(false)
|
|
end
|
|
|
|
it "should correctly set digest frequency" do
|
|
SiteSetting.default_email_digest_frequency = 1440
|
|
user = Fabricate(:user)
|
|
expect(user.user_option.email_digests).to eq(true)
|
|
expect(user.user_option.digest_after_minutes).to eq(1440)
|
|
end
|
|
|
|
it "should correctly set digest frequency when disabled" do
|
|
SiteSetting.default_email_digest_frequency = 0
|
|
user = Fabricate(:user)
|
|
expect(user.user_option.email_digests).to eq(false)
|
|
expect(user.user_option.digest_after_minutes).to eq(0)
|
|
end
|
|
|
|
it "should correctly set sidebar_link_to_filtered_list when `default_sidebar_link_to_filtered_list` site setting is enabled" do
|
|
SiteSetting.default_sidebar_link_to_filtered_list = true
|
|
user = Fabricate(:user)
|
|
expect(user.user_option.sidebar_link_to_filtered_list).to eq(true)
|
|
end
|
|
|
|
it "should correctly set sidebar_link_to_filtered_list when `default_sidebar_link_to_filtered_list` site setting is disabled" do
|
|
SiteSetting.default_sidebar_link_to_filtered_list = false
|
|
user = Fabricate(:user)
|
|
expect(user.user_option.sidebar_link_to_filtered_list).to eq(false)
|
|
end
|
|
|
|
it "should correctly set sidebar_show_count_of_new_items when `default_sidebar_show_count_of_new_items` site setting is enabled" do
|
|
SiteSetting.default_sidebar_show_count_of_new_items = true
|
|
user = Fabricate(:user)
|
|
expect(user.user_option.sidebar_show_count_of_new_items).to eq(true)
|
|
end
|
|
|
|
it "should correctly set sidebar_show_count_of_new_items when `default_sidebar_show_count_of_new_items` site setting is disabled" do
|
|
SiteSetting.default_sidebar_show_count_of_new_items = false
|
|
user = Fabricate(:user)
|
|
expect(user.user_option.sidebar_show_count_of_new_items).to eq(false)
|
|
end
|
|
end
|
|
|
|
describe "site settings" do
|
|
it "should apply defaults from site settings" do
|
|
SiteSetting.default_other_enable_quoting = false
|
|
SiteSetting.default_other_enable_smart_lists = false
|
|
SiteSetting.default_other_enable_defer = true
|
|
SiteSetting.default_other_external_links_in_new_tab = true
|
|
SiteSetting.default_other_dynamic_favicon = true
|
|
SiteSetting.default_other_skip_new_user_tips = true
|
|
|
|
user = Fabricate(:user)
|
|
|
|
expect(user.user_option.enable_quoting).to eq(false)
|
|
expect(user.user_option.enable_smart_lists).to eq(false)
|
|
expect(user.user_option.enable_defer).to eq(true)
|
|
expect(user.user_option.external_links_in_new_tab).to eq(true)
|
|
expect(user.user_option.dynamic_favicon).to eq(true)
|
|
expect(user.user_option.skip_new_user_tips).to eq(true)
|
|
end
|
|
end
|
|
|
|
describe "#mailing_list_mode" do
|
|
fab!(:forum_user) { Fabricate(:user) }
|
|
fab!(:mailing_list_user) { Fabricate(:user) }
|
|
|
|
before do
|
|
forum_user.user_option.update(mailing_list_mode: false)
|
|
mailing_list_user.user_option.update(mailing_list_mode: true)
|
|
end
|
|
|
|
it "should return false when `SiteSetting.disable_mailing_list_mode` is enabled" do
|
|
SiteSetting.disable_mailing_list_mode = true
|
|
expect(forum_user.user_option.mailing_list_mode).to eq(false)
|
|
expect(mailing_list_user.user_option.mailing_list_mode).to eq(false)
|
|
end
|
|
|
|
it "should return the stored value when `SiteSetting.disable_mailing_list_mode` is disabled" do
|
|
SiteSetting.disable_mailing_list_mode = false
|
|
expect(forum_user.user_option.mailing_list_mode).to eq(false)
|
|
expect(mailing_list_user.user_option.mailing_list_mode).to eq(true)
|
|
end
|
|
end
|
|
|
|
describe ".redirected_to_top" do
|
|
fab!(:user)
|
|
|
|
it "should have no reason when `SiteSetting.redirect_users_to_top_page` is disabled" do
|
|
SiteSetting.redirect_users_to_top_page = false
|
|
expect(user.user_option.redirected_to_top).to eq(nil)
|
|
end
|
|
|
|
context "when `SiteSetting.redirect_users_to_top_page` is enabled" do
|
|
before { SiteSetting.redirect_users_to_top_page = true }
|
|
|
|
it "should have no reason when top is not in the `SiteSetting.top_menu`" do
|
|
SiteSetting.top_menu = "latest"
|
|
expect(user.user_option.redirected_to_top).to eq(nil)
|
|
end
|
|
|
|
context "when top is in the `SiteSetting.top_menu`" do
|
|
before { SiteSetting.top_menu = "latest|top" }
|
|
|
|
it "should have no reason when there are not enough topics" do
|
|
SiteSetting.expects(:min_redirected_to_top_period).returns(nil)
|
|
expect(user.user_option.redirected_to_top).to eq(nil)
|
|
end
|
|
|
|
context "when there are enough topics" do
|
|
before { SiteSetting.expects(:min_redirected_to_top_period).returns(:monthly) }
|
|
|
|
describe "a new user" do
|
|
before do
|
|
user.stubs(:trust_level).returns(0)
|
|
user.stubs(:last_seen_at).returns(5.minutes.ago)
|
|
end
|
|
|
|
after { Discourse.redis.flushdb }
|
|
|
|
it "should have a reason for the first visit" do
|
|
freeze_time do
|
|
delay = SiteSetting.active_user_rate_limit_secs / 2
|
|
|
|
expect_enqueued_with(
|
|
job: :update_top_redirection,
|
|
args: {
|
|
user_id: user.id,
|
|
redirected_at: Time.zone.now.to_s,
|
|
},
|
|
at: Time.zone.now + delay,
|
|
) do
|
|
expect(user.user_option.redirected_to_top).to eq(
|
|
reason: I18n.t("redirected_to_top_reasons.new_user"),
|
|
period: :monthly,
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
it "should not have a reason for next visits" do
|
|
user.user_option.expects(:last_redirected_to_top_at).returns(10.minutes.ago)
|
|
user.user_option.expects(:update_last_redirected_to_top!).never
|
|
|
|
expect(user.user_option.redirected_to_top).to eq(nil)
|
|
end
|
|
end
|
|
|
|
describe "an older user" do
|
|
before { user.stubs(:trust_level).returns(1) }
|
|
|
|
it "should have a reason when the user hasn't been seen in a month" do
|
|
user.last_seen_at = 2.months.ago
|
|
user.user_option.expects(:update_last_redirected_to_top!).once
|
|
|
|
expect(user.user_option.redirected_to_top).to eq(
|
|
reason: I18n.t("redirected_to_top_reasons.not_seen_in_a_month"),
|
|
period: :monthly,
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe ".user_tzinfo" do
|
|
fab!(:user)
|
|
|
|
context "with user with valid timezone given" do
|
|
before { user.user_option.update(timezone: "Europe/Paris") }
|
|
|
|
it "returns the expect timezone" do
|
|
expect(UserOption.user_tzinfo(user.id)).to eq(
|
|
ActiveSupport::TimeZone.find_tzinfo("Europe/Paris"),
|
|
)
|
|
end
|
|
|
|
it "works for Europe/Kyiv" do
|
|
user.user_option.update(timezone: "Europe/Kyiv")
|
|
expect(UserOption.user_tzinfo(user.id)).to eq(
|
|
ActiveSupport::TimeZone.find_tzinfo("Europe/Kyiv"),
|
|
)
|
|
end
|
|
end
|
|
|
|
context "with user with invalid timezone given" do
|
|
before { user.user_option.update(timezone: "Catopia/Catcity") }
|
|
|
|
it "fallbacks to UTC" do
|
|
expect(UserOption.user_tzinfo(user.id)).to eq(ActiveSupport::TimeZone.find_tzinfo("UTC"))
|
|
end
|
|
end
|
|
end
|
|
end
|