mirror of
https://github.com/discourse/discourse.git
synced 2025-05-24 14:12:10 +08:00
FIX: updating needs a restart
This commit is contained in:
@ -1,16 +1,12 @@
|
|||||||
class TopicTitleLengthValidator < ActiveModel::EachValidator
|
class TopicTitleLengthValidator < ActiveModel::EachValidator
|
||||||
|
|
||||||
def initialize(options)
|
|
||||||
@topic_title_validator = ActiveModel::Validations::LengthValidator.new({attributes: :title, in: SiteSetting.topic_title_length, allow_blank: true})
|
|
||||||
@private_message_title_validator = ActiveModel::Validations::LengthValidator.new({attributes: :title, in: SiteSetting.private_message_title_length, allow_blank: true})
|
|
||||||
super
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_each(record, attribute, value)
|
def validate_each(record, attribute, value)
|
||||||
if record.private_message?
|
if record.private_message?
|
||||||
@private_message_title_validator.validate_each(record, attribute, value)
|
private_message_title_validator = ActiveModel::Validations::LengthValidator.new({attributes: :title, in: SiteSetting.private_message_title_length, allow_blank: true})
|
||||||
|
private_message_title_validator.validate_each(record, attribute, value)
|
||||||
else
|
else
|
||||||
@topic_title_validator.validate_each(record, attribute, value)
|
topic_title_validator = ActiveModel::Validations::LengthValidator.new({attributes: :title, in: SiteSetting.topic_title_length, allow_blank: true})
|
||||||
|
topic_title_validator.validate_each(record, attribute, value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -5,8 +5,11 @@ require 'validators/topic_title_length_validator'
|
|||||||
|
|
||||||
describe TopicTitleLengthValidator do
|
describe TopicTitleLengthValidator do
|
||||||
|
|
||||||
let(:validator) { TopicTitleLengthValidator.new({attributes: :title}) }
|
# simulate Rails behavior (singleton)
|
||||||
subject(:validate) { validator.validate_each(record,:title,record.title) }
|
def validate
|
||||||
|
@validator ||= TopicTitleLengthValidator.new({ attributes: :title })
|
||||||
|
@validator.validate_each(record,:title,record.title)
|
||||||
|
end
|
||||||
|
|
||||||
shared_examples "validating any topic title" do
|
shared_examples "validating any topic title" do
|
||||||
it 'adds an error when topic title is greater than SiteSetting.max_topic_title_length' do
|
it 'adds an error when topic title is greater than SiteSetting.max_topic_title_length' do
|
||||||
@ -31,14 +34,22 @@ describe TopicTitleLengthValidator do
|
|||||||
expect(record.errors[:title]).to_not be_present
|
expect(record.errors[:title]).to_not be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'is up to date' do
|
||||||
|
record.title = 'a' * (SiteSetting.min_topic_title_length)
|
||||||
|
validate
|
||||||
|
expect(record.errors[:title]).to_not be_present
|
||||||
|
|
||||||
|
SiteSetting.stubs(:min_topic_title_length).returns(2)
|
||||||
|
|
||||||
|
record.title = 'aaa'
|
||||||
|
validate
|
||||||
|
expect(record.errors[:title]).to_not be_present
|
||||||
|
end
|
||||||
|
|
||||||
include_examples "validating any topic title"
|
include_examples "validating any topic title"
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'private message' do
|
describe 'private message' do
|
||||||
before do
|
|
||||||
SiteSetting.stubs(:min_private_message_title_length).returns(3)
|
|
||||||
end
|
|
||||||
|
|
||||||
let(:record) { Fabricate.build(:private_message_topic) }
|
let(:record) { Fabricate.build(:private_message_topic) }
|
||||||
|
|
||||||
it 'adds an error when topic title is shorter than SiteSetting.min_private_message_title_length' do
|
it 'adds an error when topic title is shorter than SiteSetting.min_private_message_title_length' do
|
||||||
@ -48,7 +59,6 @@ describe TopicTitleLengthValidator do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'does not add an error when topic title is shorter than SiteSetting.min_topic_title_length' do
|
it 'does not add an error when topic title is shorter than SiteSetting.min_topic_title_length' do
|
||||||
SiteSetting.stubs(:min_topic_title_length).returns(15)
|
|
||||||
record.title = 'a' * (SiteSetting.min_private_message_title_length)
|
record.title = 'a' * (SiteSetting.min_private_message_title_length)
|
||||||
validate
|
validate
|
||||||
expect(record.errors[:title]).to_not be_present
|
expect(record.errors[:title]).to_not be_present
|
||||||
|
Reference in New Issue
Block a user