2015-10-11 10:41:23 +01:00
require 'rails_helper'
2013-11-28 11:06:04 -05:00
describe TopicCreator do
2015-10-17 13:18:56 +05:30
let ( :user ) { Fabricate ( :user , trust_level : TrustLevel [ 2 ] ) }
2013-11-28 11:06:04 -05:00
let ( :moderator ) { Fabricate ( :moderator ) }
let ( :admin ) { Fabricate ( :admin ) }
let ( :valid_attrs ) { Fabricate . attributes_for ( :topic ) }
2015-10-17 13:18:56 +05:30
let ( :pm_valid_attrs ) { { raw : 'this is a new post' , title : 'this is a new title' , archetype : Archetype . private_message , target_usernames : moderator . username } }
2013-11-28 11:06:04 -05:00
describe '#create' do
2015-10-17 13:18:56 +05:30
context 'topic success cases' do
2013-11-28 11:06:04 -05:00
before do
TopicCreator . any_instance . expects ( :save_topic ) . returns ( true )
TopicCreator . any_instance . expects ( :watch_topic ) . returns ( true )
SiteSetting . stubs ( :allow_duplicate_topic_titles? ) . returns ( true )
end
it " should be possible for an admin to create a topic " do
2015-01-09 13:34:37 -03:00
expect ( TopicCreator . create ( admin , Guardian . new ( admin ) , valid_attrs ) ) . to be_valid
2013-11-28 11:06:04 -05:00
end
it " should be possible for a moderator to create a topic " do
2015-01-09 13:34:37 -03:00
expect ( TopicCreator . create ( moderator , Guardian . new ( moderator ) , valid_attrs ) ) . to be_valid
2013-11-28 11:06:04 -05:00
end
context 'regular user' do
2014-09-05 15:20:39 +10:00
before { SiteSetting . stubs ( :min_trust_to_create_topic ) . returns ( TrustLevel [ 0 ] ) }
2013-11-28 11:06:04 -05:00
it " should be possible for a regular user to create a topic " do
2015-01-09 13:34:37 -03:00
expect ( TopicCreator . create ( user , Guardian . new ( user ) , valid_attrs ) ) . to be_valid
2013-11-28 11:06:04 -05:00
end
it " should be possible for a regular user to create a topic with blank auto_close_time " do
2015-01-09 13:34:37 -03:00
expect ( TopicCreator . create ( user , Guardian . new ( user ) , valid_attrs . merge ( auto_close_time : '' ) ) ) . to be_valid
2013-11-28 11:06:04 -05:00
end
it " ignores auto_close_time without raising an error " do
topic = TopicCreator . create ( user , Guardian . new ( user ) , valid_attrs . merge ( auto_close_time : '24' ) )
2015-01-09 13:34:37 -03:00
expect ( topic ) . to be_valid
expect ( topic . auto_close_at ) . to eq ( nil )
2013-11-28 11:06:04 -05:00
end
2014-08-18 11:07:32 -04:00
it " category name is case insensitive " do
category = Fabricate ( :category , name : " Neil's Blog " )
topic = TopicCreator . create ( user , Guardian . new ( user ) , valid_attrs . merge ( category : " neil's blog " ) )
2015-01-09 13:34:37 -03:00
expect ( topic ) . to be_valid
expect ( topic . category ) . to eq ( category )
2014-08-18 11:07:32 -04:00
end
2013-11-28 11:06:04 -05:00
end
end
2015-10-17 13:18:56 +05:30
context 'private message' do
context 'success cases' do
before do
TopicCreator . any_instance . expects ( :save_topic ) . returns ( true )
TopicCreator . any_instance . expects ( :watch_topic ) . returns ( true )
SiteSetting . stubs ( :allow_duplicate_topic_titles? ) . returns ( true )
end
it " should be possible for a regular user to send private message " do
expect ( TopicCreator . create ( user , Guardian . new ( user ) , pm_valid_attrs ) ) . to be_valid
end
it " min_trust_to_create_topic setting should not be checked when sending private message " do
SiteSetting . min_trust_to_create_topic = TrustLevel [ 4 ]
expect ( TopicCreator . create ( user , Guardian . new ( user ) , pm_valid_attrs ) ) . to be_valid
end
end
context 'failure cases' do
it " min_trust_to_send_messages setting should be checked when sending private message " do
SiteSetting . min_trust_to_send_messages = TrustLevel [ 4 ]
expect ( - > { TopicCreator . create ( user , Guardian . new ( user ) , pm_valid_attrs ) } ) . to raise_error ( ActiveRecord :: Rollback )
end
end
end
end
2013-11-28 11:06:04 -05:00
end