Skip to content

Commit

Permalink
Merge pull request ManageIQ#14240 from eclarizio/BZ1428133
Browse files Browse the repository at this point in the history
Fix for Service Dialog not saving default value <None> for drop down or radio button
  • Loading branch information
gmcculloug committed Mar 9, 2017
2 parents 8080fc2 + d530fb7 commit a912f50
Show file tree
Hide file tree
Showing 5 changed files with 169 additions and 82 deletions.
15 changes: 14 additions & 1 deletion app/models/dialog_field_radio_button.rb
Expand Up @@ -4,6 +4,19 @@ def show_refresh_button?
end

def initial_values
[["", "<None>"]]
[[nil, "<None>"]]
end

private

def raw_values
@raw_values ||= dynamic ? values_from_automate : static_raw_values
self.value ||= default_value if default_value_included_in_raw_values?

@raw_values
end

def static_raw_values
self[:values].to_miq_a
end
end
19 changes: 15 additions & 4 deletions app/models/dialog_field_sorted_item.rb
Expand Up @@ -91,15 +91,26 @@ def sort_data(data_to_sort)
end

def raw_values
@raw_values ||= dynamic ? values_from_automate : self[:values].to_miq_a
unless @raw_values.collect { |value_pair| value_pair[0] }.include?(default_value)
self.default_value = sort_data(@raw_values).first.try(:first)
end
@raw_values ||= dynamic ? values_from_automate : static_raw_values
use_first_value_as_default unless default_value_included_in_raw_values?
self.value ||= default_value

@raw_values
end

def use_first_value_as_default
self.default_value = sort_data(@raw_values).first.try(:first)
end

def default_value_included_in_raw_values?
@raw_values.collect { |value_pair| value_pair[0] }.include?(default_value)
end

def static_raw_values
first_values = required? ? [[nil, "<Choose>"]] : initial_values
first_values + self[:values].to_miq_a.reject { |value| value[0].nil? }
end

def initial_values
[[nil, "<None>"]]
end
Expand Down
48 changes: 24 additions & 24 deletions spec/models/dialog_field_drop_down_list_spec.rb
Expand Up @@ -24,51 +24,51 @@

it "return sorted values array as strings" do
@df.data_type = "string"
@df.values = [["2", "Y"], ["1", "Z"], ["3", "X"]]
expect(@df.values).to eq([["3", "X"], ["2", "Y"], ["1", "Z"]])
@df.values = [%w(2 Y), %w(1 Z), %w(3 X)]
expect(@df.values).to eq([[nil, "<None>"], %w(3 X), %w(2 Y), %w(1 Z)])
@df.sort_order = :descending
expect(@df.values).to eq([["1", "Z"], ["2", "Y"], ["3", "X"]])
expect(@df.values).to eq([%w(1 Z), %w(2 Y), %w(3 X), [nil, "<None>"]])

@df.sort_by = :value
@df.sort_order = :ascending
expect(@df.values).to eq([["1", "Z"], ["2", "Y"], ["3", "X"]])
expect(@df.values).to eq([[nil, "<None>"], %w(1 Z), %w(2 Y), %w(3 X)])
@df.sort_order = :descending
expect(@df.values).to eq([["3", "X"], ["2", "Y"], ["1", "Z"]])
expect(@df.values).to eq([%w(3 X), %w(2 Y), %w(1 Z), [nil, "<None>"]])

@df.sort_by = :none
@df.sort_order = :ascending
expect(@df.values).to eq([["2", "Y"], ["1", "Z"], ["3", "X"]])
expect(@df.values).to eq([[nil, "<None>"], %w(2 Y), %w(1 Z), %w(3 X)])
@df.sort_order = :descending
expect(@df.values).to eq([["2", "Y"], ["1", "Z"], ["3", "X"]])
expect(@df.values).to eq([[nil, "<None>"], %w(2 Y), %w(1 Z), %w(3 X)])
end

it "return sorted values array as integers" do
@df.data_type = "integer"
@df.values = [["2", "Y"], ["10", "Z"], ["3", "X"]]
@df.values = [%w(2 Y), %w(10 Z), %w(3 X)]

@df.sort_by = :value
@df.sort_order = :ascending
expect(@df.values).to eq([["2", "Y"], ["3", "X"], ["10", "Z"]])
expect(@df.values).to eq([[nil, "<None>"], %w(2 Y), %w(3 X), %w(10 Z)])
@df.sort_order = :descending
expect(@df.values).to eq([["10", "Z"], ["3", "X"], ["2", "Y"]])
expect(@df.values).to eq([%w(10 Z), %w(3 X), %w(2 Y), [nil, "<None>"]])

@df.sort_by = :none
@df.sort_order = :ascending
expect(@df.values).to eq([["2", "Y"], ["10", "Z"], ["3", "X"]])
expect(@df.values).to eq([[nil, "<None>"], %w(2 Y), %w(10 Z), %w(3 X)])
@df.sort_order = :descending
expect(@df.values).to eq([["2", "Y"], ["10", "Z"], ["3", "X"]])
expect(@df.values).to eq([[nil, "<None>"], %w(2 Y), %w(10 Z), %w(3 X)])
end

context "#initialize_with_values" do
before(:each) do
@df.values = [["3", "X"], ["2", "Y"], ["1", "Z"]]
@df.values = [%w(3 X), %w(2 Y), %w(1 Z)]
@df.load_values_on_init = true
end

it "uses the first as the default value" do
it "uses the nil as the default value" do
@df.default_value = nil
@df.initialize_with_values({})
expect(@df.value).to eq("3")
expect(@df.value).to eq(nil)
end

it "with default value" do
Expand All @@ -77,10 +77,10 @@
expect(@df.value).to eq("1")
end

it "uses the first when there is a non-matching default value" do
it "uses the nil when there is a non-matching default value" do
@df.default_value = "4"
@df.initialize_with_values({})
expect(@df.value).to eq("3")
expect(@df.value).to eq(nil)
end
end

Expand Down Expand Up @@ -154,7 +154,7 @@

it "returns the values" do
expect(dialog_field.refresh_json_value("789")).to eq(
:refreshed_values => [["789", 101], ["123", 456]],
:refreshed_values => [["789", 101], ["123", 456], [nil, "<None>"]],
:checked_value => "789",
:read_only => true,
:visible => true
Expand Down Expand Up @@ -256,11 +256,11 @@

context "when the raw values are not already set" do
before do
dialog_field.values = %w(original values)
dialog_field.values = [%w(original values)]
end

it "returns the values" do
expect(dialog_field.values).to eq(%w(original values))
expect(dialog_field.values).to eq([[nil, "<None>"], %w(original values)])
end
end
end
Expand Down Expand Up @@ -301,11 +301,11 @@
context "when the raw values are already set" do
before do
dialog_field.instance_variable_set(:@raw_values, %w(potato potato))
dialog_field.values = %w(original values)
dialog_field.values = [%w(original values)]
end

it "returns the raw values" do
expect(dialog_field.trigger_automate_value_updates).to eq(%w(original values))
expect(dialog_field.trigger_automate_value_updates).to eq([[nil, "<None>"], %w(original values)])
end
end

Expand All @@ -315,12 +315,12 @@
end

it "returns the values" do
expect(dialog_field.trigger_automate_value_updates).to eq([%w(original values)])
expect(dialog_field.trigger_automate_value_updates).to eq([[nil, "<None>"], %w(original values)])
end

it "sets up the default value" do
dialog_field.trigger_automate_value_updates
expect(dialog_field.default_value).to eq("original")
expect(dialog_field.default_value).to eq(nil)
end
end

Expand Down
14 changes: 9 additions & 5 deletions spec/models/dialog_field_radio_button_spec.rb
Expand Up @@ -49,7 +49,9 @@
end

it "sets raw values from values attribute" do
expect(dialog_field_radio_button.instance_variable_get(:@raw_values)).to eq([["testing", 123]])
expect(dialog_field_radio_button.instance_variable_get(:@raw_values)).to eq(
[["testing", 123]]
)
end
end
end
Expand All @@ -61,7 +63,7 @@
end

it "sets raw_values to initial values" do
expect(dialog_field_radio_button.instance_variable_get(:@raw_values)).to eq([["", "<None>"]])
expect(dialog_field_radio_button.instance_variable_get(:@raw_values)).to eq([[nil, "<None>"]])
end
end
end
Expand Down Expand Up @@ -95,7 +97,9 @@
end

it "gets values from values attribute" do
expect(dialog_field_radio_button.instance_variable_get(:@raw_values)).to eq([["testing", 123]])
expect(dialog_field_radio_button.instance_variable_get(:@raw_values)).to eq(
[["testing", 123]]
)
end
end
end
Expand Down Expand Up @@ -157,10 +161,10 @@
context "when the checked value is not in the list of refreshed values" do
let(:refreshed_values_from_automate) { [%w(123 123)] }

it "returns the list of refreshed values and checked (default) value as a hash" do
it "returns the list of refreshed values and no checked (default) value as a hash" do
expect(dialog_field_radio_button.refresh_json_value("321")).to eq(
:refreshed_values => refreshed_values_from_automate,
:checked_value => "123",
:checked_value => nil,
:read_only => false,
:visible => true
)
Expand Down

0 comments on commit a912f50

Please sign in to comment.