mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 16:29:25 +08:00
afdbb2bb96
Add the ability to archive topics in bulk https://meta.discourse.org/t/archive-topics-via-bulk/20302
153 lines
4.9 KiB
Ruby
153 lines
4.9 KiB
Ruby
require 'spec_helper'
|
|
require_dependency 'topics_bulk_action'
|
|
|
|
describe TopicsBulkAction do
|
|
|
|
describe "dismiss_posts" do
|
|
it "dismisses posts" do
|
|
post1 = create_post
|
|
create_post(topic_id: post1.topic_id)
|
|
|
|
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)
|
|
tu.last_read_post_number.should == 2
|
|
tu.seen_post_count = 2
|
|
end
|
|
end
|
|
|
|
describe "invalid operation" do
|
|
let(:user) { Fabricate.build(:user) }
|
|
|
|
it "raises an error with an invalid operation" do
|
|
tba = TopicsBulkAction.new(user, [1], type: 'rm_root')
|
|
-> { tba.perform! }.should raise_error(Discourse::InvalidParameters)
|
|
end
|
|
end
|
|
|
|
describe "change_category" do
|
|
let(:topic) { Fabricate(:topic) }
|
|
let(:category) { Fabricate(:category) }
|
|
|
|
context "when the user can edit the topic" do
|
|
it "changes the category and returns the topic_id" do
|
|
tba = TopicsBulkAction.new(topic.user, [topic.id], type: 'change_category', category_id: category.id)
|
|
topic_ids = tba.perform!
|
|
topic_ids.should == [topic.id]
|
|
topic.reload
|
|
topic.category.should == category
|
|
end
|
|
end
|
|
|
|
context "when the user can't edit the topic" do
|
|
it "doesn't change the category" do
|
|
Guardian.any_instance.expects(:can_edit?).returns(false)
|
|
tba = TopicsBulkAction.new(topic.user, [topic.id], type: 'change_category', category_id: category.id)
|
|
topic_ids = tba.perform!
|
|
topic_ids.should == []
|
|
topic.reload
|
|
topic.category.should_not == category
|
|
end
|
|
end
|
|
end
|
|
|
|
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
|
|
|
|
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
|
|
topic.should be_trashed
|
|
end
|
|
end
|
|
|
|
describe "change_notification_level" do
|
|
let(:topic) { Fabricate(:topic) }
|
|
|
|
context "when the user can see the topic" do
|
|
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!
|
|
topic_ids.should == [topic.id]
|
|
TopicUser.get(topic, topic.user).notification_level.should == 2
|
|
end
|
|
end
|
|
|
|
context "when the user can't see the topic" do
|
|
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!
|
|
topic_ids.should == []
|
|
TopicUser.get(topic, topic.user).should be_blank
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "close" do
|
|
let(:topic) { Fabricate(:topic) }
|
|
|
|
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!
|
|
topic_ids.should == [topic.id]
|
|
topic.reload
|
|
topic.should be_closed
|
|
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!
|
|
topic_ids.should be_blank
|
|
topic.reload
|
|
topic.should_not be_closed
|
|
end
|
|
end
|
|
end
|
|
|
|
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!
|
|
topic_ids.should == [topic.id]
|
|
topic.reload
|
|
topic.should be_archived
|
|
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!
|
|
topic_ids.should be_blank
|
|
topic.reload
|
|
topic.should_not be_archived
|
|
end
|
|
end
|
|
end
|
|
end
|