FIX: Admins should be able to post short titles. This is especially important for when syndicating

a blog via the wordpress plugin into Discourse.
This commit is contained in:
Robin Ward 2013-06-29 17:57:10 -04:00
parent e076661759
commit 023d18cab2
3 changed files with 32 additions and 9 deletions

View file

@ -185,8 +185,8 @@ class PostCreator
def setup_post def setup_post
post = @topic.posts.new(raw: @opts[:raw], post = @topic.posts.new(raw: @opts[:raw],
user: @user, user: @user,
reply_to_post_number: @opts[:reply_to_post_number]) reply_to_post_number: @opts[:reply_to_post_number])
# Attributes we pass through to the post instance if present # Attributes we pass through to the post instance if present
[:post_type, :no_bump, :cooking_options, :image_sizes, :acting_user, :invalidate_oneboxes].each do |a| [:post_type, :no_bump, :cooking_options, :image_sizes, :acting_user, :invalidate_oneboxes].each do |a|

View file

@ -1,12 +1,21 @@
class TopicTitleLengthValidator < ActiveModel::EachValidator class TopicTitleLengthValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value) def validate_each(record, attribute, value)
if record.private_message? title_validator(record).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
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
private
def title_validator(record)
length_range = if record.user.try(:admin?)
1..SiteSetting.max_topic_title_length
elsif record.private_message?
SiteSetting.private_message_title_length
else
SiteSetting.topic_title_length
end
ActiveModel::Validations::LengthValidator.new({attributes: :title, in: length_range, allow_blank: true})
end
end end

View file

@ -69,6 +69,20 @@ describe Topic do
end end
end end
context 'admin topic title' do
let(:admin) { Fabricate(:admin) }
it 'allows really short titles' do
pm = Fabricate.build(:private_message_topic, user: admin, title: 'a')
expect(pm).to be_valid
end
it 'but not blank' do
pm = Fabricate.build(:private_message_topic, title: '')
expect(pm).to_not be_valid
end
end
context 'topic title uniqueness' do context 'topic title uniqueness' do
let!(:topic) { Fabricate(:topic) } let!(:topic) { Fabricate(:topic) }