Skip to content

Commit

Permalink
Refactor the call to validate_values so validate is called only once.
Browse files Browse the repository at this point in the history
  • Loading branch information
lfu committed Apr 27, 2016
1 parent bcded59 commit 0e40702
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 14 deletions.
6 changes: 3 additions & 3 deletions app/models/miq_host_provision_workflow.rb
Expand Up @@ -243,9 +243,9 @@ def self.from_ws_ver_1_x(version, user, template_fields, vm_fields, requester, t
values[:ws_ems_custom_attributes] = p.ws_values(options.ems_custom_attributes, :parse_ws_string, :modify_key_name => false)
values[:ws_miq_custom_attributes] = p.ws_values(options.miq_custom_attributes, :parse_ws_string, :modify_key_name => false)

p.validate_values(values)

p.create_request(values, nil, values[:auto_approve])
p.create_request(values, nil, values[:auto_approve]).tap do |request|
p.raise_validate_errors if request == false
end
rescue => err
_log.error "<#{err}>"
raise err
Expand Down
6 changes: 3 additions & 3 deletions app/models/miq_provision_virt_workflow.rb
Expand Up @@ -1133,9 +1133,9 @@ def self.from_ws_ver_1_x(version, user, template_fields, vm_fields, requester, t
values[:ws_ems_custom_attributes] = p.ws_values(options.ems_custom_attributes, :parse_ws_string, :modify_key_name => false)
values[:ws_miq_custom_attributes] = p.ws_values(options.miq_custom_attributes, :parse_ws_string, :modify_key_name => false)

p.validate_values(values)

p.create_request(values, nil, values[:auto_approve])
p.create_request(values, nil, values[:auto_approve]).tap do |request|
p.raise_validate_errors if request == false
end
rescue => err
_log.error "<#{err}>"
raise err
Expand Down
14 changes: 6 additions & 8 deletions app/models/miq_request_workflow.rb
Expand Up @@ -1514,14 +1514,12 @@ def ws_schedule_fields(values, _fields, data)
data.keys.each { |key| set_ws_field_value(values, key, data, dialog_name, dlg_fields) if dlg_keys.include?(key) }
end

def validate_values(values)
if validate(values) == false
errors = []
fields { |_fn, f, _dn, _d| errors << f[:error] unless f[:error].nil? }
err_text = "Provision failed for the following reasons:\n#{errors.join("\n")}"
_log.error "<#{err_text}>"
raise _("Provision failed for the following reasons:\n%{errors}") % {:errors => errors.join("\n")}
end
def raise_validate_errors
errors = []
fields { |_fn, f, _dn, _d| errors << f[:error] unless f[:error].nil? }
err_text = "Provision failed for the following reasons:\n#{errors.join("\n")}"
_log.error "<#{err_text}>"
raise _("Provision failed for the following reasons:\n%{errors}") % {:errors => errors.join("\n")}
end

private
Expand Down
18 changes: 18 additions & 0 deletions spec/models/miq_request_workflow_spec.rb
Expand Up @@ -60,6 +60,24 @@
end
end

context "#get_field" do
let(:dialog) { workflow.instance_variable_get(:@dialogs) }
before do
values = {:values_from => {:method => :allowed_clusters}}
dialog.store_path(:dialogs, :environment, :fields, :placement_cluster_name, values)
end

it "refreshes value by default" do
expect(workflow).to receive(:allowed_clusters).once
workflow.get_field(:placement_cluster_name, :environment)
end

it "not refresh value when specified" do
expect(workflow).not_to receive(:allowed_clusters)
workflow.get_field(:placement_cluster_name, :environment, false)
end
end

describe "#init_from_dialog" do
let(:dialogs) { workflow.instance_variable_get(:@dialogs) }
let(:init_values) { {} }
Expand Down

0 comments on commit 0e40702

Please sign in to comment.