diff --git a/app/models/miq_policy_set.rb b/app/models/miq_policy_set.rb index 2790411104e..ac53c3247dd 100644 --- a/app/models/miq_policy_set.rb +++ b/app/models/miq_policy_set.rb @@ -25,6 +25,18 @@ def destroy_policy_tags Tag.find_by(:name => "/miq_policy/assignment/#{self.class.to_s.underscore}/#{id}").try!(:destroy) end + def add_policy(policy) + add_member(policy) + end + + def remove_policy(policy) + remove_member(policy) + end + + def get_policies + miq_policies + end + def add_to(ids, db) model = db.respond_to?(:constantize) ? db.constantize : db ids.each do|id| diff --git a/config/api.yml b/config/api.yml index a344af246a3..9065f0ce688 100644 --- a/config/api.yml +++ b/config/api.yml @@ -1188,15 +1188,19 @@ - :name: delete :identifier: profile_delete :disabled: true - :subcollection_actions: + :policies_subcollection_actions: :post: - :name: assign + :identifier: policy_profile_assign - :name: unassign + :identifier: policy_profile_assign - :name: resolve - :subresource_actions: + :policies_subresource_actions: :post: - :name: assign + :identifier: policy_profile_assign - :name: unassign + :identifier: policy_profile_assign - :name: resolve :providers: :description: Providers diff --git a/db/fixtures/miq_product_features.yml b/db/fixtures/miq_product_features.yml index 6c817abf783..7db67fa8a68 100644 --- a/db/fixtures/miq_product_features.yml +++ b/db/fixtures/miq_product_features.yml @@ -1728,6 +1728,11 @@ :feature_type: admin :hidden: true :identifier: profile_edit + - :name: Edit Policies Assignment + :description: Edit Policy Profile's policies assignments + :feature_type: admin + :hidden: true + :identifier: policy_profile_assign - :name: Policies :description: Everything under Policies Accordion :protected: true diff --git a/spec/requests/api/policies_assignment_spec.rb b/spec/requests/api/policies_assignment_spec.rb index bca5ab480c8..fcf46149269 100644 --- a/spec/requests/api/policies_assignment_spec.rb +++ b/spec/requests/api/policies_assignment_spec.rb @@ -118,9 +118,9 @@ def test_unassign_multiple_policies(object_policies_url, collection, subcollecti api_basic_authorize subcollection_action_identifier(collection, subcollection, :unassign) object = options[:object] - [p1, p2, p3].each { |p| object.add_policy(p) } run_post(object_policies_url, gen_request(:unassign, [{:guid => p2.guid}, {:guid => p3.guid}])) + object.reload expect_multiple_action_result(2) expect(object.get_policies.size).to eq(1) @@ -139,6 +139,24 @@ def test_unassign_multiple_policy_profiles(object_policies_url, collection, subc expect(object.get_policies.first.guid).to eq(ps1.guid) end + context "Policy profile policies assignment" do + let(:policy_profile_url) { policy_profiles_url(ps2.id) } + let(:policy_profile_policies_url) { "#{policy_profile_url}/policies" } + + it "adds Policies to a Policy Profile" do + test_assign_multiple_policies(policy_profile_url, + policy_profile_policies_url, + :policy_profiles, + :policies, + :object => ps2, + :policies => [p1, p2, p3]) + end + + it "removes Policies from a Policy Profile" do + test_unassign_multiple_policies(policy_profile_policies_url, :policy_profiles, :policies, :object => ps2) + end + end + context "Provider policies subcollection assignment" do let(:provider_url) { providers_url(provider.id) } let(:provider_policies_url) { "#{provider_url}/policies" }