diff --git a/db/migrate/20241025072931_update_resource_pool_identifiers.rb b/db/migrate/20241025072931_update_resource_pool_identifiers.rb new file mode 100644 index 00000000..fdc93b2b --- /dev/null +++ b/db/migrate/20241025072931_update_resource_pool_identifiers.rb @@ -0,0 +1,35 @@ +class UpdateResourcePoolIdentifiers < ActiveRecord::Migration[7.0] + class MiqProductFeature < ActiveRecord::Base; end + + FEATURE_MAPPING_UPDATE = { + 'resource_pool' => 'resource_pool_infra', + 'resource_pool_view' => 'resource_pool_infra_view', + 'resource_pool_show_list' => 'resource_pool_infra_show_list', + 'resource_pool_show' => 'resource_pool_infra_show', + 'resource_pool_control' => 'resource_pool_infra_control', + 'resource_pool_tag' => 'resource_pool_infra_tag', + 'resource_pool_protect' => 'resource_pool_infra_protect', + 'resource_pool_admin' => 'resource_pool_infra_admin', + 'resource_pool_delete' => 'resource_pool_infra_delete' + }.freeze + + def up + return if MiqProductFeature.none? + + say_with_time('Updating resource_pool features to resource_pool_infra') do + FEATURE_MAPPING_UPDATE.each do |from, to| + MiqProductFeature.find_by(:identifier => from)&.update!(:identifier => to) + end + end + end + + def down + return if MiqProductFeature.none? + + say_with_time('Reverting resource_pool_infra features back to resource_pool') do + FEATURE_MAPPING_UPDATE.each do |to, from| + MiqProductFeature.find_by(:identifier => from)&.update!(:identifier => to) + end + end + end +end diff --git a/spec/migrations/20241025072931_update_resource_pool_identifiers_spec.rb b/spec/migrations/20241025072931_update_resource_pool_identifiers_spec.rb new file mode 100644 index 00000000..052cb9e5 --- /dev/null +++ b/spec/migrations/20241025072931_update_resource_pool_identifiers_spec.rb @@ -0,0 +1,39 @@ +require_migration + +describe UpdateResourcePoolIdentifiers do + let(:miq_product_feature) { migration_stub(:MiqProductFeature) } + + before do + %w[resource_pool resource_pool_view resource_pool_show_list resource_pool_show resource_pool_control resource_pool_tag resource_pool_protect resource_pool_admin resource_pool_delete].each do |identifier| + miq_product_feature.create!(:identifier => identifier) + end + end + + migration_context :up do + it "updates existing resource_pool features to resource_pool_infra" do + migrate + + described_class::FEATURE_MAPPING_UPDATE.each do |old_identifier, new_identifier| + expect(miq_product_feature.exists?(:identifier => old_identifier)).to be_falsy + expect(miq_product_feature.exists?(:identifier => new_identifier)).to be_truthy + end + end + end + + migration_context :down do + before do + described_class::FEATURE_MAPPING_UPDATE.each do |_old_identifier, new_identifier| + miq_product_feature.create!(:identifier => new_identifier) + end + end + + it "reverts resource_pool_infra features back to resource_pool" do + migrate + + described_class::FEATURE_MAPPING_UPDATE.each do |old_identifier, new_identifier| + expect(miq_product_feature.exists?(:identifier => new_identifier)).to be_falsy + expect(miq_product_feature.exists?(:identifier => old_identifier)).to be_truthy + end + end + end +end