mirror of
https://github.com/discourse/discourse.git
synced 2025-05-30 15:28:37 +08:00
FIX: Minimum username length should be validated (#31332)
`@min_length_violation` was not defined and that made the range of values error message to never be displayed.
This commit is contained in:
@ -18,7 +18,7 @@ class MinUsernameLengthValidator
|
||||
end
|
||||
|
||||
def error_message
|
||||
if @min_length_violation
|
||||
if @min_range_violation
|
||||
I18n.t(
|
||||
"site_settings.errors.invalid_integer_min_max",
|
||||
min: MIN_USERNAME_LENGTH_RANGE.begin,
|
||||
|
@ -12,32 +12,52 @@ RSpec.describe MaxUsernameLengthValidator do
|
||||
|
||||
describe "checks for valid ranges" do
|
||||
it "fails for values below the valid range" do
|
||||
expect do SiteSetting.max_username_length = 5 end.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
it "fails for values above the valid range" do
|
||||
expect do SiteSetting.max_username_length = 61 end.to raise_error(
|
||||
Discourse::InvalidParameters,
|
||||
expect { SiteSetting.max_username_length = 5 }.to raise_error(Discourse::InvalidParameters)
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(5)).to eq(false)
|
||||
expect(validator.error_message).to eq(
|
||||
I18n.t(
|
||||
"site_settings.errors.invalid_integer_min_max",
|
||||
min: MaxUsernameLengthValidator::MAX_USERNAME_LENGTH_RANGE.begin,
|
||||
max: MaxUsernameLengthValidator::MAX_USERNAME_LENGTH_RANGE.end,
|
||||
),
|
||||
)
|
||||
end
|
||||
|
||||
it "fails for values above the valid range" do
|
||||
expect { SiteSetting.max_username_length = 61 }.to raise_error(Discourse::InvalidParameters)
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(61)).to eq(false)
|
||||
expect(validator.error_message).to eq(
|
||||
I18n.t(
|
||||
"site_settings.errors.invalid_integer_min_max",
|
||||
min: MaxUsernameLengthValidator::MAX_USERNAME_LENGTH_RANGE.begin,
|
||||
max: MaxUsernameLengthValidator::MAX_USERNAME_LENGTH_RANGE.end,
|
||||
),
|
||||
)
|
||||
end
|
||||
|
||||
it "works for values within the valid range" do
|
||||
expect do SiteSetting.max_username_length = 42 end.not_to raise_error
|
||||
expect { SiteSetting.max_username_length = 42 }.not_to raise_error
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(42)).to eq(true)
|
||||
end
|
||||
end
|
||||
|
||||
it "checks for users with short usernames" do
|
||||
username = "jackjackjack"
|
||||
Fabricate(:user, username: username)
|
||||
Fabricate(:user, username: "jackjackjack")
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(12)).to eq(true),
|
||||
"Valid as 12 >= #{SiteSetting.min_username_length}"
|
||||
expect(validator.valid_value?(12)).to eq(true)
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(11)).to eq(false),
|
||||
"Invalid as 11 < #{SiteSetting.min_username_length}"
|
||||
expect(validator.valid_value?(11)).to eq(false)
|
||||
|
||||
expect(validator.error_message).to eq(
|
||||
I18n.t("site_settings.errors.max_username_length_exists", username: username),
|
||||
I18n.t("site_settings.errors.max_username_length_exists", username: "jackjackjack"),
|
||||
)
|
||||
end
|
||||
end
|
||||
|
@ -11,20 +11,43 @@ RSpec.describe MinUsernameLengthValidator do
|
||||
|
||||
describe "checks for valid ranges" do
|
||||
it "fails for values below the valid range" do
|
||||
expect do SiteSetting.min_username_length = 0 end.to raise_error(Discourse::InvalidParameters)
|
||||
end
|
||||
it "fails for values above the valid range" do
|
||||
expect do SiteSetting.min_username_length = 61 end.to raise_error(
|
||||
Discourse::InvalidParameters,
|
||||
expect { SiteSetting.min_username_length = 0 }.to raise_error(Discourse::InvalidParameters)
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(0)).to eq(false)
|
||||
expect(validator.error_message).to eq(
|
||||
I18n.t(
|
||||
"site_settings.errors.invalid_integer_min_max",
|
||||
min: MinUsernameLengthValidator::MIN_USERNAME_LENGTH_RANGE.begin,
|
||||
max: MinUsernameLengthValidator::MIN_USERNAME_LENGTH_RANGE.end,
|
||||
),
|
||||
)
|
||||
end
|
||||
|
||||
it "fails for values above the valid range" do
|
||||
expect { SiteSetting.min_username_length = 61 }.to raise_error(Discourse::InvalidParameters)
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(61)).to eq(false)
|
||||
expect(validator.error_message).to eq(
|
||||
I18n.t(
|
||||
"site_settings.errors.invalid_integer_min_max",
|
||||
min: MinUsernameLengthValidator::MIN_USERNAME_LENGTH_RANGE.begin,
|
||||
max: MinUsernameLengthValidator::MIN_USERNAME_LENGTH_RANGE.end,
|
||||
),
|
||||
)
|
||||
end
|
||||
|
||||
it "works for values within the valid range" do
|
||||
expect do SiteSetting.min_username_length = 4 end.not_to raise_error
|
||||
expect { SiteSetting.min_username_length = 4 }.not_to raise_error
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(4)).to eq(true)
|
||||
end
|
||||
end
|
||||
|
||||
it "checks for users with short usernames" do
|
||||
user = Fabricate(:user, username: "jack")
|
||||
Fabricate(:user, username: "jack")
|
||||
|
||||
validator = described_class.new
|
||||
expect(validator.valid_value?(4)).to eq(true)
|
||||
|
Reference in New Issue
Block a user