Delegate bulk operations to a `TopicsBulkAction` object.
This commit is contained in:
parent
0c73eb8ce1
commit
b315a5c28f
|
@ -1,6 +1,7 @@
|
||||||
require_dependency 'topic_view'
|
require_dependency 'topic_view'
|
||||||
require_dependency 'promotion'
|
require_dependency 'promotion'
|
||||||
require_dependency 'url_helper'
|
require_dependency 'url_helper'
|
||||||
|
require_dependency 'topics_bulk_action'
|
||||||
|
|
||||||
class TopicsController < ApplicationController
|
class TopicsController < ApplicationController
|
||||||
include UrlHelper
|
include UrlHelper
|
||||||
|
@ -269,7 +270,11 @@ class TopicsController < ApplicationController
|
||||||
|
|
||||||
def bulk
|
def bulk
|
||||||
topic_ids = params.require(:topic_ids).map {|t| t.to_i}
|
topic_ids = params.require(:topic_ids).map {|t| t.to_i}
|
||||||
render_json_dump topic_ids: topic_ids
|
operation = params.require(:operation).symbolize_keys
|
||||||
|
raise ActionController::ParameterMissing.new(:operation_type) if operation[:type].blank?
|
||||||
|
operator = TopicsBulkAction.new(current_user, topic_ids, operation)
|
||||||
|
changed_topic_ids = operator.perform!
|
||||||
|
render_json_dump topic_ids: changed_topic_ids
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
class TopicsBulkAction
|
||||||
|
|
||||||
|
def initialize(user, topic_ids, operation)
|
||||||
|
@user = user
|
||||||
|
@topic_ids = topic_ids
|
||||||
|
@operation = operation
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform!
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
|
@ -781,4 +781,34 @@ describe TopicsController do
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "bulk" do
|
||||||
|
it 'needs you to be logged in' do
|
||||||
|
lambda { xhr :put, :bulk }.should raise_error(Discourse::NotLoggedIn)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "when logged in" do
|
||||||
|
let!(:user) { log_in }
|
||||||
|
let(:operation) { {type: 'change_category', category_id: '1'} }
|
||||||
|
let(:topic_ids) { [1,2,3] }
|
||||||
|
|
||||||
|
it "requires a list of topic_ids" do
|
||||||
|
lambda { xhr :put, :bulk, operation: operation }.should raise_error(ActionController::ParameterMissing)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "requires an operation param" do
|
||||||
|
lambda { xhr :put, :bulk, topic_ids: topic_ids}.should raise_error(ActionController::ParameterMissing)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "requires a type field for the operation param" do
|
||||||
|
lambda { xhr :put, :bulk, topic_ids: topic_ids, operation: {}}.should raise_error(ActionController::ParameterMissing)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "delegates work to `TopicsBulkAction`" do
|
||||||
|
topics_bulk_action = mock
|
||||||
|
TopicsBulkAction.expects(:new).with(user, topic_ids, operation).returns(topics_bulk_action)
|
||||||
|
topics_bulk_action.expects(:perform!)
|
||||||
|
xhr :put, :bulk, topic_ids: topic_ids, operation: operation
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue