2013-05-23 00:52:12 -04:00
|
|
|
# encoding: UTF-8
|
2019-04-29 20:27:42 -04:00
|
|
|
# frozen_string_literal: true
|
2013-05-23 00:52:12 -04:00
|
|
|
|
2015-10-11 05:41:23 -04:00
|
|
|
require 'rails_helper'
|
2013-05-23 00:52:12 -04:00
|
|
|
require 'validators/quality_title_validator'
|
|
|
|
require 'ostruct'
|
|
|
|
|
|
|
|
module QualityTitleValidatorSpec
|
|
|
|
class Validatable < OpenStruct
|
|
|
|
include ActiveModel::Validations
|
|
|
|
validates :title, quality_title: { unless: :private_message? }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "A record validated with QualityTitleValidator" do
|
|
|
|
let(:valid_title) { "hello this is my cool topic! welcome: all;" }
|
|
|
|
let(:short_title) { valid_title.slice(0, SiteSetting.min_topic_title_length - 1) }
|
|
|
|
let(:long_title) { valid_title.center(SiteSetting.max_topic_title_length + 1, 'x') }
|
|
|
|
let(:xxxxx_title) { valid_title.gsub(/./, 'x') }
|
|
|
|
|
|
|
|
subject(:topic) { QualityTitleValidatorSpec::Validatable.new }
|
|
|
|
|
|
|
|
before(:each) do
|
|
|
|
topic.stubs(private_message?: false)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "allows a regular title with a few ascii characters" do
|
|
|
|
topic.title = valid_title
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).to be_valid
|
2013-05-23 00:52:12 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows non ascii" do
|
|
|
|
topic.title = "Iñtërnâtiônàlizætiøn"
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).to be_valid
|
2013-05-26 16:56:42 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'allows Chinese characters' do
|
|
|
|
topic.title = '现在发现使用中文标题没法发帖子了'
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).to be_valid
|
2013-05-23 00:52:12 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows anything in a private message" do
|
|
|
|
topic.stubs(private_message?: true)
|
|
|
|
[short_title, long_title, xxxxx_title].each do |bad_title|
|
|
|
|
topic.title = bad_title
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).to be_valid
|
2013-05-23 00:52:12 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "strips a title when identifying length" do
|
|
|
|
topic.title = short_title.center(SiteSetting.min_topic_title_length + 1, ' ')
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).not_to be_valid
|
2013-05-23 00:52:12 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't allow a long title" do
|
|
|
|
topic.title = long_title
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).not_to be_valid
|
2013-05-23 00:52:12 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't allow a short title" do
|
|
|
|
topic.title = short_title
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).not_to be_valid
|
2013-05-23 00:52:12 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "doesn't allow a title of one repeated character" do
|
|
|
|
topic.title = xxxxx_title
|
2015-01-09 11:34:37 -05:00
|
|
|
expect(topic).not_to be_valid
|
2013-05-23 00:52:12 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
# describe "with a name" do
|
|
|
|
# it "is not valid without a name" do
|
|
|
|
# subject.stub(:name => nil)
|
|
|
|
# subject.should_not be_valid
|
|
|
|
# subject.should have(1).error_on(:name)
|
|
|
|
# subject.errors[:name].first.should == "can't be blank"
|
|
|
|
# end
|
|
|
|
# end
|
|
|
|
end
|