Skip to content

Commit

Permalink
Added a clearer message to an error when MiqPolicy import fails
Browse files Browse the repository at this point in the history
  • Loading branch information
eclarizio committed Jun 24, 2015
1 parent c6535b3 commit ffc8bba
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 19 deletions.
4 changes: 4 additions & 0 deletions vmdb/app/services/miq_policy_import_service.rb
@@ -1,4 +1,6 @@
class MiqPolicyImportService
class InvalidMiqPolicyYaml < StandardError; end

def cancel_import(import_file_upload_id)
import_file_upload = ImportFileUpload.find(import_file_upload_id)

Expand Down Expand Up @@ -29,6 +31,8 @@ def create_import_file_upload(file_contents)
ImportFileUpload.create.tap do |import_file_upload|
import_file_upload.store_binary_data_as_yml(uploaded_content.to_yaml, "Policy import")
end
rescue
raise InvalidMiqPolicyYaml, "Invalid YAML file"
end

def destroy_queued_deletion(import_file_upload_id)
Expand Down
52 changes: 33 additions & 19 deletions vmdb/spec/services/miq_policy_import_service_spec.rb
Expand Up @@ -67,30 +67,44 @@
let(:file_contents) { "file contents" }
let(:import_file_upload) { active_record_instance_double("ImportFileUpload", :id => 1).as_null_object }

before do
MiqPolicy.stub(:import).with("file contents", :preview => true).and_return(:uploaded => "content")
MiqQueue.stub(:put_or_update)
ImportFileUpload.stub(:create).and_return(import_file_upload)
end
context "when the import does not raise an error" do
before do
MiqPolicy.stub(:import).with("file contents", :preview => true).and_return(:uploaded => "content")
MiqQueue.stub(:put_or_update)
ImportFileUpload.stub(:create).and_return(import_file_upload)
end

it "stores the import file upload" do
import_file_upload.should_receive(:store_binary_data_as_yml).with("---\n:uploaded: content\n", "Policy import")
miq_policy_import_service.store_for_import(file_contents)
end
it "stores the import file upload" do
import_file_upload.should_receive(:store_binary_data_as_yml).with("---\n:uploaded: content\n", "Policy import")
miq_policy_import_service.store_for_import(file_contents)
end

it "returns the import file upload" do
miq_policy_import_service.store_for_import(file_contents).should == import_file_upload
end

it "returns the import file upload" do
miq_policy_import_service.store_for_import(file_contents).should == import_file_upload
it "queues deletion of the object" do
Timecop.freeze(2014, 3, 4) do
MiqQueue.should_receive(:put_or_update).with(
:class_name => "ImportFileUpload",
:instance_id => 1,
:deliver_on => 1.day.from_now,
:method_name => "destroy"
)
miq_policy_import_service.store_for_import(file_contents)
end
end
end

it "queues deletion of the object" do
Timecop.freeze(2014, 3, 4) do
MiqQueue.should_receive(:put_or_update).with(
:class_name => "ImportFileUpload",
:instance_id => 1,
:deliver_on => 1.day.from_now,
:method_name => "destroy"
context "when the import does raise an error" do
before do
MiqPolicy.stub(:import).with("file contents", :preview => true).and_raise
end

it "reraises an InvalidMiqPolicyYaml error with a message" do
expect { miq_policy_import_service.store_for_import(file_contents) }.to raise_error(
MiqPolicyImportService::InvalidMiqPolicyYaml, "Invalid YAML file"
)
miq_policy_import_service.store_for_import(file_contents)
end
end
end
Expand Down

0 comments on commit ffc8bba

Please sign in to comment.