File mark-salt-3006-as-released-586.patch of Package salt

From c1408333364ac25ff5d316afa9674f7687217b0c Mon Sep 17 00:00:00 2001
From: Dominik Gedon <dgedon@suse.de>
Date: Thu, 3 Aug 2023 11:08:21 +0200
Subject: [PATCH] Mark Salt 3006 as released (#586)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Mark Salt 3006 as released

Without this, commands like

```
salt '*' salt_version.equal 'Sulfur'
```

will not work properly and return False although Salt 3006 is used.

Signed-off-by: Dominik Gedon <dominik.gedon@suse.com>

* Fix detection of Salt codename by salt_version module

* Fix mess with version detection bad version definition

* Add some new and fix unit tests

* Fix SaltStackVersion string for new versions format

* Do not crash when passing numbers to 'salt_version.get_release_number'

* Fix salt_version execution module documentation

---------

Signed-off-by: Dominik Gedon <dominik.gedon@suse.com>
Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com>
---
 salt/modules/salt_version.py                  |   8 +-
 salt/version.py                               | 218 +++++++++---------
 .../pytests/unit/modules/test_salt_version.py |  55 ++++-
 tests/pytests/unit/test_version.py            |  10 +-
 4 files changed, 176 insertions(+), 115 deletions(-)

diff --git a/salt/modules/salt_version.py b/salt/modules/salt_version.py
index 1b5421fee4..99dae5f61a 100644
--- a/salt/modules/salt_version.py
+++ b/salt/modules/salt_version.py
@@ -20,7 +20,7 @@ A simple example might be something like the following:
 .. code-block:: jinja
 
     {# a boolean check #}
-    {% set option_deprecated = salt['salt_version.less_than']("3001") %}
+    {% set option_deprecated = salt['salt_version.less_than']("Sodium") %}
 
     {% if option_deprecated %}
       <use old syntax>
@@ -35,6 +35,7 @@ import logging
 
 import salt.utils.versions
 import salt.version
+from salt.exceptions import CommandExecutionError
 
 log = logging.getLogger(__name__)
 
@@ -51,7 +52,7 @@ def __virtual__():
 def get_release_number(name):
     """
     Returns the release number of a given release code name in a
-    ``MAJOR.PATCH`` format.
+    ``MAJOR.PATCH`` format (for Salt versions < 3000) or ``MAJOR`` for newer Salt versions.
 
     If the release name has not been given an assigned release number, the
     function returns a string. If the release cannot be found, it returns
@@ -66,6 +67,9 @@ def get_release_number(name):
 
         salt '*' salt_version.get_release_number 'Oxygen'
     """
+    if not isinstance(name, str):
+        raise CommandExecutionError("'name' argument must be a string")
+
     name = name.lower()
     version_map = salt.version.SaltStackVersion.LNAMES
     version = version_map.get(name)
diff --git a/salt/version.py b/salt/version.py
index 67719bd020..44372830b2 100644
--- a/salt/version.py
+++ b/salt/version.py
@@ -77,109 +77,109 @@ class SaltVersionsInfo(type):
     ALUMINIUM     = SaltVersion("Aluminium"    , info=3003,       released=True)
     SILICON       = SaltVersion("Silicon"      , info=3004,       released=True)
     PHOSPHORUS    = SaltVersion("Phosphorus"   , info=3005,       released=True)
-    SULFUR        = SaltVersion("Sulfur"       , info=(3006, 0))
-    CHLORINE      = SaltVersion("Chlorine"     , info=(3007, 0))
-    ARGON         = SaltVersion("Argon"        , info=(3008, 0))
-    POTASSIUM     = SaltVersion("Potassium"    , info=(3009, 0))
-    CALCIUM       = SaltVersion("Calcium"      , info=(3010, 0))
-    SCANDIUM      = SaltVersion("Scandium"     , info=(3011, 0))
-    TITANIUM      = SaltVersion("Titanium"     , info=(3012, 0))
-    VANADIUM      = SaltVersion("Vanadium"     , info=(3013, 0))
-    CHROMIUM      = SaltVersion("Chromium"     , info=(3014, 0))
-    MANGANESE     = SaltVersion("Manganese"    , info=(3015, 0))
-    IRON          = SaltVersion("Iron"         , info=(3016, 0))
-    COBALT        = SaltVersion("Cobalt"       , info=(3017, 0))
-    NICKEL        = SaltVersion("Nickel"       , info=(3018, 0))
-    COPPER        = SaltVersion("Copper"       , info=(3019, 0))
-    ZINC          = SaltVersion("Zinc"         , info=(3020, 0))
-    GALLIUM       = SaltVersion("Gallium"      , info=(3021, 0))
-    GERMANIUM     = SaltVersion("Germanium"    , info=(3022, 0))
-    ARSENIC       = SaltVersion("Arsenic"      , info=(3023, 0))
-    SELENIUM      = SaltVersion("Selenium"     , info=(3024, 0))
-    BROMINE       = SaltVersion("Bromine"      , info=(3025, 0))
-    KRYPTON       = SaltVersion("Krypton"      , info=(3026, 0))
-    RUBIDIUM      = SaltVersion("Rubidium"     , info=(3027, 0))
-    STRONTIUM     = SaltVersion("Strontium"    , info=(3028, 0))
-    YTTRIUM       = SaltVersion("Yttrium"      , info=(3029, 0))
-    ZIRCONIUM     = SaltVersion("Zirconium"    , info=(3030, 0))
-    NIOBIUM       = SaltVersion("Niobium"      , info=(3031, 0))
-    MOLYBDENUM    = SaltVersion("Molybdenum"   , info=(3032, 0))
-    TECHNETIUM    = SaltVersion("Technetium"   , info=(3033, 0))
-    RUTHENIUM     = SaltVersion("Ruthenium"    , info=(3034, 0))
-    RHODIUM       = SaltVersion("Rhodium"      , info=(3035, 0))
-    PALLADIUM     = SaltVersion("Palladium"    , info=(3036, 0))
-    SILVER        = SaltVersion("Silver"       , info=(3037, 0))
-    CADMIUM       = SaltVersion("Cadmium"      , info=(3038, 0))
-    INDIUM        = SaltVersion("Indium"       , info=(3039, 0))
-    TIN           = SaltVersion("Tin"          , info=(3040, 0))
-    ANTIMONY      = SaltVersion("Antimony"     , info=(3041, 0))
-    TELLURIUM     = SaltVersion("Tellurium"    , info=(3042, 0))
-    IODINE        = SaltVersion("Iodine"       , info=(3043, 0))
-    XENON         = SaltVersion("Xenon"        , info=(3044, 0))
-    CESIUM        = SaltVersion("Cesium"       , info=(3045, 0))
-    BARIUM        = SaltVersion("Barium"       , info=(3046, 0))
-    LANTHANUM     = SaltVersion("Lanthanum"    , info=(3047, 0))
-    CERIUM        = SaltVersion("Cerium"       , info=(3048, 0))
-    PRASEODYMIUM  = SaltVersion("Praseodymium" , info=(3049, 0))
-    NEODYMIUM     = SaltVersion("Neodymium"    , info=(3050, 0))
-    PROMETHIUM    = SaltVersion("Promethium"   , info=(3051, 0))
-    SAMARIUM      = SaltVersion("Samarium"     , info=(3052, 0))
-    EUROPIUM      = SaltVersion("Europium"     , info=(3053, 0))
-    GADOLINIUM    = SaltVersion("Gadolinium"   , info=(3054, 0))
-    TERBIUM       = SaltVersion("Terbium"      , info=(3055, 0))
-    DYSPROSIUM    = SaltVersion("Dysprosium"   , info=(3056, 0))
-    HOLMIUM       = SaltVersion("Holmium"      , info=(3057, 0))
-    ERBIUM        = SaltVersion("Erbium"       , info=(3058, 0))
-    THULIUM       = SaltVersion("Thulium"      , info=(3059, 0))
-    YTTERBIUM     = SaltVersion("Ytterbium"    , info=(3060, 0))
-    LUTETIUM      = SaltVersion("Lutetium"     , info=(3061, 0))
-    HAFNIUM       = SaltVersion("Hafnium"      , info=(3062, 0))
-    TANTALUM      = SaltVersion("Tantalum"     , info=(3063, 0))
-    TUNGSTEN      = SaltVersion("Tungsten"     , info=(3064, 0))
-    RHENIUM       = SaltVersion("Rhenium"      , info=(3065, 0))
-    OSMIUM        = SaltVersion("Osmium"       , info=(3066, 0))
-    IRIDIUM       = SaltVersion("Iridium"      , info=(3067, 0))
-    PLATINUM      = SaltVersion("Platinum"     , info=(3068, 0))
-    GOLD          = SaltVersion("Gold"         , info=(3069, 0))
-    MERCURY       = SaltVersion("Mercury"      , info=(3070, 0))
-    THALLIUM      = SaltVersion("Thallium"     , info=(3071, 0))
-    LEAD          = SaltVersion("Lead"         , info=(3072, 0))
-    BISMUTH       = SaltVersion("Bismuth"      , info=(3073, 0))
-    POLONIUM      = SaltVersion("Polonium"     , info=(3074, 0))
-    ASTATINE      = SaltVersion("Astatine"     , info=(3075, 0))
-    RADON         = SaltVersion("Radon"        , info=(3076, 0))
-    FRANCIUM      = SaltVersion("Francium"     , info=(3077, 0))
-    RADIUM        = SaltVersion("Radium"       , info=(3078, 0))
-    ACTINIUM      = SaltVersion("Actinium"     , info=(3079, 0))
-    THORIUM       = SaltVersion("Thorium"      , info=(3080, 0))
-    PROTACTINIUM  = SaltVersion("Protactinium" , info=(3081, 0))
-    URANIUM       = SaltVersion("Uranium"      , info=(3082, 0))
-    NEPTUNIUM     = SaltVersion("Neptunium"    , info=(3083, 0))
-    PLUTONIUM     = SaltVersion("Plutonium"    , info=(3084, 0))
-    AMERICIUM     = SaltVersion("Americium"    , info=(3085, 0))
-    CURIUM        = SaltVersion("Curium"       , info=(3086, 0))
-    BERKELIUM     = SaltVersion("Berkelium"    , info=(3087, 0))
-    CALIFORNIUM   = SaltVersion("Californium"  , info=(3088, 0))
-    EINSTEINIUM   = SaltVersion("Einsteinium"  , info=(3089, 0))
-    FERMIUM       = SaltVersion("Fermium"      , info=(3090, 0))
-    MENDELEVIUM   = SaltVersion("Mendelevium"  , info=(3091, 0))
-    NOBELIUM      = SaltVersion("Nobelium"     , info=(3092, 0))
-    LAWRENCIUM    = SaltVersion("Lawrencium"   , info=(3093, 0))
-    RUTHERFORDIUM = SaltVersion("Rutherfordium", info=(3094, 0))
-    DUBNIUM       = SaltVersion("Dubnium"      , info=(3095, 0))
-    SEABORGIUM    = SaltVersion("Seaborgium"   , info=(3096, 0))
-    BOHRIUM       = SaltVersion("Bohrium"      , info=(3097, 0))
-    HASSIUM       = SaltVersion("Hassium"      , info=(3098, 0))
-    MEITNERIUM    = SaltVersion("Meitnerium"   , info=(3099, 0))
-    DARMSTADTIUM  = SaltVersion("Darmstadtium" , info=(3100, 0))
-    ROENTGENIUM   = SaltVersion("Roentgenium"  , info=(3101, 0))
-    COPERNICIUM   = SaltVersion("Copernicium"  , info=(3102, 0))
-    NIHONIUM      = SaltVersion("Nihonium"     , info=(3103, 0))
-    FLEROVIUM     = SaltVersion("Flerovium"    , info=(3104, 0))
-    MOSCOVIUM     = SaltVersion("Moscovium"    , info=(3105, 0))
-    LIVERMORIUM   = SaltVersion("Livermorium"  , info=(3106, 0))
-    TENNESSINE    = SaltVersion("Tennessine"   , info=(3107, 0))
-    OGANESSON     = SaltVersion("Oganesson"    , info=(3108, 0))
+    SULFUR        = SaltVersion("Sulfur"       , info=3006,       released=True)
+    CHLORINE      = SaltVersion("Chlorine"     , info=3007)
+    ARGON         = SaltVersion("Argon"        , info=3008)
+    POTASSIUM     = SaltVersion("Potassium"    , info=3009)
+    CALCIUM       = SaltVersion("Calcium"      , info=3010)
+    SCANDIUM      = SaltVersion("Scandium"     , info=3011)
+    TITANIUM      = SaltVersion("Titanium"     , info=3012)
+    VANADIUM      = SaltVersion("Vanadium"     , info=3013)
+    CHROMIUM      = SaltVersion("Chromium"     , info=3014)
+    MANGANESE     = SaltVersion("Manganese"    , info=3015)
+    IRON          = SaltVersion("Iron"         , info=3016)
+    COBALT        = SaltVersion("Cobalt"       , info=3017)
+    NICKEL        = SaltVersion("Nickel"       , info=3018)
+    COPPER        = SaltVersion("Copper"       , info=3019)
+    ZINC          = SaltVersion("Zinc"         , info=3020)
+    GALLIUM       = SaltVersion("Gallium"      , info=3021)
+    GERMANIUM     = SaltVersion("Germanium"    , info=3022)
+    ARSENIC       = SaltVersion("Arsenic"      , info=3023)
+    SELENIUM      = SaltVersion("Selenium"     , info=3024)
+    BROMINE       = SaltVersion("Bromine"      , info=3025)
+    KRYPTON       = SaltVersion("Krypton"      , info=3026)
+    RUBIDIUM      = SaltVersion("Rubidium"     , info=3027)
+    STRONTIUM     = SaltVersion("Strontium"    , info=3028)
+    YTTRIUM       = SaltVersion("Yttrium"      , info=3029)
+    ZIRCONIUM     = SaltVersion("Zirconium"    , info=3030)
+    NIOBIUM       = SaltVersion("Niobium"      , info=3031)
+    MOLYBDENUM    = SaltVersion("Molybdenum"   , info=3032)
+    TECHNETIUM    = SaltVersion("Technetium"   , info=3033)
+    RUTHENIUM     = SaltVersion("Ruthenium"    , info=3034)
+    RHODIUM       = SaltVersion("Rhodium"      , info=3035)
+    PALLADIUM     = SaltVersion("Palladium"    , info=3036)
+    SILVER        = SaltVersion("Silver"       , info=3037)
+    CADMIUM       = SaltVersion("Cadmium"      , info=3038)
+    INDIUM        = SaltVersion("Indium"       , info=3039)
+    TIN           = SaltVersion("Tin"          , info=3040)
+    ANTIMONY      = SaltVersion("Antimony"     , info=3041)
+    TELLURIUM     = SaltVersion("Tellurium"    , info=3042)
+    IODINE        = SaltVersion("Iodine"       , info=3043)
+    XENON         = SaltVersion("Xenon"        , info=3044)
+    CESIUM        = SaltVersion("Cesium"       , info=3045)
+    BARIUM        = SaltVersion("Barium"       , info=3046)
+    LANTHANUM     = SaltVersion("Lanthanum"    , info=3047)
+    CERIUM        = SaltVersion("Cerium"       , info=3048)
+    PRASEODYMIUM  = SaltVersion("Praseodymium" , info=3049)
+    NEODYMIUM     = SaltVersion("Neodymium"    , info=3050)
+    PROMETHIUM    = SaltVersion("Promethium"   , info=3051)
+    SAMARIUM      = SaltVersion("Samarium"     , info=3052)
+    EUROPIUM      = SaltVersion("Europium"     , info=3053)
+    GADOLINIUM    = SaltVersion("Gadolinium"   , info=3054)
+    TERBIUM       = SaltVersion("Terbium"      , info=3055)
+    DYSPROSIUM    = SaltVersion("Dysprosium"   , info=3056)
+    HOLMIUM       = SaltVersion("Holmium"      , info=3057)
+    ERBIUM        = SaltVersion("Erbium"       , info=3058)
+    THULIUM       = SaltVersion("Thulium"      , info=3059)
+    YTTERBIUM     = SaltVersion("Ytterbium"    , info=3060)
+    LUTETIUM      = SaltVersion("Lutetium"     , info=3061)
+    HAFNIUM       = SaltVersion("Hafnium"      , info=3062)
+    TANTALUM      = SaltVersion("Tantalum"     , info=3063)
+    TUNGSTEN      = SaltVersion("Tungsten"     , info=3064)
+    RHENIUM       = SaltVersion("Rhenium"      , info=3065)
+    OSMIUM        = SaltVersion("Osmium"       , info=3066)
+    IRIDIUM       = SaltVersion("Iridium"      , info=3067)
+    PLATINUM      = SaltVersion("Platinum"     , info=3068)
+    GOLD          = SaltVersion("Gold"         , info=3069)
+    MERCURY       = SaltVersion("Mercury"      , info=3070)
+    THALLIUM      = SaltVersion("Thallium"     , info=3071)
+    LEAD          = SaltVersion("Lead"         , info=3072)
+    BISMUTH       = SaltVersion("Bismuth"      , info=3073)
+    POLONIUM      = SaltVersion("Polonium"     , info=3074)
+    ASTATINE      = SaltVersion("Astatine"     , info=3075)
+    RADON         = SaltVersion("Radon"        , info=3076)
+    FRANCIUM      = SaltVersion("Francium"     , info=3077)
+    RADIUM        = SaltVersion("Radium"       , info=3078)
+    ACTINIUM      = SaltVersion("Actinium"     , info=3079)
+    THORIUM       = SaltVersion("Thorium"      , info=3080)
+    PROTACTINIUM  = SaltVersion("Protactinium" , info=3081)
+    URANIUM       = SaltVersion("Uranium"      , info=3082)
+    NEPTUNIUM     = SaltVersion("Neptunium"    , info=3083)
+    PLUTONIUM     = SaltVersion("Plutonium"    , info=3084)
+    AMERICIUM     = SaltVersion("Americium"    , info=3085)
+    CURIUM        = SaltVersion("Curium"       , info=3086)
+    BERKELIUM     = SaltVersion("Berkelium"    , info=3087)
+    CALIFORNIUM   = SaltVersion("Californium"  , info=3088)
+    EINSTEINIUM   = SaltVersion("Einsteinium"  , info=3089)
+    FERMIUM       = SaltVersion("Fermium"      , info=3090)
+    MENDELEVIUM   = SaltVersion("Mendelevium"  , info=3091)
+    NOBELIUM      = SaltVersion("Nobelium"     , info=3092)
+    LAWRENCIUM    = SaltVersion("Lawrencium"   , info=3093)
+    RUTHERFORDIUM = SaltVersion("Rutherfordium", info=3094)
+    DUBNIUM       = SaltVersion("Dubnium"      , info=3095)
+    SEABORGIUM    = SaltVersion("Seaborgium"   , info=3096)
+    BOHRIUM       = SaltVersion("Bohrium"      , info=3097)
+    HASSIUM       = SaltVersion("Hassium"      , info=3098)
+    MEITNERIUM    = SaltVersion("Meitnerium"   , info=3099)
+    DARMSTADTIUM  = SaltVersion("Darmstadtium" , info=3100)
+    ROENTGENIUM   = SaltVersion("Roentgenium"  , info=3101)
+    COPERNICIUM   = SaltVersion("Copernicium"  , info=3102)
+    NIHONIUM      = SaltVersion("Nihonium"     , info=3103)
+    FLEROVIUM     = SaltVersion("Flerovium"    , info=3104)
+    MOSCOVIUM     = SaltVersion("Moscovium"    , info=3105)
+    LIVERMORIUM   = SaltVersion("Livermorium"  , info=3106)
+    TENNESSINE    = SaltVersion("Tennessine"   , info=3107)
+    OGANESSON     = SaltVersion("Oganesson"    , info=3108)
     # <---- Please refrain from fixing whitespace -----------------------------------
     # The idea is to keep this readable.
     # -------------------------------------------------------------------------------
@@ -323,9 +323,7 @@ class SaltStackVersion:
         self.mbugfix = mbugfix
         self.pre_type = pre_type
         self.pre_num = pre_num
-        if self.can_have_dot_zero(major):
-            vnames_key = (major, 0)
-        elif self.new_version(major):
+        if self.new_version(major):
             vnames_key = (major,)
         else:
             vnames_key = (major, minor)
@@ -476,8 +474,12 @@ class SaltStackVersion:
         version_string = self.string
         if self.sse:
             version_string += " Enterprise"
-        if (self.major, self.minor) in self.RMATCH:
-            version_string += " ({})".format(self.RMATCH[(self.major, self.minor)])
+        if self.new_version(self.major):
+            rmatch_key = (self.major,)
+        else:
+            rmatch_key = (self.major, self.minor)
+        if rmatch_key in self.RMATCH:
+            version_string += " ({})".format(self.RMATCH[rmatch_key])
         return version_string
 
     @property
diff --git a/tests/pytests/unit/modules/test_salt_version.py b/tests/pytests/unit/modules/test_salt_version.py
index 6d734f6a76..4b7a7cd073 100644
--- a/tests/pytests/unit/modules/test_salt_version.py
+++ b/tests/pytests/unit/modules/test_salt_version.py
@@ -2,8 +2,11 @@
 Unit tests for salt/modules/salt_version.py
 """
 
+import pytest
+
 import salt.modules.salt_version as salt_version
 import salt.version
+from salt.exceptions import CommandExecutionError
 from tests.support.mock import MagicMock, patch
 
 
@@ -21,7 +24,7 @@ def test_mocked_objects():
     for k, v in salt.version.SaltStackVersion.LNAMES.items():
         assert k == k.lower()
         assert isinstance(v, tuple)
-        if sv.new_version(major=v[0]) and not sv.can_have_dot_zero(major=v[0]):
+        if sv.new_version(major=v[0]):
             assert len(v) == 1
         else:
             assert len(v) == 2
@@ -64,6 +67,13 @@ def test_get_release_number_success_new_version():
     assert salt_version.get_release_number("Neon") == "3000"
 
 
+def test_get_release_number_success_new_version_with_dot():
+    """
+    Test that a version is returned for new versioning (3006)
+    """
+    assert salt_version.get_release_number("Sulfur") == "3006"
+
+
 def test_equal_success():
     """
     Test that the current version is equal to the codename
@@ -83,6 +93,16 @@ def test_equal_success_new_version():
             assert salt_version.equal("foo") is True
 
 
+def test_equal_success_new_version_with_dot():
+    """
+    Test that the current version is equal to the codename
+    while using the new versioning
+    """
+    with patch("salt.version.SaltStackVersion", MagicMock(return_value="3006.1")):
+        with patch("salt.version.SaltStackVersion.LNAMES", {"foo": (3006,)}):
+            assert salt_version.equal("foo") is True
+
+
 def test_equal_older_codename():
     """
     Test that when an older codename is passed in, the function returns False.
@@ -142,6 +162,17 @@ def test_greater_than_success_new_version():
             assert salt_version.greater_than("Nitrogen") is True
 
 
+def test_greater_than_success_new_version_with_dot():
+    """
+    Test that the current version is newer than the codename
+    """
+    with patch(
+        "salt.modules.salt_version.get_release_number", MagicMock(return_value="3000")
+    ):
+        with patch("salt.version.SaltStackVersion", MagicMock(return_value="3006.0")):
+            assert salt_version.greater_than("Neon") is True
+
+
 def test_greater_than_with_equal_codename():
     """
     Test that when an equal codename is passed in, the function returns False.
@@ -200,6 +231,28 @@ def test_less_than_success_new_version():
             assert salt_version.less_than("Fluorine") is True
 
 
+def test_less_than_success_new_version_with_dot():
+    """
+    Test that when a newer codename is passed in, the function returns True
+    using new version
+    """
+    with patch("salt.version.SaltStackVersion", MagicMock(return_value="2018.3.2")):
+        with patch(
+            "salt.modules.salt_version.get_release_number",
+            MagicMock(return_value="3006"),
+        ):
+            assert salt_version.less_than("Fluorine") is True
+
+
+def test_less_than_do_not_crash_when_input_is_a_number():
+    """
+    Test that less_than do not crash when unexpected inputs
+    """
+    with patch("salt.version.SaltStackVersion", MagicMock(return_value="2018.3.2")):
+        with pytest.raises(CommandExecutionError):
+            salt_version.less_than(1234)
+
+
 def test_less_than_with_equal_codename():
     """
     Test that when an equal codename is passed in, the function returns False.
diff --git a/tests/pytests/unit/test_version.py b/tests/pytests/unit/test_version.py
index 73befea4cf..1cb94c619c 100644
--- a/tests/pytests/unit/test_version.py
+++ b/tests/pytests/unit/test_version.py
@@ -187,7 +187,7 @@ def test_string_new_version_minor():
     ver = SaltStackVersion(major=maj_ver, minor=min_ver)
     assert ver.minor == min_ver
     assert not ver.bugfix
-    assert ver.string == "{}.{}".format(maj_ver, min_ver)
+    assert ver.string == f"{maj_ver}.{min_ver}"
 
 
 def test_string_new_version_minor_as_string():
@@ -201,13 +201,13 @@ def test_string_new_version_minor_as_string():
     ver = SaltStackVersion(major=maj_ver, minor=min_ver)
     assert ver.minor == int(min_ver)
     assert not ver.bugfix
-    assert ver.string == "{}.{}".format(maj_ver, min_ver)
+    assert ver.string == f"{maj_ver}.{min_ver}"
 
     # This only seems to happen on a cloned repo without its tags
     maj_ver = "3000"
     min_ver = ""
     ver = SaltStackVersion(major=maj_ver, minor=min_ver)
-    assert ver.minor is None, "{!r} is not {!r}".format(ver.minor, min_ver)
+    assert ver.minor is None, f"{ver.minor!r} is not {min_ver!r}"
     assert not ver.bugfix
     assert ver.string == maj_ver
 
@@ -222,7 +222,7 @@ def test_string_old_version():
     min_ver = "2"
     ver = SaltStackVersion(major=maj_ver, minor=min_ver)
     assert ver.bugfix == 0
-    assert ver.string == "{}.{}.0".format(maj_ver, min_ver)
+    assert ver.string == f"{maj_ver}.{min_ver}.0"
 
 
 @pytest.mark.parametrize(
@@ -537,6 +537,8 @@ def test_versions_report_no_extensions_available():
         ("3000.1", "3000.1", "Neon"),
         ("3005", "3005", "Phosphorus"),
         ("3006", "3006.0", "Sulfur"),
+        ("3006.0", "3006.0", "Sulfur"),
+        ("3006.1", "3006.1", "Sulfur"),
         ("3015.1", "3015.1", "Manganese"),
         ("3109.3", "3109.3", None),
     ],
-- 
2.41.0


openSUSE Build Service is sponsored by