mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 07:18:06 +08:00
433fa74d87
Edge case during upgrade can cause accounts registered after migration prior to restart to have missing user option records
127 lines
4.2 KiB
Ruby
127 lines
4.2 KiB
Ruby
require 'rails_helper'
|
|
require_dependency 'user_option'
|
|
|
|
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_always).to eq(SiteSetting.default_email_always)
|
|
end
|
|
end
|
|
|
|
describe "should_be_redirected_to_top" do
|
|
let!(:user) { Fabricate(: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
|
|
|
|
end
|
|
|
|
describe "#mailing_list_mode" do
|
|
let!(:forum_user) { Fabricate(:user) }
|
|
let!(: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
|
|
let!(:user) { Fabricate(:user) }
|
|
|
|
it "should have no reason when `SiteSetting.redirect_users_to_top_page` is disabled" do
|
|
SiteSetting.expects(:redirect_users_to_top_page).returns(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.expects(:redirect_users_to_top_page).returns(true) }
|
|
|
|
it "should have no reason when top is not in the `SiteSetting.top_menu`" do
|
|
SiteSetting.expects(:top_menu).returns("latest")
|
|
expect(user.user_option.redirected_to_top).to eq(nil)
|
|
end
|
|
|
|
context "and when top is in the `SiteSetting.top_menu`" do
|
|
before { SiteSetting.expects(:top_menu).returns("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 "and 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
|
|
|
|
it "should have a reason for the first visit" do
|
|
expect(user.user_option.redirected_to_top).to eq({
|
|
reason: I18n.t('redirected_to_top_reasons.new_user'),
|
|
period: :monthly
|
|
})
|
|
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
|
|
end
|