mirror of
https://github.com/discourse/discourse.git
synced 2025-01-16 03:52:41 +08:00
3187606d34
This commit replaces the `full_name_required` setting with a new `full_name_requirement` setting to allow more flexibility with the name field in the signup form. The new setting has 2 options, "Required at signup" and "Optional at signup", which are equivalent to the true/false possibilities of the old setting, and a third option "Hidden at signup" that hides the name field from the signup form, making it effectively optional too. New sites will have the "Hidden at signup" option as the default option, and existing site will continue to use the option that maps to their current configuration. Internal topic: t/136746.
94 lines
3.0 KiB
Ruby
94 lines
3.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe AnonymousShadowCreator do
|
|
it "returns no shadow by default" do
|
|
expect(AnonymousShadowCreator.get(Fabricate.build(:user))).to eq(nil)
|
|
end
|
|
|
|
context "when anonymous posting is enabled" do
|
|
fab!(:user) { Fabricate(:user, trust_level: TrustLevel[3]) }
|
|
|
|
before do
|
|
SiteSetting.allow_anonymous_posting = true
|
|
SiteSetting.anonymous_posting_allowed_groups = "11"
|
|
end
|
|
|
|
it "returns no shadow if the user is not in a group that is allowed to anonymously post" do
|
|
user = Fabricate(:user, trust_level: TrustLevel[0])
|
|
expect(AnonymousShadowCreator.get(user)).to eq(nil)
|
|
end
|
|
|
|
it "returns no shadow if must_approve_users is true and user is not approved" do
|
|
SiteSetting.must_approve_users = true
|
|
expect(AnonymousShadowCreator.get(Fabricate.build(:user, approved: false))).to eq(nil)
|
|
end
|
|
|
|
it "returns a new shadow once time expires" do
|
|
SiteSetting.anonymous_account_duration_minutes = 1
|
|
|
|
shadow = AnonymousShadowCreator.get(user)
|
|
|
|
freeze_time 2.minutes.from_now
|
|
shadow2 = AnonymousShadowCreator.get(user)
|
|
|
|
expect(shadow.id).to eq(shadow2.id)
|
|
shadow.send(:trigger_user_automatic_group_refresh)
|
|
create_post(user: shadow)
|
|
|
|
user.reload
|
|
shadow.reload
|
|
|
|
freeze_time 4.minutes.from_now
|
|
shadow3 = AnonymousShadowCreator.get(user)
|
|
|
|
expect(shadow3.user_option.email_digests).to eq(false)
|
|
expect(shadow3.user_option.email_messages_level).to eq(UserOption.email_level_types[:never])
|
|
|
|
expect(shadow2.id).not_to eq(shadow3.id)
|
|
end
|
|
|
|
it "returns a shadow for a legit user" do
|
|
shadow = AnonymousShadowCreator.get(user)
|
|
shadow2 = AnonymousShadowCreator.get(user)
|
|
|
|
expect(shadow.id).to eq(shadow2.id)
|
|
|
|
expect(shadow.trust_level).to eq(1)
|
|
expect(shadow.username).to eq("anonymous")
|
|
|
|
expect(shadow.created_at).not_to eq_time(user.created_at)
|
|
|
|
p = create_post
|
|
|
|
expect(Guardian.new(shadow).post_can_act?(p, :like)).to eq(false)
|
|
expect(Guardian.new(user).post_can_act?(p, :like)).to eq(true)
|
|
|
|
expect(user.anonymous?).to eq(false)
|
|
expect(shadow.anonymous?).to eq(true)
|
|
end
|
|
|
|
it "works even when names are required" do
|
|
SiteSetting.full_name_requirement = "required_at_signup"
|
|
|
|
expect { AnonymousShadowCreator.get(user) }.to_not raise_error
|
|
end
|
|
|
|
it "works when there is an email allowlist" do
|
|
SiteSetting.allowed_email_domains = "wayne.com"
|
|
|
|
expect { AnonymousShadowCreator.get(user) }.to_not raise_error
|
|
end
|
|
|
|
it "falls back to username 'anonymous' if the translation for 'anonymous' consists entirely of disallowed characters" do
|
|
# use russian locale but do not allow russian characters:
|
|
I18n.locale = :ru
|
|
SiteSetting.unicode_usernames = true
|
|
SiteSetting.allowed_unicode_username_characters = "[äöü]"
|
|
|
|
shadow = AnonymousShadowCreator.get(user)
|
|
|
|
expect(shadow.username).to eq("anonymous")
|
|
end
|
|
end
|
|
end
|