Hello community,

here is the log from the commit of package yast2-services-manager for 
openSUSE:Factory checked in at 2014-07-13 17:15:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-services-manager (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-services-manager.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-services-manager"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/yast2-services-manager/yast2-services-manager.changes
    2014-06-17 11:22:56.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.yast2-services-manager.new/yast2-services-manager.changes
       2014-07-13 17:15:27.000000000 +0200
@@ -1,0 +2,39 @@
+Tue Jul  8 09:34:32 CEST 2014 - [email protected]
+
+- Function 'localize' moved to ServicesManagerTarget library and
+  added a test case (bnc#886117)
+- 3.1.20
+
+-------------------------------------------------------------------
+Mon Jul  7 16:08:30 CEST 2014 - [email protected]
+
+- Fixed broken N_(...) call (bnc#886040)
+- 3.1.19
+
+-------------------------------------------------------------------
+Fri Jul  4 14:48:16 CEST 2014 - [email protected]
+
+- Default systemd target names marked for translation (bnc#884339)
+- 3.1.18
+
+-------------------------------------------------------------------
+Thu Jul  3 16:32:16 CEST 2014 - [email protected]
+
+- Marked "runlevel" as not clonable, the functionality is there
+  for importing old profiles only (bnc#873604)
+- 3.1.17
+
+-------------------------------------------------------------------
+Wed Jul  2 12:15:17 UTC 2014 - [email protected]
+
+- Fix failing tests
+- 3.1.16
+
+-------------------------------------------------------------------
+Tue Jul  1 09:19:08 UTC 2014 - [email protected]
+
+- Fix issues with ServicesManagerTarget (bnc#869656, bnc#867759,
+  bnc#875098)
+- 3.1.15
+
+-------------------------------------------------------------------

Old:
----
  yast2-services-manager-3.1.14.tar.bz2

New:
----
  yast2-services-manager-3.1.20.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-services-manager.spec ++++++
--- /var/tmp/diff_new_pack.0CYwkb/_old  2014-07-13 17:15:28.000000000 +0200
+++ /var/tmp/diff_new_pack.0CYwkb/_new  2014-07-13 17:15:28.000000000 +0200
@@ -24,7 +24,7 @@
 ######################################################################
 
 Name:           yast2-services-manager
-Version:        3.1.14
+Version:        3.1.20
 Release:        0
 
 BuildArch:      noarch
@@ -33,7 +33,7 @@
 Source0:        %{name}-%{version}.tar.bz2
 
 Requires:       ruby
-Requires:       yast2 >= 3.0.5
+Requires:       yast2 >= 3.1.82
 Requires:       yast2-ruby-bindings >= 1.2.0
 # need new enough installation for its inst clients
 Conflicts:      yast2-installation < 3.1.32
@@ -43,7 +43,7 @@
 
 BuildRequires:  ruby
 BuildRequires:  update-desktop-files
-BuildRequires:  yast2 >= 3.0.5
+BuildRequires:  yast2 >= 3.1.82
 BuildRequires:  yast2-ruby-bindings >= 1.2.0
 # Support for 'data' directory in rake install task
 BuildRequires:  rubygem-rspec

++++++ yast2-services-manager-3.1.14.tar.bz2 -> 
yast2-services-manager-3.1.20.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/package/yast2-services-manager.changes 
new/yast2-services-manager-3.1.20/package/yast2-services-manager.changes
--- old/yast2-services-manager-3.1.14/package/yast2-services-manager.changes    
2014-06-06 16:32:27.000000000 +0200
+++ new/yast2-services-manager-3.1.20/package/yast2-services-manager.changes    
2014-07-08 11:42:27.000000000 +0200
@@ -1,4 +1,43 @@
 -------------------------------------------------------------------
+Tue Jul  8 09:34:32 CEST 2014 - [email protected]
+
+- Function 'localize' moved to ServicesManagerTarget library and
+  added a test case (bnc#886117)
+- 3.1.20
+
+-------------------------------------------------------------------
+Mon Jul  7 16:08:30 CEST 2014 - [email protected]
+
+- Fixed broken N_(...) call (bnc#886040)
+- 3.1.19
+
+-------------------------------------------------------------------
+Fri Jul  4 14:48:16 CEST 2014 - [email protected]
+
+- Default systemd target names marked for translation (bnc#884339)
+- 3.1.18
+
+-------------------------------------------------------------------
+Thu Jul  3 16:32:16 CEST 2014 - [email protected]
+
+- Marked "runlevel" as not clonable, the functionality is there
+  for importing old profiles only (bnc#873604)
+- 3.1.17
+
+-------------------------------------------------------------------
+Wed Jul  2 12:15:17 UTC 2014 - [email protected]
+
+- Fix failing tests
+- 3.1.16
+
+-------------------------------------------------------------------
+Tue Jul  1 09:19:08 UTC 2014 - [email protected]
+
+- Fix issues with ServicesManagerTarget (bnc#869656, bnc#867759,
+  bnc#875098)
+- 3.1.15
+
+-------------------------------------------------------------------
 Fri Jun  6 10:52:11 CEST 2014 - [email protected]
 
 - AutoYast summary - hard-coded ERB moved to separate file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/package/yast2-services-manager.spec 
new/yast2-services-manager-3.1.20/package/yast2-services-manager.spec
--- old/yast2-services-manager-3.1.14/package/yast2-services-manager.spec       
2014-06-06 16:32:27.000000000 +0200
+++ new/yast2-services-manager-3.1.20/package/yast2-services-manager.spec       
2014-07-08 11:42:27.000000000 +0200
@@ -24,7 +24,7 @@
 ######################################################################
 
 Name:           yast2-services-manager
-Version:        3.1.14
+Version:        3.1.20
 
 Release:        0
 BuildArch:      noarch
@@ -33,7 +33,7 @@
 Source0:        %{name}-%{version}.tar.bz2
 
 Requires:       ruby
-Requires:       yast2 >= 3.0.5
+Requires:       yast2 >= 3.1.82
 Requires:       yast2-ruby-bindings >= 1.2.0
 # need new enough installation for its inst clients
 Conflicts:      yast2-installation < 3.1.32
@@ -44,7 +44,7 @@
 BuildRequires:  ruby
 BuildRequires:  update-desktop-files
 BuildRequires:  yast2-ruby-bindings >= 1.2.0
-BuildRequires:  yast2 >= 3.0.5
+BuildRequires:  yast2 >= 3.1.82
 # Support for 'data' directory in rake install task
 BuildRequires:  rubygem-yast-rake >= 0.1.7
 BuildRequires:  rubygem-rspec
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/src/clients/default_target_proposal.rb 
new/yast2-services-manager-3.1.20/src/clients/default_target_proposal.rb
--- old/yast2-services-manager-3.1.14/src/clients/default_target_proposal.rb    
2014-06-06 16:07:33.000000000 +0200
+++ new/yast2-services-manager-3.1.20/src/clients/default_target_proposal.rb    
2014-07-08 11:42:27.000000000 +0200
@@ -5,7 +5,7 @@
   import 'Linuxrc'
   import 'Mode'
   import 'Pkg'
-  import "Popup"
+  import 'Popup'
   import 'ProductFeatures'
   import 'ServicesManagerTarget'
   import 'Wizard'
@@ -97,10 +97,18 @@
 
       def generate_target_buttons
         Builtins.y2milestone "Available targets: #{available_targets}"
+
         radio_buttons = available_targets.map do |target_name|
           selected = target_name == ServicesManagerTarget.default_target
-          Left(RadioButton(Id(target_name), target_name, selected))
+          Left(
+            RadioButton(
+              Id(target_name),
+              ServicesManagerTargetClass::BaseTargets.localize(target_name),
+              selected
+            )
+          )
         end
+
         VBox(*radio_buttons)
       end
 
@@ -178,8 +186,14 @@
       end
 
       def create
-        proposal = { 'preformatted_proposal' => list(default_target) }
+        proposal = {
+          'preformatted_proposal' => list(
+            ServicesManagerTargetClass::BaseTargets.localize(default_target)
+          )
+        }
+
         return proposal if warnings.empty?
+
         proposal.update 'warning_level' => :warning
         proposal.update 'warning'       => list(*warnings)
         proposal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/src/desktop/runlevel.desktop 
new/yast2-services-manager-3.1.20/src/desktop/runlevel.desktop
--- old/yast2-services-manager-3.1.14/src/desktop/runlevel.desktop      
2014-06-06 16:07:33.000000000 +0200
+++ new/yast2-services-manager-3.1.20/src/desktop/runlevel.desktop      
2014-07-08 11:42:27.000000000 +0200
@@ -1,4 +1,5 @@
 # This file is needed for legacy support of runlevel autoyast profile
+# and provides only backward compatibility for importing old profiles
 
 [Desktop Entry]
 Type=Application
@@ -14,6 +15,8 @@
 X-SuSE-YaST-Argument=
 X-SuSE-YaST-RootOnly=true
 X-SuSE-YaST-AutoInst=all
+# bnc#873604 Export is not supported, use services-manager instead
+X-SuSE-YaST-AutoInstClonable=false
 X-SuSE-YaST-Geometry=
 X-SuSE-YaST-SortKey=
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/src/modules/services_manager.rb 
new/yast2-services-manager-3.1.20/src/modules/services_manager.rb
--- old/yast2-services-manager-3.1.14/src/modules/services_manager.rb   
2014-06-06 16:07:33.000000000 +0200
+++ new/yast2-services-manager-3.1.20/src/modules/services_manager.rb   
2014-07-08 11:42:27.000000000 +0200
@@ -52,7 +52,6 @@
     # @return Boolean if successful
     def save
       target_saved = ServicesManagerTarget.save
-      errors << ServicesManagerTarget.errors
       services_saved = ServicesManagerService.save
       errors << ServicesManagerService.errors
       !!(target_saved && services_saved)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/src/modules/services_manager_service.rb 
new/yast2-services-manager-3.1.20/src/modules/services_manager_service.rb
--- old/yast2-services-manager-3.1.14/src/modules/services_manager_service.rb   
2014-06-06 16:07:33.000000000 +0200
+++ new/yast2-services-manager-3.1.20/src/modules/services_manager_service.rb   
2014-07-08 11:42:27.000000000 +0200
@@ -1,4 +1,6 @@
- module Yast
+require "yast"
+
+module Yast
   import "Service"
   import "Mode"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/src/modules/services_manager_target.rb 
new/yast2-services-manager-3.1.20/src/modules/services_manager_target.rb
--- old/yast2-services-manager-3.1.14/src/modules/services_manager_target.rb    
2014-06-06 16:07:33.000000000 +0200
+++ new/yast2-services-manager-3.1.20/src/modules/services_manager_target.rb    
2014-07-08 11:42:27.000000000 +0200
@@ -2,62 +2,104 @@
 
 module Yast
   import 'Mode'
+  import 'SystemdTarget'
 
   class ServicesManagerTargetClass < Module
-    LIST_UNITS_COMMAND   = 'systemctl list-unit-files --type target'
-    LIST_TARGETS_COMMAND = 'systemctl --all --type target'
-    COMMAND_OPTIONS      = ' --no-legend --no-pager --no-ask-password '
-    TERM_OPTIONS         = ' LANG=C TERM=dumb COLUMNS=1024 '
-    TARGET_SUFFIX        = '.target'
-    DEFAULT_TARGET       = 'default'
-    SYSTEMD_TARGETS_DIR  = '/usr/lib/systemd/system'
-    DEFAULT_TARGET_SYMLINK  = 
"/etc/systemd/system/#{DEFAULT_TARGET}#{TARGET_SUFFIX}"
-
-    module Status
-      ENABLED   = 'enabled'
-      DISABLED  = 'disabled'
-      SUPPORTED = [ENABLED, DISABLED]
-      ACTIVE    = 'active'
-      LOADED    = 'loaded'
-    end
+    include Yast::Logger
 
     module BaseTargets
+      extend Yast::I18n
+
+      def initialize
+        textdomain 'services-manager'
+      end
+
       GRAPHICAL = 'graphical'
       MULTIUSER = 'multi-user'
+
+      TRANSLATIONS = {
+        # Default systemd target (previously: runlevel 5) option #1
+        GRAPHICAL => N_("Graphical mode"),
+        # Default systemd target (previously: runlevel 3) option #2
+        MULTIUSER => N_("Text mode"),
+      }
+
+      def self.localize(target_name)
+        _(TRANSLATIONS[target_name] || target_name)
+      end
     end
 
-    attr_accessor :modified, :targets, :force, :proposal_reason
-    attr_reader   :errors, :default_target
+    # The targets listed below should not be displayed to the users in the 
drop down
+    # menu on the services-manager UI.
+    # More info at:
+    # * https://bugzilla.novell.com/show_bug.cgi?id=869656
+    # * http://www.freedesktop.org/software/systemd/man/bootup.html
+    # * http://www.freedesktop.org/wiki/Software/systemd/SystemUpdates/
+    BLACKLISTED_TARGETS = %w(
+      halt
+      kexec
+      poweroff
+      reboot
+      system-update
+    )
+
+    # @return [Boolean] True if properties of the ServicesManagerTarget has 
been modified
+    attr_accessor :modified
+
+    # Used during installation workflow
+    # @return [Boolean] Used by client default_target_proposal to override the 
default settings
+    attr_accessor :force
+
+    # Shown in client default_target_proposal during installation workflow
+    # @return [String] Shows a reason why the default target has been selected;
+    attr_accessor :proposal_reason
+
+    # @return [String] Name of the default systemd target unit
+    attr_reader :default_target
+
+    # @return [Hash] Collection of available targets
+    # @example {'rescue' => {:enabled=>false, :loaded=>true, :active=>false, 
:description=>'Rescue'}}
+    attr_reader :targets
 
     alias_method :all, :targets
 
     def initialize
       textdomain 'services-manager'
-      @errors  = []
       @targets = {}
+      @modified = false
       @default_target = ''
-      read_targets if Mode.normal
+      read_targets
     end
 
     def read_targets
-      find_default_target
-      load_supported_targets
-      load_target_details
-    end
+      return unless Mode.normal
 
-    alias_method :read, :read_targets
+      default_target = SystemdTarget.get_default
+      @default_target = default_target ? default_target.name : ''
 
-    def valid?
-      errors.empty?
+      SystemdTarget.all.each do |target|
+        next unless target.allow_isolate?
+        next if BLACKLISTED_TARGETS.member?(target.name)
+
+        targets[target.name] = {
+          :enabled => target.enabled?,
+          :loaded  => target.loaded?,
+          :active  => target.active?,
+          :description => target.description
+        }
+      end
     end
 
+    alias_method :read, :read_targets
+
     def default_target= new_default
-      if Mode.normal
-        errors << _("Target #{new_default} not found") unless 
targets.keys.include?(new_default)
+      if Mode.normal && !targets.keys.include?(new_default)
+        raise "Target #{new_default} not found, available only 
#{targets.keys.join(', ')}"
       end
+
       @default_target = new_default
       self.modified = true
-      Builtins.y2milestone "New default target set: #{new_default}"
+      log.info "New default target has been set: #{new_default}"
       new_default
     end
 
@@ -76,119 +118,17 @@
     end
 
     def save
-      Builtins.y2milestone('Saving default target...')
-      if !modified
-        Builtins.y2milestone("Nothing to do, current default target already 
set to '#{default_target}'")
-        return true
-      end
-
-      if !valid?
-        errors.each {|e| Builtins.y2error(e) }
-        Builtins.y2error("Invalid default target '#{default_target}'; aborting 
saving")
-        return false
-      end
-      removed = remove_default_target_symlink
-      created = create_default_target_symlink
-      removed && created
+      return true if !modified
+      log.info('Saving default target...')
+      SystemdTarget.set_default(default_target)
     end
 
     def reset
-      errors.clear
+      targets.clear
       read_targets
       self.modified = false
     end
 
-    private
-
-    def find_default_target
-      @default_target = get_default_target_filename.chomp(TARGET_SUFFIX)
-    end
-
-    def remove_default_target_symlink
-      Builtins.y2milestone("Removing default target symlink..")
-      removed = SCR.Execute(path('.target.remove'), DEFAULT_TARGET_SYMLINK)
-      if removed
-        Builtins.y2milestone "#{DEFAULT_TARGET_SYMLINK} has been removed"
-      else
-        Builtins.y2error "Removing of #{DEFAULT_TARGET_SYMLINK} has failed"
-      end
-      removed
-    end
-
-    def create_default_target_symlink
-      Builtins.y2milestone("Creating new default target symlink for 
#{default_target_file}")
-      SCR.Execute(path('.target.symlink'), default_target_file, 
DEFAULT_TARGET_SYMLINK)
-      created = SCR.Read(path('.target.size'), DEFAULT_TARGET_SYMLINK) > 0
-      if created
-        Builtins.y2milestone("Symlink has been created")
-      else
-        Builtins.y2error("Default target unit file '#{default_target}' is 
empty")
-      end
-      created
-    end
-
-    def get_default_target_filename
-      File.basename(SCR.Read(path('.target.symlink'), 
DEFAULT_TARGET_SYMLINK).to_s)
-    end
-
-    def default_target_file
-      File.join(SYSTEMD_TARGETS_DIR, "#{default_target}#{TARGET_SUFFIX}")
-    end
-
-    def list_target_units
-      command = TERM_OPTIONS + LIST_UNITS_COMMAND + COMMAND_OPTIONS
-      SCR.Execute(path('.target.bash_output'), command)
-    end
-
-    def list_targets_details
-      command = TERM_OPTIONS + LIST_TARGETS_COMMAND + COMMAND_OPTIONS
-      SCR.Execute(path('.target.bash_output'), command)
-    end
-
-    def load_supported_targets
-      self.targets = {}
-      output  = list_target_units
-      stdout  = output.fetch 'stdout'
-      stderr  = output.fetch 'stderr'
-      exit_code = output.fetch 'exit'
-      errors << stderr if exit_code.to_i != 0 && !stderr.to_s.empty?
-      stdout.each_line do |line|
-        target, status = line.split(/[\s]+/)
-        if Status::SUPPORTED.include?(status)
-          target.chomp! TARGET_SUFFIX
-          next if target == DEFAULT_TARGET
-          self.targets[target] = { :enabled  => status == Status::ENABLED }
-        end
-      end
-      Builtins.y2milestone "Loaded supported target units: %1", targets.keys
-    end
-
-    def load_target_details
-      output  = list_targets_details
-      stdout  = output.fetch 'stdout'
-      stderr  = output.fetch 'stderr'
-      exit_code = output.fetch 'exit'
-      errors << stderr if exit_code.to_i != 0 && !stderr.to_s.empty?
-      unknown_targets = []
-      stdout.each_line do |line|
-        target, loaded, active, _, *description = line.split(/[\s]+/)
-        target.chomp! TARGET_SUFFIX
-        if targets[target]
-          targets[target][:loaded] = loaded == Status::LOADED
-          targets[target][:active] = active == Status::ACTIVE
-          targets[target][:description] = description.join(' ')
-        else
-          unknown_targets << target
-        end
-      end
-
-      Builtins.y2milestone 'Loaded target details: %1', targets
-
-      if !unknown_targets.empty?
-        Builtins.y2warning "No details loaded for these targets: 
#{unknown_targets.join(', ')} "
-      end
-    end
-
     publish({:function => :all,            :type => "map <string, map> ()" })
     publish({:function => :default_target, :type => "string ()"            })
     publish({:function => :default_target=,:type => "string (string)"      })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.14/test/services_manager_target_test.rb 
new/yast2-services-manager-3.1.20/test/services_manager_target_test.rb
--- old/yast2-services-manager-3.1.14/test/services_manager_target_test.rb      
2014-06-06 16:07:33.000000000 +0200
+++ new/yast2-services-manager-3.1.20/test/services_manager_target_test.rb      
2014-07-08 11:42:27.000000000 +0200
@@ -3,66 +3,102 @@
 require_relative "test_helper"
 
 module Yast
-  describe Yast::ServicesManagerTarget do
-    attr_reader :target
-
-    before do
-      ServicesManagerTargetClass.any_instance
-        .stub(:get_default_target_filename)
-        .and_return('multi-user.target')
-      ServicesManagerTargetClass.any_instance
-        .stub(:list_target_units)
-        .and_return({
-          'stdout' => "multi-user.target         enabled\n" +
-                      "graphical.target          disabled",
-          'stderr' => '',
-          'exit'   => 0
-        })
-
-      ServicesManagerTargetClass.any_instance
-        .stub(:list_targets_details)
-        .and_return({
-          'stdout' => "multi-user.target  loaded active   active Multi-User 
System\n" +
-                      "graphical.target  loaded active   active Graphical 
Interface",
-          'stderr' => '',
-          'exit'   => 0
-        })
-      
ServicesManagerTargetClass.any_instance.stub(:remove_default_target_symlink).and_return(true)
-      
ServicesManagerTargetClass.any_instance.stub(:create_default_target_symlink).and_return(true)
-      ServicesManagerTargetClass.any_instance.stub(:default_target_file)
-      @target = ServicesManagerTargetClass.new
+  module TestTarget
+    class Template < Struct.new(
+      :name, :allow_isolate?, :enabled?, :loaded?, :active?, :description
+    )
     end
 
-    it "can set supported target" do
-      supported_target = 'graphical'
-      target.default_target = supported_target
-      expect(target.default_target).to eq(supported_target)
-      expect(target.modified).to eq(true)
-      expect(target.errors).to be_empty
-      expect(target.valid?).to be(true)
-      expect(target.save).to eq(true)
+    GRAPHICAL  = Template.new('graphical', true)
+    MULTI_USER = Template.new('multi-user', true)
+    POWEROFF   = Template.new('poweroff', true)
+    SLEEP      = Template.new('sleep', false)
+
+    ALL = [ GRAPHICAL, MULTI_USER, POWEROFF, SLEEP ]
+  end
+
+  extend Yast::I18n
+  Yast::textdomain "services-manager"
+
+  describe ServicesManagerTarget do
+    context "reading targets" do
+      it "reads default target name and other targets" do
+        expect(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
+        expect(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
+        target = ServicesManagerTargetClass.new
+        expect(target.default_target).to eq('graphical')
+        expect(target.targets).not_to be_empty
+        expect(target.targets.keys).to include('multi-user')
+        expect(target.targets.keys).to include('graphical')
+        expect(target.targets.keys).not_to include('poweroff')
+        expect(target.targets.keys).not_to include('sleep')
+      end
+
+      it "skips reading targets if Mode.normal is false" do
+        Mode.SetMode('not-normal')
+        expect(SystemdTarget).not_to receive(:all)
+        expect(SystemdTarget).not_to receive(:get_default)
+        target = ServicesManagerTargetClass.new
+        expect(target.targets).to be_empty
+        expect(target.default_target).to be_empty
+        Mode.SetMode('normal')
+      end
     end
 
-    it "can set but not save unsupported target" do
-      unsupported = 'suse'
-      target.default_target = unsupported
-      expect(target.default_target).to eq(unsupported)
-      expect(target.errors).not_to be_empty
-      expect(target.valid?).to be(false)
-      expect(target.save).to be(false)
+    context "saving default target" do
+      it "saves the modified default target name" do
+        expect(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
+        expect(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
+        expect(SystemdTarget).to receive(:set_default).and_return(true)
+        target = ServicesManagerTargetClass.new
+        expect(target.default_target).to eq('graphical')
+        target.default_target = 'multi-user'
+        expect(target.default_target).to eq('multi-user')
+        expect(target.save).to eq(true)
+      end
+
+      it "skips setting the default target if not modified" do
+        expect(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
+        expect(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
+        target = ServicesManagerTargetClass.new
+        expect(target.modified).to eq(false)
+        expect(target.save).to eq(true)
+      end
     end
 
-    it "can reset the modified target" do
-      original_target = target.default_target
-      new_target = 'test'
-      target.default_target = new_target
-      expect(target.default_target).to eq(new_target)
-      expect(target.modified).to eq(true)
-      target.reset
-      expect(target.modified).to eq(false)
-      expect(target.default_target).not_to eq(new_target)
-      expect(target.default_target).to eq(original_target)
+    context "re-setting targets" do
+      it "reloads the object properties" do
+        expect(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
+        expect(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
+        target = ServicesManagerTargetClass.new
+        target.default_target = 'multi-user'
+        expect(target.modified).to eq(true)
+        expect(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
+        expect(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
+        target.reset
+        expect(target.modified).to eq(false)
+        expect(target.default_target).to eq('graphical')
+      end
     end
+  end
 
+  describe ServicesManagerTargetClass::BaseTargets do
+    describe "#localize" do
+      context "when target is known" do
+        it "localizes the target" do
+          expect(ServicesManagerTargetClass::BaseTargets.localize(
+            ServicesManagerTargetClass::BaseTargets::GRAPHICAL
+          )).to eq(Yast::_("Graphical mode"))
+        end
+      end
+
+      context "when target is unknown" do
+        it "returns the given target unlocalized" do
+          expect(ServicesManagerTargetClass::BaseTargets.localize(
+            "unknown-target"
+          )).to eq("unknown-target")
+        end
+      end
+    end
   end
 end

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to