diff --git a/app/models/miq_report/import_export.rb b/app/models/miq_report/import_export.rb index 64f3852e9ca..2cdb16c58ac 100644 --- a/app/models/miq_report/import_export.rb +++ b/app/models/miq_report/import_export.rb @@ -11,6 +11,9 @@ def import_from_hash(report, options = nil) raise _("Incorrect format, only policy records can be imported.") end + # Ensure that all columns serialized as hashes in the report have keys that are symbols + self.column_names.each { |k| report[k].deep_symbolize_keys! if report[k].kind_of?(Hash) } + user = options[:user] || User.find_by_userid(options[:userid]) report.merge!("miq_group_id" => user.current_group_id, "user_id" => user.id) diff --git a/spec/models/miq_report/import_export_spec.rb b/spec/models/miq_report/import_export_spec.rb index 5a4a6074529..41656d8d4f8 100644 --- a/spec/models/miq_report/import_export_spec.rb +++ b/spec/models/miq_report/import_export_spec.rb @@ -2,11 +2,12 @@ before do @user = FactoryGirl.create(:user_admin) @old_report = FactoryGirl.create(:miq_report, - :name => "Test Report", - :rpt_type => "Custom", - :tz => "Eastern Time (US & Canada)", - :col_order => ["name", "boot_time", "disks_aligned"], - :cols => ["name", "boot_time", "disks_aligned"] + :name => "Test Report", + :rpt_type => "Custom", + :tz => "Eastern Time (US & Canada)", + :col_order => ["name", "boot_time", "disks_aligned"], + :cols => ["name", "boot_time", "disks_aligned"], + :db_options => {:rpt_type => "ChargebackContainerProject"} ) end @@ -14,6 +15,7 @@ before do report_string = MiqReport.export_to_yaml([@old_report.id], MiqReport) @new_report = YAML.load(report_string).first + @from_json = JSON.parse(@new_report.to_json) @options = { :overwrite => true, :user => @user @@ -38,6 +40,14 @@ expect(result[:status]).to eq(:add) expect(MiqReport.count).to eq(1) end + + it "imports from json and preserves symbolized keys in serialized columns" do + @options[:save] = true + MiqReport.import_from_hash(@from_json, @options) + + report = MiqReport.last + expect(report.db_options[:rpt_type]).to_not be_nil + end end context "existing report" do