diff --git a/src/lib/installation/clients/inst_casp_overview.rb b/src/lib/installation/clients/inst_casp_overview.rb index 982f5f0d3..1c0851b81 100644 --- a/src/lib/installation/clients/inst_casp_overview.rb +++ b/src/lib/installation/clients/inst_casp_overview.rb @@ -27,6 +27,7 @@ require "installation/widgets/overview" require "installation/widgets/system_role" +require "installation/widgets/ntp_server" require "installation/services" module Installation @@ -147,6 +148,7 @@ def quadrant_layout(upper_left:, lower_left:, upper_right:, lower_right:) # block installation def content controller_node = Installation::Widgets::ControllerNodePlace.new + ntp_server = Installation::Widgets::NtpServerPlace.new kdump_overview = Installation::Widgets::Overview.new(client: "kdump_proposal") bootloader_overview = Installation::Widgets::Overview.new(client: "bootloader_proposal", redraw: [kdump_overview]) @@ -159,8 +161,9 @@ def content ::Y2Country::Widgets::KeyboardSelectionCombo.new("english-us") ), lower_left: VBox( - Installation::Widgets::SystemRole.new(controller_node), + Installation::Widgets::SystemRole.new(controller_node, ntp_server), controller_node, + ntp_server, Tune::Widgets::SystemInformation.new ), upper_right: VBox( diff --git a/src/lib/installation/widgets/system_role.rb b/src/lib/installation/widgets/system_role.rb index 6cb2428a7..c72aac00c 100644 --- a/src/lib/installation/widgets/system_role.rb +++ b/src/lib/installation/widgets/system_role.rb @@ -23,6 +23,7 @@ require "cwm/widget" require "installation/services" require "installation/system_role" +require "installation/widgets/ntp_server" Yast.import "ProductControl" Yast.import "IP" @@ -78,7 +79,7 @@ class ControllerNodePlace < CWM::ReplacePoint def initialize @controller_node = ControllerNode.new @empty = CWM::Empty.new("no_controller") - super(widget: @empty) + super(id: "controller_placeholder", widget: @empty) end def show @@ -91,9 +92,19 @@ def hide end class SystemRole < CWM::ComboBox - def initialize(controller_node_widget) + ROLE_WIDGETS = { + "worker_role" => [:controller_node], + "dashboard_role" => [:ntp_server] + }.freeze + + attr_reader :widgets_map + + def initialize(controller_node_widget, ntp_server_widget) textdomain "installation" - @controller_node_widget = controller_node_widget + @widgets_map = { + controller_node: controller_node_widget, + ntp_server: ntp_server_widget + } end def label @@ -110,12 +121,10 @@ def init end def handle - if value == "worker_role" - @controller_node_widget.show - else - @controller_node_widget.hide - end - + to_show = ROLE_WIDGETS.fetch(value, []) + to_hide = widgets_map.keys - to_show + to_hide.each { |w| widgets_map[w].hide } + to_show.each { |w| widgets_map[w].show } nil end diff --git a/test/Makefile.am b/test/Makefile.am index 6845d3e50..7840f886e 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -36,7 +36,8 @@ TESTS = \ widgets_overview_test.rb \ widgets_system_role_test.rb \ lib/system_role_handlers_runner_test.rb \ - lib/widgets/ntp_server_test.rb + lib/widgets/ntp_server_test.rb \ + lib/widgets/system_role_test.rb TEST_EXTENSIONS = .rb RB_LOG_COMPILER = rspec diff --git a/test/lib/widgets/system_role_test.rb b/test/lib/widgets/system_role_test.rb new file mode 100755 index 000000000..13bc5f3a7 --- /dev/null +++ b/test/lib/widgets/system_role_test.rb @@ -0,0 +1,69 @@ +#!/usr/bin/env rspec + +require_relative "../../test_helper" +require "installation/widgets/system_role" + +describe ::Installation::Widgets::SystemRole do + subject(:widget) do + ::Installation::Widgets::SystemRole.new(controller_node_widget, ntp_server_widget) + end + + let(:controller_node_widget) { double("controller_node_widget") } + let(:ntp_server_widget) { double("ntp_server_widget") } + Yast::ProductControl.GetTranslatedText("roles_caption") + + describe "#label" do + before do + allow(Yast::ProductControl).to receive(:GetTranslatedText) + .with("roles_caption").and_return("LABEL") + end + + it "returns the label defined in the product's control file" do + expect(widget.label).to eq("LABEL") + end + end + + describe "#handle" do + let(:value) { "" } + + before do + allow(widget).to receive(:value).and_return(value) + end + + it "returns nil" do + allow(ntp_server_widget).to receive(:hide) + allow(controller_node_widget).to receive(:hide) + expect(widget.handle).to be_nil + end + + context "when value is 'worker_role'" do + let(:value) { "worker_role" } + + it "only shows the controller node widget" do + expect(ntp_server_widget).to receive(:hide) + expect(controller_node_widget).to receive(:show) + widget.handle + end + end + + context "when value is 'dashboard_role'" do + let(:value) { "dashboard_role" } + + it "only shows the NTP server widget" do + expect(ntp_server_widget).to receive(:show) + expect(controller_node_widget).to receive(:hide) + widget.handle + end + end + + context "when value is not 'worker_role' nor 'dashboard_role'" do + let(:value) { "none_role" } + + it "hides all widgets" do + expect(ntp_server_widget).to receive(:hide) + expect(controller_node_widget).to receive(:hide) + widget.handle + end + end + end +end