From 4dd6ecd54e30ba705d55d42f9cae52be4a512b3d Mon Sep 17 00:00:00 2001
From: Adriaan de Groot <groot@kde.org>
Date: Fri, 16 Apr 2021 11:39:00 +0200
Subject: [PATCH] [netinstall] Edge cases of zero, or unset, groups urls

- consumers may wait for loadingDone(), so always emit that
  even if no URL list is set.
---
 src/modules/netinstall/Config.cpp          | 15 ++++++---------
 src/modules/netinstall/Tests.cpp           |  1 +
 src/modules/netinstall/tests/1c-unset.conf |  5 +++++
 3 files changed, 12 insertions(+), 9 deletions(-)
 create mode 100644 src/modules/netinstall/tests/1c-unset.conf

diff --git a/src/modules/netinstall/Config.cpp b/src/modules/netinstall/Config.cpp
index 1656f7a06..c163d72a0 100644
--- a/src/modules/netinstall/Config.cpp
+++ b/src/modules/netinstall/Config.cpp
@@ -136,26 +136,23 @@ Config::setConfigurationMap( const QVariantMap& configurationMap )
     // Lastly, load the groups data
     const QString key = QStringLiteral( "groupsUrl" );
     const auto& groupsUrlVariant = configurationMap.value( key );
+    m_queue = new LoaderQueue( this );
     if ( groupsUrlVariant.type() == QVariant::String )
     {
-        m_queue = new LoaderQueue( this );
         m_queue->append( SourceItem::makeSourceItem( groupsUrlVariant.toString(), configurationMap ) );
     }
     else if ( groupsUrlVariant.type() == QVariant::List )
     {
-        m_queue = new LoaderQueue( this );
         for ( const auto& s : groupsUrlVariant.toStringList() )
         {
             m_queue->append( SourceItem::makeSourceItem( s, configurationMap ) );
         }
     }
-    if ( m_queue && m_queue->count() > 0 )
-    {
-        cDebug() << "Loading netinstall from" << m_queue->count() << "alternate sources.";
-        setStatus( required() ? Status::FailedNoData : Status::Ok );
-        connect( m_queue, &LoaderQueue::done, this, &Config::loadingDone );
-        m_queue->load();
-    }
+
+    setStatus( required() ? Status::FailedNoData : Status::Ok );
+    cDebug() << "Loading netinstall from" << m_queue->count() << "alternate sources.";
+    connect( m_queue, &LoaderQueue::done, this, &Config::loadingDone );
+    m_queue->load();
 }
 
 void
diff --git a/src/modules/netinstall/Tests.cpp b/src/modules/netinstall/Tests.cpp
index 9a02d4969..06223a709 100644
--- a/src/modules/netinstall/Tests.cpp
+++ b/src/modules/netinstall/Tests.cpp
@@ -347,6 +347,7 @@ ItemTests::testUrlFallback_data()
     QTest::newRow( "error" ) << "1a-single-error.conf" << smash( S::FailedBadData ) << 0;
     QTest::newRow( "second" ) << "1b-single-small.conf" << smash( S::Ok ) << 2;
     QTest::newRow( "none" ) << "1c-none.conf" << smash( S::FailedNoData ) << 0;
+    QTest::newRow( "unset" ) << "1c-unset.conf" << smash( S::FailedNoData ) << 0;
 }
 
 void
diff --git a/src/modules/netinstall/tests/1c-unset.conf b/src/modules/netinstall/tests/1c-unset.conf
new file mode 100644
index 000000000..b25dbb6ea
--- /dev/null
+++ b/src/modules/netinstall/tests/1c-unset.conf
@@ -0,0 +1,5 @@
+# SPDX-FileCopyrightText: no
+# SPDX-License-Identifier: CC0-1.0
+#
+---
+required: true