Skip to content

Commit

Permalink
Merge pull request #400 from bdunne/order_service_template
Browse files Browse the repository at this point in the history
Allow ordering ServiceTemplates with a schedule_time
(cherry picked from commit bc9cae5)

https://bugzilla.redhat.com/show_bug.cgi?id=1608351
  • Loading branch information
abellotti authored and simaishi committed Jul 31, 2018
1 parent b704774 commit 2c95b3d
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 6 deletions.
7 changes: 3 additions & 4 deletions app/controllers/api/mixins/service_templates.rb
@@ -1,16 +1,15 @@
module Api
module Mixins
module ServiceTemplates
def order_service_template(id, data)
def order_service_template(id, data, scheduled_time = nil)
service_template = resource_search(id, :service_templates, ServiceTemplate)
raise BadRequestError, "#{service_template_ident(service_template)} cannot be ordered" unless service_template.orderable?
workflow = service_template.provision_workflow(User.current_user, data || {}, :submit_workflow => true)
request_result = workflow.submit_request
request_result = service_template.order(User.current_user, (data || {}), :submit_workflow => true, nil, scheduled_time)
errors = request_result[:errors]
if errors.present?
raise BadRequestError, "Failed to order #{service_template_ident(service_template)} - #{errors.join(", ")}"
end
request_result[:request]
request_result[:request] || request_result[:schedule]
end

private
Expand Down
3 changes: 2 additions & 1 deletion app/controllers/api/service_templates_controller.rb
Expand Up @@ -27,7 +27,8 @@ def edit_resource(type, id, data)
end

def order_resource(_type, id, data)
order_service_template(id, data)
schedule_time = data&.delete("schedule_time")
order_service_template(id, data, schedule_time)
end

def archive_resource(type, id, _data)
Expand Down
3 changes: 2 additions & 1 deletion app/controllers/api/subcollections/service_templates.rb
Expand Up @@ -29,7 +29,8 @@ def service_templates_unassign_resource(object, type, id = nil, _data = nil)
end

def service_templates_order_resource(_object, _type, id = nil, data = nil)
order_service_template(id, data)
schedule_time = data&.delete(:schedule_time)
order_service_template(id, data, schedule_time)
end

def service_templates_refresh_dialog_fields_resource(object, type, id = nil, data = nil)
Expand Down
23 changes: 23 additions & 0 deletions spec/requests/service_templates_spec.rb
Expand Up @@ -511,6 +511,29 @@
expect(response).to have_http_status(:ok)
expect(response.parsed_body).to include(expected)
end

context "with a schedule_time" do
it "can be ordered as a resource action" do
api_basic_authorize action_identifier(:service_templates, :order, :resource_actions, :post)

post(api_service_template_url(nil, service_template), :params => { :action => "order", :schedule_time => Time.now.utc.to_s })

expect(response).to have_http_status(:ok)
expect(response.parsed_body).to include("name"=>"Order ServiceTemplate #{ServiceTemplate.first.id}")
end

it "can be ordered as an action on the collection" do
api_basic_authorize action_identifier(:service_templates, :order, :resource_actions, :post)

post(api_service_templates_url, :params => { :action => "order", :resources => [{:href => api_service_template_url(nil, service_template), :schedule_time => Time.now.utc.to_s}] })

expected = {
"results" => [a_hash_including("name"=>"Order ServiceTemplate #{ServiceTemplate.first.id}")]
}
expect(response).to have_http_status(:ok)
expect(response.parsed_body).to include(expected)
end
end
end

context "with an unorderable template" do
Expand Down

0 comments on commit 2c95b3d

Please sign in to comment.