From 16713448f456316bf1f7173a181f5acee8ddb0f4 Mon Sep 17 00:00:00 2001 From: Brandon Dunne Date: Mon, 9 Jul 2018 16:08:49 -0400 Subject: [PATCH] Add DELETE service_templates/X/schedules/X https://bugzilla.redhat.com/show_bug.cgi?id=1564255 --- .../api/service_templates_controller.rb | 5 ++ config/api.yml | 11 +++- spec/requests/service_templates_spec.rb | 54 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/service_templates_controller.rb b/app/controllers/api/service_templates_controller.rb index 5409c76061..7b7d1dc61d 100644 --- a/app/controllers/api/service_templates_controller.rb +++ b/app/controllers/api/service_templates_controller.rb @@ -50,6 +50,11 @@ def schedules_query_resource(object) object.miq_schedules end + def schedules_delete_resource(_parent, type, id, data) + delete_resource(type, id, data) + end + alias delete_resource_schedules schedules_delete_resource + private def set_additional_attributes diff --git a/config/api.yml b/config/api.yml index 2efcf50bf5..8dfa1e7d88 100644 --- a/config/api.yml +++ b/config/api.yml @@ -2518,16 +2518,25 @@ :identifier: miq_report_reports :options: - :subcollection - :verbs: *gp + :verbs: *gpd :klass: MiqSchedule :subcollection_actions: :get: - :name: read :identifier: miq_report_view + :post: + - :name: delete + :identifier: schedule_delete :subresource_actions: + :delete: + - :name: delete + :identifier: schedule_delete :get: - :name: read :identifier: miq_report_view + :post: + - :name: delete + :identifier: schedule_delete :search_filters: :description: Filters :verbs: *gpd diff --git a/spec/requests/service_templates_spec.rb b/spec/requests/service_templates_spec.rb index 5f68ddf112..c011b32c06 100644 --- a/spec/requests/service_templates_spec.rb +++ b/spec/requests/service_templates_spec.rb @@ -741,6 +741,60 @@ expect(response).to have_http_status(:forbidden) end + + it "DELETE service_templates/x/schedules/x" do + api_basic_authorize(subresource_action_identifier(:service_templates, :schedules, :delete, :delete)) + + delete(api_service_template_schedule_url(nil, service_template, schedule_1)) + + expect(response).to have_http_status(:no_content) + expect { schedule_1.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + + describe "POST /api/service_templates/:id/schedules/:id with delete action" do + it "can delete a schedule" do + api_basic_authorize(subresource_action_identifier(:service_templates, :schedules, :delete)) + + expect do + post(api_service_template_schedule_url(nil, service_template, schedule_1), :params => { :action => "delete" }) + end.to change(MiqSchedule, :count).by(-1) + + expected = { + "message" => "schedules id: #{schedule_1.id} deleting", + "success" => true, + } + expect(response.parsed_body).to include(expected) + expect(response).to have_http_status(:ok) + end + + it "will not delete a schedule unless authorized" do + api_basic_authorize + + post(api_service_template_schedule_url(nil, service_template, schedule_1), :params => { :action => "delete" }) + + expect(response).to have_http_status(:forbidden) + end + end + + describe "POST /api/service_templates/:id/schedules/ with delete action" do + it "can delete multiple schedules" do + api_basic_authorize(subresource_action_identifier(:service_templates, :schedules, :delete)) + + expect do + post(api_service_template_schedules_url(nil, service_template), :params => {:action => "delete", :resources => [{:id => schedule_1.id}, {:id => schedule_2.id}]}) + end.to change(MiqSchedule, :count).by(-2) + + expect(response).to have_http_status(:ok) + end + + it "forbids multiple schedule deletion without an appropriate role" do + api_basic_authorize + + post(api_service_template_schedules_url(nil, service_template), :params => {:action => "delete", :resources => [{:id => schedule_1.id}, {:id => schedule_2.id}]}) + + expect(response).to have_http_status(:forbidden) + end + end end it "without any schedules" do