mirror of
https://github.com/discourse/discourse.git
synced 2024-12-13 11:26:18 +08:00
27bdfb6437
Some checks are pending
Licenses / run (push) Waiting to run
Linting / run (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (annotations, core) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (backend, core) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (backend, plugins) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (frontend, plugins) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (frontend, themes) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, chat) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, core) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, plugins) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, themes) (push) Waiting to run
Tests / core frontend (${{ matrix.browser }}) (Chrome) (push) Waiting to run
Tests / core frontend (${{ matrix.browser }}) (Firefox ESR) (push) Waiting to run
Tests / core frontend (${{ matrix.browser }}) (Firefox Evergreen) (push) Waiting to run
Followup 30fdd7738e
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
|