2015-10-11 10:41:23 +01:00
require 'rails_helper'
2014-01-30 12:44:28 -05:00
require_dependency 'topics_bulk_action'
2014-01-30 11:43:01 -05:00
describe TopicsBulkAction do
2014-08-08 16:29:51 +10:00
describe " dismiss_posts " do
it " dismisses posts " do
post1 = create_post
2014-10-31 09:40:35 +11:00
p = create_post ( topic_id : post1 . topic_id )
2014-08-08 16:29:51 +10:00
create_post ( topic_id : post1 . topic_id )
2014-10-31 09:40:35 +11:00
PostDestroyer . new ( Fabricate ( :admin ) , p ) . destroy
2014-08-08 16:29:51 +10:00
TopicsBulkAction . new ( post1 . user , [ post1 . topic_id ] , type : 'dismiss_posts' ) . perform!
tu = TopicUser . find_by ( user_id : post1 . user_id , topic_id : post1 . topic_id )
2014-10-31 09:40:35 +11:00
2015-01-09 13:34:37 -03:00
expect ( tu . last_read_post_number ) . to eq ( 3 )
expect ( tu . highest_seen_post_number ) . to eq ( 3 )
2014-08-08 16:29:51 +10:00
end
end
2014-01-30 11:43:01 -05:00
describe " invalid operation " do
2014-01-30 12:44:28 -05:00
let ( :user ) { Fabricate . build ( :user ) }
2014-01-30 11:43:01 -05:00
it " raises an error with an invalid operation " do
tba = TopicsBulkAction . new ( user , [ 1 ] , type : 'rm_root' )
2015-01-09 13:34:37 -03:00
expect { tba . perform! } . to raise_error ( Discourse :: InvalidParameters )
2014-01-30 11:43:01 -05:00
end
end
describe " change_category " do
let ( :topic ) { Fabricate ( :topic ) }
2014-01-30 12:44:28 -05:00
let ( :category ) { Fabricate ( :category ) }
2014-01-30 11:43:01 -05:00
context " when the user can edit the topic " do
it " changes the category and returns the topic_id " do
2014-07-16 15:39:39 -04:00
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_category' , category_id : category . id )
2014-01-30 11:43:01 -05:00
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to eq ( [ topic . id ] )
2014-01-30 11:43:01 -05:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic . category ) . to eq ( category )
2014-01-30 11:43:01 -05:00
end
end
context " when the user can't edit the topic " do
2014-02-21 13:03:50 -05:00
it " doesn't change the category " do
2014-01-30 11:43:01 -05:00
Guardian . any_instance . expects ( :can_edit? ) . returns ( false )
2014-07-16 15:39:39 -04:00
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_category' , category_id : category . id )
2014-01-30 11:43:01 -05:00
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to eq ( [ ] )
2014-01-30 11:43:01 -05:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic . category ) . not_to eq ( category )
2014-01-30 11:43:01 -05:00
end
end
2014-01-30 12:44:28 -05:00
end
2014-02-21 13:03:50 -05:00
describe " reset_read " do
let ( :topic ) { Fabricate ( :topic ) }
it " delegates to PostTiming.destroy_for " do
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'reset_read' )
PostTiming . expects ( :destroy_for ) . with ( topic . user_id , [ topic . id ] )
topic_ids = tba . perform!
end
end
2014-08-11 15:13:44 -04:00
describe " delete " do
let ( :topic ) { Fabricate ( :topic ) }
let ( :moderator ) { Fabricate ( :moderator ) }
it " deletes the topic " do
tba = TopicsBulkAction . new ( moderator , [ topic . id ] , type : 'delete' )
tba . perform!
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic ) . to be_trashed
2014-08-11 15:13:44 -04:00
end
end
2014-02-14 17:38:55 -05:00
describe " change_notification_level " do
let ( :topic ) { Fabricate ( :topic ) }
2014-02-21 13:03:50 -05:00
context " when the user can see the topic " do
2014-02-14 17:38:55 -05:00
it " updates the notification level " do
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_notification_level' , notification_level_id : 2 )
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to eq ( [ topic . id ] )
expect ( TopicUser . get ( topic , topic . user ) . notification_level ) . to eq ( 2 )
2014-02-14 17:38:55 -05:00
end
end
2014-02-21 13:03:50 -05:00
context " when the user can't see the topic " do
2014-02-14 17:38:55 -05:00
it " doesn't change the level " do
Guardian . any_instance . expects ( :can_see? ) . returns ( false )
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_notification_level' , notification_level_id : 2 )
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to eq ( [ ] )
expect ( TopicUser . get ( topic , topic . user ) ) . to be_blank
2014-02-14 17:38:55 -05:00
end
end
end
2014-01-30 12:44:28 -05:00
describe " close " do
let ( :topic ) { Fabricate ( :topic ) }
2014-01-30 11:43:01 -05:00
2014-01-30 12:44:28 -05:00
context " when the user can moderate the topic " do
it " closes the topic and returns the topic_id " do
Guardian . any_instance . expects ( :can_moderate? ) . returns ( true )
Guardian . any_instance . expects ( :can_create? ) . returns ( true )
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'close' )
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to eq ( [ topic . id ] )
2014-01-30 12:44:28 -05:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic ) . to be_closed
2014-01-30 12:44:28 -05:00
end
end
context " when the user can't edit the topic " do
it " doesn't close the topic " do
Guardian . any_instance . expects ( :can_moderate? ) . returns ( false )
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'close' )
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to be_blank
2014-01-30 12:44:28 -05:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic ) . not_to be_closed
2014-01-30 12:44:28 -05:00
end
end
2014-01-30 11:43:01 -05:00
end
2014-09-22 14:56:48 -04:00
describe " archive " do
let ( :topic ) { Fabricate ( :topic ) }
context " when the user can moderate the topic " do
it " archives the topic and returns the topic_id " do
Guardian . any_instance . expects ( :can_moderate? ) . returns ( true )
Guardian . any_instance . expects ( :can_create? ) . returns ( true )
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'archive' )
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to eq ( [ topic . id ] )
2014-09-22 14:56:48 -04:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic ) . to be_archived
2014-09-22 14:56:48 -04:00
end
end
context " when the user can't edit the topic " do
it " doesn't archive the topic " do
Guardian . any_instance . expects ( :can_moderate? ) . returns ( false )
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'archive' )
topic_ids = tba . perform!
2015-01-09 13:34:37 -03:00
expect ( topic_ids ) . to be_blank
2014-09-22 14:56:48 -04:00
topic . reload
2015-01-09 13:34:37 -03:00
expect ( topic ) . not_to be_archived
2014-09-22 14:56:48 -04:00
end
end
end
2015-10-27 16:57:40 -04:00
describe " unlist " do
let ( :topic ) { Fabricate ( :topic ) }
context " when the user can moderate the topic " do
it " unlists the topic and returns the topic_id " do
Guardian . any_instance . expects ( :can_moderate? ) . returns ( true )
Guardian . any_instance . expects ( :can_create? ) . returns ( true )
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'unlist' )
topic_ids = tba . perform!
expect ( topic_ids ) . to eq ( [ topic . id ] )
topic . reload
expect ( topic ) . not_to be_visible
end
end
context " when the user can't edit the topic " do
it " doesn't unlist the topic " do
Guardian . any_instance . expects ( :can_moderate? ) . returns ( false )
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'unlist' )
topic_ids = tba . perform!
expect ( topic_ids ) . to be_blank
topic . reload
expect ( topic ) . to be_visible
end
end
end
2016-05-04 14:02:47 -04:00
describe " change_tags " do
let ( :topic ) { Fabricate ( :topic ) }
let ( :tag1 ) { Fabricate ( :tag ) }
let ( :tag2 ) { Fabricate ( :tag ) }
before do
SiteSetting . tagging_enabled = true
SiteSetting . min_trust_level_to_tag_topics = 0
topic . tags = [ tag1 , tag2 ]
end
it " can change the tags, and can create new tags " do
SiteSetting . min_trust_to_create_tag = 0
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_tags' , tags : [ 'newtag' , tag1 . name ] )
topic_ids = tba . perform!
expect ( topic_ids ) . to eq ( [ topic . id ] )
topic . reload
expect ( topic . tags . map ( & :name ) . sort ) . to eq ( [ 'newtag' , tag1 . name ] . sort )
end
it " can change the tags but not create new ones " do
SiteSetting . min_trust_to_create_tag = 4
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_tags' , tags : [ 'newtag' , tag1 . name ] )
topic_ids = tba . perform!
expect ( topic_ids ) . to eq ( [ topic . id ] )
topic . reload
expect ( topic . tags . map ( & :name ) ) . to eq ( [ tag1 . name ] )
end
it " can remove all tags " do
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_tags' , tags : [ ] )
topic_ids = tba . perform!
expect ( topic_ids ) . to eq ( [ topic . id ] )
topic . reload
expect ( topic . tags . size ) . to eq ( 0 )
end
context " when user can't edit topic " do
before do
Guardian . any_instance . expects ( :can_edit? ) . returns ( false )
end
it " doesn't change the tags " do
tba = TopicsBulkAction . new ( topic . user , [ topic . id ] , type : 'change_tags' , tags : [ 'newtag' , tag1 . name ] )
topic_ids = tba . perform!
expect ( topic_ids ) . to eq ( [ ] )
topic . reload
expect ( topic . tags . map ( & :name ) ) . to eq ( [ tag1 . name , tag2 . name ] )
end
end
end
2014-01-30 11:43:01 -05:00
end