Skip to content

Commit

Permalink
Improve addon (un)selection in online search
Browse files Browse the repository at this point in the history
  • Loading branch information
imobachgs committed Jan 29, 2020
1 parent 1a6af8c commit 6f8429b
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 11 deletions.
57 changes: 47 additions & 10 deletions src/lib/registration/widgets/package_search.rb
Original file line number Diff line number Diff line change
Expand Up @@ -179,25 +179,62 @@ def toggle_package

# Selects the current package for installation
#
# If required, it selects the addon for registration.
# If required, it selects the corresponding addon
#
# @param package [RemotePackage] Package to select
def select_package(package)
addon = package.addon
# FIXME: it will crash if addon.nil?
return unless addon.registered? || addon.selected? || enable_addon?(addon)
select_addon(addon) if addon
set_package_as_selected(package) if addon.nil? || addon.selected? || addon.registered?
end

# Unselects the current package for installation
#
# If not needed, unselects the corresponding addon
#
# @parm package [RemotePackage] Package to unselect
#
# @see #unselect_addon
# @see #unselect_package!
def unselect_package(package)
unset_package_as_selected(package)
unselect_addon(package.addon) if package.addon
end

# Selects the given addon if needed
#
# @param addon [Addon] Addon to select
def select_addon(addon)
return if addon.registered? || addon.selected? || addon.auto_selected?
addon.selected if enable_addon?(addon)
end

addon.selected unless addon.registered? || addon.selected?
# Unselects the given addon if required
#
# @param addon [Addon] Addon to unselect
def unselect_addon(addon)
return if addon.registered? || needed_addon?(addon)
addon.unselected if disable_addon?(addon)
end

# Sets the package as selected
#
# Marks the package as selected and adds it to the list of selected packages.
#
# @param package [RemotePackage] Package to add
def set_package_as_selected(package)
package.select!
selected_packages << package
end

# Unselects the current package for installation
def unselect_package(package)
# Unsets the package as selected
#
# Marks the package as not selected and removes it from the list of selected packages.
#
# @param package [RemotePackage] Package to remove
def unset_package_as_selected(package)
package.unselect!
selected_packages.delete(package)
addon = package.addon
return unless addon

addon.unselected unless needed_addon?(package.addon) || !disable_addon?(addon)
end

# Updates the package details widget
Expand Down
8 changes: 7 additions & 1 deletion test/registration/widgets/package_search_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@

let(:addon) do
instance_double(
Registration::Addon, name: "desktop", registered?: false, selected?: false, selected: nil
Registration::Addon, name: "desktop", registered?: false, selected?: false,
auto_selected?: nil, selected: nil, unselected: nil, dependencies: []
)
end

Expand Down Expand Up @@ -175,6 +176,11 @@
allow(Yast::Popup).to receive(:YesNo).and_return(register?)
end

let(:addon) do
pure_addon = load_yaml_fixture("pure_addons.yml").first
Registration::Addon.new(pure_addon)
end

context "but the user accepts to register the addon" do
let(:register?) { true }

Expand Down

0 comments on commit 6f8429b

Please sign in to comment.