2015-10-11 10:41:23 +01:00
require 'rails_helper'
2013-06-13 18:18:17 +10:00
require_dependency 'validators/post_validator'
describe Validators :: PostValidator do
2015-11-30 19:08:35 +01:00
let ( :post ) { build ( :post ) }
let ( :validator ) { Validators :: PostValidator . new ( { } ) }
2013-06-13 18:18:17 +10:00
context " stripped_length " do
it " adds an error for short raw " do
post . raw = " abc "
validator . stripped_length ( post )
expect ( post . errors . count ) . to eq ( 1 )
end
it " adds no error for long raw " do
post . raw = " this is a long topic body testing 123 "
validator . stripped_length ( post )
expect ( post . errors . count ) . to eq ( 0 )
end
end
2013-12-19 13:45:55 -05:00
context " too_many_posts " do
it " should be invalid when the user has posted too much " do
post . user . expects ( :posted_too_much_in_topic? ) . returns ( true )
validator . max_posts_validator ( post )
expect ( post . errors . count ) . to be > 0
end
2013-12-20 11:29:44 -05:00
it " should be allowed to edit when the user has posted too much " do
post . user . stubs ( :posted_too_much_in_topic? ) . returns ( true )
post . expects ( :new_record? ) . returns ( false )
validator . max_posts_validator ( post )
expect ( post . errors . count ) . to be ( 0 )
end
2013-12-19 13:45:55 -05:00
it " should be valid when the user hasn't posted too much " do
post . user . expects ( :posted_too_much_in_topic? ) . returns ( false )
validator . max_posts_validator ( post )
expect ( post . errors . count ) . to be ( 0 )
end
end
2016-02-01 21:07:49 +05:30
context " too_many_mentions " do
before do
SiteSetting . newuser_max_mentions_per_post = 2
SiteSetting . max_mentions_per_post = 3
end
it " should be invalid when new user exceeds max mentions limit " do
post . acting_user = build ( :newuser )
post . expects ( :raw_mentions ) . returns ( [ 'jake' , 'finn' , 'jake_old' ] )
validator . max_mention_validator ( post )
expect ( post . errors . count ) . to be > 0
end
it " should be invalid when elder user exceeds max mentions limit " do
post . acting_user = build ( :trust_level_4 )
post . expects ( :raw_mentions ) . returns ( [ 'jake' , 'finn' , 'jake_old' , 'jake_new' ] )
validator . max_mention_validator ( post )
expect ( post . errors . count ) . to be > 0
end
it " should be valid when new user does not exceed max mentions limit " do
post . acting_user = build ( :newuser )
post . expects ( :raw_mentions ) . returns ( [ 'jake' , 'finn' ] )
validator . max_mention_validator ( post )
expect ( post . errors . count ) . to be ( 0 )
end
2016-04-18 22:08:42 +02:00
it " should be valid when new user exceeds max mentions limit in PM " do
post . acting_user = build ( :newuser )
post . topic . expects ( :private_message? ) . returns ( true )
post . expects ( :raw_mentions ) . returns ( [ 'jake' , 'finn' , 'jake_old' ] )
validator . max_mention_validator ( post )
expect ( post . errors . count ) . to be ( 0 )
end
2016-02-01 21:07:49 +05:30
it " should be valid when elder user does not exceed max mentions limit " do
post . acting_user = build ( :trust_level_4 )
post . expects ( :raw_mentions ) . returns ( [ 'jake' , 'finn' , 'jake_old' ] )
validator . max_mention_validator ( post )
expect ( post . errors . count ) . to be ( 0 )
end
it " should be valid for moderator in all cases " do
post . acting_user = build ( :moderator )
post . expects ( :raw_mentions ) . never
validator . max_mention_validator ( post )
expect ( post . errors . count ) . to be ( 0 )
end
it " should be valid for admin in all cases " do
post . acting_user = build ( :admin )
post . expects ( :raw_mentions ) . never
validator . max_mention_validator ( post )
expect ( post . errors . count ) . to be ( 0 )
end
end
2013-06-13 18:18:17 +10:00
context " invalid post " do
it " should be invalid " do
validator . validate ( post )
expect ( post . errors . count ) . to be > 0
end
end
2013-09-06 11:50:05 -04:00
describe " unique_post_validator " do
before do
SiteSetting . stubs ( :unique_posts_mins ) . returns ( 5 )
end
context " post is unique " do
before do
2013-09-09 16:17:31 -04:00
post . stubs ( :matches_recent_post? ) . returns ( false )
2013-09-06 11:50:05 -04:00
end
it " should not add an error " do
validator . unique_post_validator ( post )
2015-01-09 13:34:37 -03:00
expect ( post . errors . count ) . to eq ( 0 )
2013-09-06 11:50:05 -04:00
end
end
context " post is not unique " do
before do
2013-09-09 16:17:31 -04:00
post . stubs ( :matches_recent_post? ) . returns ( true )
2013-09-06 11:50:05 -04:00
end
it " should add an error " do
validator . unique_post_validator ( post )
expect ( post . errors . count ) . to be > 0
end
it " should not add an error if post.skip_unique_check is true " do
post . skip_unique_check = true
validator . unique_post_validator ( post )
2015-01-09 13:34:37 -03:00
expect ( post . errors . count ) . to eq ( 0 )
2013-09-06 11:50:05 -04:00
end
end
end
2015-12-01 10:40:23 +01:00
shared_examples " almost no validations " do
2014-07-28 16:40:06 -04:00
it " skips most validations " do
2015-12-01 10:40:23 +01:00
validator . expects ( :stripped_length ) . never
validator . expects ( :raw_quality ) . never
validator . expects ( :max_posts_validator ) . never
validator . expects ( :max_mention_validator ) . never
validator . expects ( :max_images_validator ) . never
validator . expects ( :max_attachments_validator ) . never
validator . expects ( :max_links_validator ) . never
validator . expects ( :unique_post_validator ) . never
validator . validate ( post )
2014-07-28 16:40:06 -04:00
end
end
2015-12-01 10:40:23 +01:00
context " admin editing a static page " do
before do
post . acting_user = build ( :admin )
SiteSetting . stubs ( :tos_topic_id ) . returns ( post . topic_id )
end
2015-11-30 19:08:35 +01:00
2015-12-01 10:40:23 +01:00
include_examples " almost no validations "
end
2015-11-30 19:08:35 +01:00
2015-12-01 10:40:23 +01:00
context " staged user " do
before { post . acting_user = build ( :user , staged : true ) }
include_examples " almost no validations "
2015-11-30 19:08:35 +01:00
end
2013-06-13 18:18:17 +10:00
end