Hello community,

here is the log from the commit of package autoyast2 for openSUSE:Factory 
checked in at 2020-08-01 12:31:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/autoyast2 (Old)
 and      /work/SRC/openSUSE:Factory/.autoyast2.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "autoyast2"

Sat Aug  1 12:31:42 2020 rev:285 rq:823700 version:4.3.32

Changes:
--------
--- /work/SRC/openSUSE:Factory/autoyast2/autoyast2.changes      2020-07-30 
10:01:44.431279972 +0200
+++ /work/SRC/openSUSE:Factory/.autoyast2.new.3592/autoyast2.changes    
2020-08-01 12:32:00.206503178 +0200
@@ -1,0 +2,13 @@
+Thu Jul 30 14:00:17 UTC 2020 - Knut Anderssen <[email protected]>
+
+- Do not report profile validation errors multiple times if the
+  errors are the same already reported and accepted (bsc#1173091)
+- 4.3.32
+
+-------------------------------------------------------------------
+Thu Jul 30 13:31:01 CEST 2020 - [email protected]
+
+- Adapted doc: Calling of post-partitioning scripts moved from
+  dropped inst_autoimage to inst_kickoff (bsc#1140711).
+
+-------------------------------------------------------------------

Old:
----
  autoyast2-4.3.31.tar.bz2

New:
----
  autoyast2-4.3.32.tar.bz2

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

Other differences:
------------------
++++++ autoyast2.spec ++++++
--- /var/tmp/diff_new_pack.lf2Tdo/_old  2020-08-01 12:32:01.182504091 +0200
+++ /var/tmp/diff_new_pack.lf2Tdo/_new  2020-08-01 12:32:01.186504095 +0200
@@ -22,7 +22,7 @@
 %endif
 
 Name:           autoyast2
-Version:        4.3.31
+Version:        4.3.32
 Release:        0
 Summary:        YaST2 - Automated Installation
 License:        GPL-2.0-only

++++++ autoyast2-4.3.31.tar.bz2 -> autoyast2-4.3.32.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/package/autoyast2.changes 
new/autoyast2-4.3.32/package/autoyast2.changes
--- old/autoyast2-4.3.31/package/autoyast2.changes      2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/package/autoyast2.changes      2020-07-31 
10:35:35.000000000 +0200
@@ -1,4 +1,17 @@
 -------------------------------------------------------------------
+Thu Jul 30 14:00:17 UTC 2020 - Knut Anderssen <[email protected]>
+
+- Do not report profile validation errors multiple times if the
+  errors are the same already reported and accepted (bsc#1173091)
+- 4.3.32
+
+-------------------------------------------------------------------
+Thu Jul 30 13:31:01 CEST 2020 - [email protected]
+
+- Adapted doc: Calling of post-partitioning scripts moved from
+  dropped inst_autoimage to inst_kickoff (bsc#1140711).
+
+-------------------------------------------------------------------
 Mon Jul 27 17:01:01 CEST 2020 - [email protected]
 
 - Removed "image" section from "software" section (bsc#1140711).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/package/autoyast2.spec 
new/autoyast2-4.3.32/package/autoyast2.spec
--- old/autoyast2-4.3.31/package/autoyast2.spec 2020-07-29 18:30:30.000000000 
+0200
+++ new/autoyast2-4.3.32/package/autoyast2.spec 2020-07-31 10:35:35.000000000 
+0200
@@ -22,7 +22,7 @@
 %endif
 
 Name:           autoyast2
-Version:        4.3.31
+Version:        4.3.32
 Release:        0
 Summary:        YaST2 - Automated Installation
 License:        GPL-2.0-only
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/autoyast2-4.3.31/src/lib/autoinstall/autosetup_helpers.rb 
new/autoyast2-4.3.32/src/lib/autoinstall/autosetup_helpers.rb
--- old/autoyast2-4.3.31/src/lib/autoinstall/autosetup_helpers.rb       
2020-07-29 18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/src/lib/autoinstall/autosetup_helpers.rb       
2020-07-31 10:35:35.000000000 +0200
@@ -56,7 +56,7 @@
         return :not_found
       end
 
-      return :abort unless 
Y2Autoinstallation::XmlChecks.valid_modified_profile?
+      return :abort unless profile_checker.valid_modified_profile?
 
       if !Yast::Profile.ReadXML(Yast::AutoinstConfig.modified_profile) ||
           Yast::Profile.current == {}
@@ -193,6 +193,10 @@
       Yast::Profile.remove_sections("language") if 
Yast::Profile.current.key?("language")
     end
 
+    def profile_checker
+      Y2Autoinstallation::XmlChecks.instance
+    end
+
   private
 
     def utf8_supported?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/src/lib/autoinstall/xml_checks.rb 
new/autoyast2-4.3.32/src/lib/autoinstall/xml_checks.rb
--- old/autoyast2-4.3.31/src/lib/autoinstall/xml_checks.rb      2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/src/lib/autoinstall/xml_checks.rb      2020-07-31 
10:35:35.000000000 +0200
@@ -22,6 +22,7 @@
 require "yast"
 require "autoinstall/xml_validator"
 require "yast2/popup"
+require "yaml"
 
 Yast.import "AutoinstConfig"
 Yast.import "Report"
@@ -31,19 +32,28 @@
   # for not well formed or invalid documents. It is possible to continue
   # anyway and ignore the found problems at your risk.
   class XmlChecks
-    extend Yast::Logger
-    extend Yast::I18n
-    textdomain "autoinst"
+    include Singleton
+    include Yast::Logger
+    include Yast::I18n
 
     # paths to the default AutoYaST schema files
     PROFILE_SCHEMA = "/usr/share/YaST2/schema/autoyast/rng/profile.rng".freeze
     RULES_SCHEMA = "/usr/share/YaST2/schema/autoyast/rng/rules.rng".freeze
     CLASSES_SCHEMA = 
"/usr/share/YaST2/schema/autoyast/rng/classes-use.rng".freeze
 
+    ERRORS_PATH = "/var/lib/YaST2/xml_checks_errors".freeze
+
+    # Constructor
+    def initialize
+      textdomain "autoinst"
+
+      @reported_errors = errors_from_file
+    end
+
     # Is the file a valid AutoYaST XML profile?
     # @param file [String] pahth to the classes file
     # @return [Boolean] true if valid, false otherwise
-    def self.valid_profile?(file = Yast::AutoinstConfig.xml_tmpfile)
+    def valid_profile?(file = Yast::AutoinstConfig.xml_tmpfile)
       # TRANSLATORS: Error message
       msg = _("The AutoYaST profile is not a valid XML document.")
       check(file, PROFILE_SCHEMA, msg)
@@ -51,7 +61,7 @@
 
     # Is the file a valid AutoYaST XML profile?
     # @return [Boolean] true if valid, false otherwise
-    def self.valid_modified_profile?
+    def valid_modified_profile?
       # TRANSLATORS: Error message
       msg = _("The AutoYaST pre-script generated an invalid XML document.")
       check(Yast::AutoinstConfig.modified_profile, PROFILE_SCHEMA, msg)
@@ -59,7 +69,7 @@
 
     # Is the file a valid AutoYaST rules file?
     # @return [Boolean] true if valid, false otherwise
-    def self.valid_rules?
+    def valid_rules?
       # TRANSLATORS: Error message
       msg = _("The AutoYaST rules file is not a valid XML document.")
       check(Yast::AutoinstConfig.local_rules_file, RULES_SCHEMA, msg)
@@ -68,7 +78,7 @@
     # Is the file a valid AutoYaST class file?
     # @param file [String] path to the classes file
     # @return [Boolean] true if valid, false otherwise
-    def self.valid_classes?(file)
+    def valid_classes?(file)
       # TRANSLATORS: Error message
       msg = _("The AutoYaST class file is not a valid XML document.")
       check(file, RULES_SCHEMA, msg)
@@ -79,9 +89,9 @@
     # @param schema [String] path to the RNG schema
     # @param msg [String] title displayed in the popup when validation fails
     # @return [Boolean] true if valid, false otherwise
-    def self.check(file, schema, msg)
+    def check(file, schema, msg)
       validator = XmlValidator.new(file, schema)
-      return true if validator.valid?
+      return true if validator.valid? || !new_errors?(validator.errors)
 
       if ENV["YAST_SKIP_XML_VALIDATION"] == "1"
         log.warn "Skipping invalid XML!"
@@ -94,17 +104,62 @@
         buttons:  :continue_cancel,
         focus:    :cancel) == :continue
 
-      log.warn "Skipping invalid XML on user request!" if ret
+      if ret
+        log.warn "Skipping invalid XML on user request and storing validation 
errors!"
+        store_errors(validator.errors)
+      end
 
       ret
     end
 
+  private
+
+    # Convenience method to check whether the list of validation errors have
+    # been already reported and accepted by the user or not.
+    #
+    # @param errors [Array<String>] list of validation errors
+    # @return [Boolean] whether the validation errors are new or not
+    def new_errors?(errors)
+      return true if (reported_errors || []).empty?
+
+      !reported_errors.include?(digest_hash(errors))
+    end
+
+    # Convenience method to save to a file the hash sum of the already
+    # reported errors
+    #
+    # @param errors [Array<String>] list of validation errors
+    def store_errors(errors)
+      @reported_errors << digest_hash(errors)
+
+      File.write(ERRORS_PATH, reported_errors.to_yaml)
+    end
+
+    # Convenience method to obtain the digest hash for the given errors
+    #
+    # @param errors [Array<String>] list of validation errors
+    def digest_hash(errors)
+      Digest::MD5.hexdigest(errors.to_yaml)
+    end
+
+    # Convenience method to load the errors reported from a file
+    def errors_from_file
+      return [] unless File.exist?(ERRORS_PATH)
+
+      YAML.safe_load(File.read(ERRORS_PATH))
+    end
+
+    # @return [Array<String>] array with the reported errors hash sums
+    def reported_errors
+      @reported_errors ||= []
+    end
+
     # an internal helper for building the error message
     # @param msg [String] title text
     # @param errors [Array<String>] list of validation errors
     # @param file [String] path to the XML file (only the base name is 
displayed)
     # @param schema [String] path to the RNG schema
-    def self.message(msg, errors, file, schema)
+    def message(msg, errors, file, schema)
       xml_file = File.basename(file)
       jing_command = "jing #{schema} #{xml_file}"
       xmllint_command = "xmllint --noout --relaxng #{schema} #{xml_file}"
@@ -122,7 +177,5 @@
         "&nbsp;&nbsp;%{jing}<br>" \
         "&nbsp;&nbsp;%{xmllint}"), jing: jing_command, xmllint: 
xmllint_command) + "</p>"
     end
-
-    private_class_method :message
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/src/modules/AutoInstallRules.rb 
new/autoyast2-4.3.32/src/modules/AutoInstallRules.rb
--- old/autoyast2-4.3.31/src/modules/AutoInstallRules.rb        2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/src/modules/AutoInstallRules.rb        2020-07-31 
10:35:35.000000000 +0200
@@ -899,7 +899,7 @@
         log.info("Working on file: #{file}")
         current_profile = File.join(AutoinstConfig.local_rules_location, file)
 
-        if !Y2Autoinstallation::XmlChecks.valid_profile?(current_profile)
+        if 
!Y2Autoinstallation::XmlChecks.instance.valid_profile?(current_profile)
           error = true
           next
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/src/modules/AutoinstClass.rb 
new/autoyast2-4.3.32/src/modules/AutoinstClass.rb
--- old/autoyast2-4.3.31/src/modules/AutoinstClass.rb   2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/src/modules/AutoinstClass.rb   2020-07-31 
10:35:35.000000000 +0200
@@ -52,7 +52,7 @@
     # Reads classes
     def Read
       if SCR.Read(path(".target.size"), @classPath) != -1 &&
-          Y2Autoinstallation::XmlChecks.valid_classes?(@classPath)
+          Y2Autoinstallation::XmlChecks.instance.valid_classes?(@classPath)
         begin
           classes_map = XML.XMLToYCPFile(@classPath)
           @Classes = (classes_map && classes_map["classes"]) || []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/src/modules/AutoinstScripts.rb 
new/autoyast2-4.3.32/src/modules/AutoinstScripts.rb
--- old/autoyast2-4.3.31/src/modules/AutoinstScripts.rb 2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/src/modules/AutoinstScripts.rb 2020-07-31 
10:35:35.000000000 +0200
@@ -31,8 +31,7 @@
   # directory.
   #
   # #### Post Partitioning Scripts
-  # Runs after partitioning from {Yast::InstAutoimageClient} unconditionaly 
even when images is
-  # not used.
+  # Runs after partitioning from {Yast::InstKickoffClient}
   #
   class AutoinstScriptsClass < Module
     include Yast::Logger
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/src/modules/ProfileLocation.rb 
new/autoyast2-4.3.32/src/modules/ProfileLocation.rb
--- old/autoyast2-4.3.31/src/modules/ProfileLocation.rb 2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/src/modules/ProfileLocation.rb 2020-07-31 
10:35:35.000000000 +0200
@@ -30,6 +30,10 @@
       ProfileLocation()
     end
 
+    def profile_checker
+      Y2Autoinstallation::XmlChecks.instance
+    end
+
     # Constructor
     # @return [void]
     def ProfileLocation
@@ -176,7 +180,7 @@
         )
       end
 
-      return false if !is_directory && 
!Y2Autoinstallation::XmlChecks.valid_profile?
+      return false if !is_directory && !profile_checker.valid_profile?
 
       ret = if is_directory
         Get(
@@ -204,7 +208,7 @@
       if AutoInstallRules.userrules
         Builtins.y2milestone("Reading Rules File")
         # display an error when the rules file is not valid and return false
-        return false unless Y2Autoinstallation::XmlChecks.valid_rules?
+        return false unless profile_checker.valid_rules?
 
         AutoInstallRules.Read
         # returns false if no rules have matched
@@ -232,7 +236,7 @@
       if process_rules
         rulesret = AutoInstallRules.Process(AutoinstConfig.xml_tmpfile)
         # validate the profile
-        return false if rulesret && 
!Y2Autoinstallation::XmlChecks.valid_profile?
+        return false if rulesret && !profile_checker.valid_profile?
 
         Builtins.y2milestone("rulesret=%1", rulesret)
         return rulesret
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/test/AutoInstallRules_test.rb 
new/autoyast2-4.3.32/test/AutoInstallRules_test.rb
--- old/autoyast2-4.3.31/test/AutoInstallRules_test.rb  2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/test/AutoInstallRules_test.rb  2020-07-31 
10:35:35.000000000 +0200
@@ -6,10 +6,11 @@
 
 describe "Yast::AutoInstallRules" do
   subject { Yast::AutoInstallRules }
+  let(:profile_checker) { Y2Autoinstallation::XmlChecks.instance }
 
   before do
     Y2Storage::StorageManager.create_test_instance
-    allow(Y2Autoinstallation::XmlChecks).to 
receive(:valid_profile?).and_return(true)
+    allow(profile_checker).to receive(:valid_profile?).and_return(true)
   end
 
   let(:root_path) { File.expand_path("..", __dir__) }
@@ -328,7 +329,7 @@
     context "when a profile is not valid" do
       it "returns false" do
         subject.CreateFile("first.xml")
-        expect(Y2Autoinstallation::XmlChecks).to receive(:valid_profile?)
+        expect(profile_checker).to receive(:valid_profile?)
           .and_return(false)
         expect(subject.Merge(result_path)).to eq(false)
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/test/AutoinstClass_test.rb 
new/autoyast2-4.3.32/test/AutoinstClass_test.rb
--- old/autoyast2-4.3.31/test/AutoinstClass_test.rb     2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/test/AutoinstClass_test.rb     2020-07-31 
10:35:35.000000000 +0200
@@ -16,7 +16,7 @@
 
   before(:each) do
     subject.class_dir = CLASS_DIR
-    allow(Y2Autoinstallation::XmlChecks).to 
receive(:valid_classes?).and_return(true)
+    allow(Y2Autoinstallation::XmlChecks.instance).to 
receive(:valid_classes?).and_return(true)
   end
 
   describe "#Read" do
@@ -65,7 +65,7 @@
       before(:each) do
         allow(Yast::SCR).to receive(:Read).and_call_original
         allow(Yast::SCR).to receive(:Read).with(Yast::Path.new(".xml"), 
CLASS_PATH).and_return(nil)
-        expect(Y2Autoinstallation::XmlChecks).to 
receive(:valid_classes?).and_return(false)
+        expect(Y2Autoinstallation::XmlChecks.instance).to 
receive(:valid_classes?).and_return(false)
       end
 
       it "set Classes to []" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/test/lib/autosetup_helpers_test.rb 
new/autoyast2-4.3.32/test/lib/autosetup_helpers_test.rb
--- old/autoyast2-4.3.31/test/lib/autosetup_helpers_test.rb     2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/test/lib/autosetup_helpers_test.rb     2020-07-31 
10:35:35.000000000 +0200
@@ -34,7 +34,8 @@
   let(:profile_dir_path) { File.join(TESTS_PATH, "tmp") }
 
   before do
-    allow(Y2Autoinstallation::XmlChecks).to 
receive(:valid_modified_profile?).and_return(true)
+    allow(Y2Autoinstallation::XmlChecks.instance)
+      .to receive(:valid_modified_profile?).and_return(true)
   end
 
   describe "#probe_storage" do
@@ -213,7 +214,7 @@
 
       context "when the modified profile is not valid" do
         before do
-          expect(Y2Autoinstallation::XmlChecks).to 
receive(:valid_modified_profile?)
+          expect(Y2Autoinstallation::XmlChecks.instance).to 
receive(:valid_modified_profile?)
             .and_return(false)
         end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/autoyast2-4.3.31/test/lib/clients/inst_autoinit_test.rb 
new/autoyast2-4.3.32/test/lib/clients/inst_autoinit_test.rb
--- old/autoyast2-4.3.31/test/lib/clients/inst_autoinit_test.rb 2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/test/lib/clients/inst_autoinit_test.rb 2020-07-31 
10:35:35.000000000 +0200
@@ -27,6 +27,7 @@
     allow(Yast::WFM).to receive(:CallFunction).and_return(true)
     # can easily ends up in endless loop
     allow(subject).to receive(:ProfileSourceDialog).and_return("")
+    allow(subject).to receive(:autoinit_scripts).and_return(:ok)
     allow(Yast::Linuxrc).to receive(:useiscsi).and_return(false)
     allow(Yast::Linuxrc).to receive(:InstallInf).and_return(nil)
     allow(Yast::ProfileLocation).to receive(:Process).and_return(true)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/autoyast2-4.3.31/test/lib/xml_checks_test.rb 
new/autoyast2-4.3.32/test/lib/xml_checks_test.rb
--- old/autoyast2-4.3.31/test/lib/xml_checks_test.rb    2020-07-29 
18:30:30.000000000 +0200
+++ new/autoyast2-4.3.32/test/lib/xml_checks_test.rb    2020-07-31 
10:35:35.000000000 +0200
@@ -4,25 +4,132 @@
 require "autoinstall/xml_checks"
 
 describe Y2Autoinstallation::XmlChecks do
+  let(:subject) { described_class.instance }
+  let(:errors_path) { File.join(FIXTURES_PATH, "xml_checks_errors") }
 
   before do
+    stub_const("Y2Autoinstallation::XmlChecks::ERRORS_PATH", errors_path)
     # mock the popup to avoid accidentally displaying a popup in tests
     allow(Yast2::Popup).to receive(:show)
   end
 
   describe ".valid_profile?" do
+    let(:valid) { true }
+
+    before do
+      allow(subject).to receive(:check).and_return(valid)
+    end
+
+    it "checks whether a given profile is valid or not" do
+      expect(subject).to receive(:check)
+
+      subject.valid_profile?
+    end
+
+    context "when a valid profile is used" do
+      it "returns true" do
+        expect(subject.valid_profile?).to eql(true)
+      end
+    end
+
+    context "when an invalid profile is used" do
+      let(:valid) { false }
+
+      it "returns false" do
+        expect(subject.valid_profile?).to eql(false)
+      end
+    end
+  end
+
+  describe ".check" do
+    let(:xml_name) { "foo.xml" }
+    let(:schema_name) { "bar.rng" }
+    let(:xml) { Pathname.new(xml_name) }
+    let(:schema) { Pathname.new(schema_name) }
+    let(:valid) { true }
+    let(:errors) { ["ERROR"] }
+    let(:validator) do
+      instance_double(Y2Autoinstallation::XmlValidator, valid?: valid, errors: 
errors)
+    end
+
+    after do
+      File.delete errors_path if File.exist?(errors_path)
+    end
+
     before do
-      expect_any_instance_of(Y2Autoinstallation::XmlValidator).to 
receive(:valid?)
-        .and_return(valid)
+      allow(Y2Autoinstallation::XmlValidator).to 
receive(:new).and_return(validator)
+      reset_singleton(Y2Autoinstallation::XmlChecks)
     end
 
-    context "valid profile" do
-      let(:valid) { true }
+    context "when the profile is a valid one" do
+      it "returns true" do
+        expect(subject.check(xml, schema, "title")).to eq(true)
+      end
     end
 
-    context "invalid profile" do
+    context "when the profile is an invalid one" do
       let(:valid) { false }
+      let(:popup_selection) { :continue }
 
+      before do
+        allow(Yast2::Popup).to receive(:show).and_return(popup_selection)
+      end
+
+      context "and it is the first time that the errors have been reported" do
+        it "returns true if the user skipped the validation" do
+          allow(ENV).to 
receive(:"[]").with("YAST_SKIP_XML_VALIDATION").and_return("1")
+
+          expect(Yast2::Popup).to_not receive(:show)
+          expect(subject.check(xml, schema, "title")).to eql(true)
+        end
+
+        it "shows a popup" do
+          expect(Yast2::Popup).to receive(:show)
+
+          subject.check(xml, schema, "title")
+        end
+
+        context "if the user continues with the errors reported" do
+          it "stores the errors reported" do
+            expect { subject.check(xml, schema, "title") }
+              .to change { File.exist?(errors_path) }.from(false).to(true)
+          end
+
+          it "returns true" do
+            expect(subject.check(xml, schema, "title")).to eql(true)
+          end
+        end
+
+        context "if the user cancels" do
+          let(:popup_selection) { :cancel }
+
+          it "does not stores them" do
+            expect(subject).to_not receive(:store_errors)
+
+            subject.check(xml, schema, "title")
+          end
+
+          it "returns false" do
+            expect(subject.check(xml, schema, "title")).to eql(false)
+          end
+        end
+      end
+
+      context "and the same errors were already reported" do
+        before do
+          subject.check(xml, schema, "title")
+        end
+
+        it "does not show any popup" do
+          expect(Yast2::Popup).to_not receive(:show)
+
+          subject.check(xml, schema, "title")
+        end
+
+        it "returns true" do
+          expect(subject.check(xml, schema, "title")).to eql(true)
+        end
+      end
     end
   end
 end


Reply via email to