From 15796ae5f290d0c2b379373baa9d8dd2c521ec06 Mon Sep 17 00:00:00 2001 From: codejedi365 Date: Sun, 17 Mar 2024 20:56:54 -0400 Subject: [PATCH] test(algorithm): adjust unit tests of increment_version logic This clarifies repeated function calls and pytest parameter names included the unclear assert diff. Adds additional tests to check bad states for failures and refactored to match new function signature. --- .../version/test_algorithm.py | 114 +++++++++++------- 1 file changed, 73 insertions(+), 41 deletions(-) diff --git a/tests/unit/semantic_release/version/test_algorithm.py b/tests/unit/semantic_release/version/test_algorithm.py index 9db7dd12f..1cd619669 100644 --- a/tests/unit/semantic_release/version/test_algorithm.py +++ b/tests/unit/semantic_release/version/test_algorithm.py @@ -119,7 +119,7 @@ def test_sorted_repo_tags_and_versions(tags, sorted_tags): translator = VersionTranslator() tagrefs = [repo.tag(tag) for tag in tags] actual = [t.name for t, _ in tags_and_versions(tagrefs, translator)] - assert actual == sorted_tags + assert sorted_tags == actual @pytest.mark.parametrize( @@ -184,35 +184,26 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( translator = VersionTranslator(tag_format=tag_format) tagrefs = [repo.tag(tag) for tag in (*valid_tags, *invalid_tags)] actual = [t.name for t, _ in tags_and_versions(tagrefs, translator)] - assert set(actual) == set(valid_tags) + assert set(valid_tags) == set(actual) @pytest.mark.parametrize( - "latest_version, latest_full_version, latest_full_version_in_history, level_bump, " + "latest_version, latest_full_version_in_history, level_bump, " "prerelease, prerelease_token, expected_version", [ # NOTE: level_bump != LevelBump.NO_RELEASE, we return early in the # algorithm to discount this case + # NOTE: you can only perform a PRERELEASE_REVISION bump on a previously + # prerelease version and if you are requesting a prerelease ( - "1.0.0", - "1.0.0", - "1.0.0", - LevelBump.PRERELEASE_REVISION, - False, - "rc", - "1.0.0-rc.1", - ), - ( - "1.0.0", - "1.0.0", + "1.0.1-rc.1", "1.0.0", LevelBump.PRERELEASE_REVISION, True, "rc", - "1.0.0-rc.1", + "1.0.1-rc.2", ), ( - "1.0.0", "1.0.0", "1.0.0", LevelBump.PATCH, @@ -221,7 +212,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( "1.0.1", ), ( - "1.0.0", "1.0.0", "1.0.0", LevelBump.PATCH, @@ -230,7 +220,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( "1.0.1-rc.1", ), ( - "1.0.0", "1.0.0", "1.0.0", LevelBump.MINOR, @@ -239,7 +228,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( "1.1.0", ), ( - "1.0.0", "1.0.0", "1.0.0", LevelBump.MINOR, @@ -248,7 +236,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( "1.1.0-rc.1", ), ( - "1.0.0", "1.0.0", "1.0.0", LevelBump.MAJOR, @@ -257,7 +244,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( "2.0.0", ), ( - "1.0.0", "1.0.0", "1.0.0", LevelBump.MAJOR, @@ -267,16 +253,14 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "1.2.4-rc.1", - "1.2.0", "1.2.3", - LevelBump.PATCH, - False, + LevelBump.PRERELEASE_REVISION, + True, "rc", - "1.2.4", + "1.2.4-rc.2", ), ( "1.2.4-rc.1", - "1.2.0", "1.2.3", LevelBump.PATCH, True, @@ -285,7 +269,14 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "1.2.4-rc.1", - "1.2.0", + "1.2.3", + LevelBump.PATCH, + False, + "rc", + "1.2.4", + ), + ( + "1.2.4-rc.1", "1.2.3", LevelBump.MINOR, False, @@ -294,7 +285,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "1.2.4-rc.1", - "1.2.0", "1.2.3", LevelBump.MINOR, True, @@ -303,7 +293,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "1.2.4-rc.1", - "1.2.0", "1.2.3", LevelBump.MAJOR, False, @@ -312,7 +301,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "1.2.4-rc.1", - "1.2.0", "1.2.3", LevelBump.MAJOR, True, @@ -321,16 +309,14 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "2.0.0-rc.1", - "1.22.0", "1.19.3", - LevelBump.PATCH, - False, + LevelBump.PRERELEASE_REVISION, + True, "rc", - "2.0.0", + "2.0.0-rc.2", ), ( "2.0.0-rc.1", - "1.22.0", "1.19.3", LevelBump.PATCH, True, @@ -339,7 +325,14 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "2.0.0-rc.1", - "1.22.0", + "1.19.3", + LevelBump.PATCH, + False, + "rc", + "2.0.0", + ), + ( + "2.0.0-rc.1", "1.19.3", LevelBump.MINOR, False, @@ -348,7 +341,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "2.0.0-rc.1", - "1.22.0", "1.19.3", LevelBump.MINOR, True, @@ -357,7 +349,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "2.0.0-rc.1", - "1.22.0", "1.19.3", LevelBump.MAJOR, False, @@ -366,7 +357,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ), ( "2.0.0-rc.1", - "1.22.0", "1.19.3", LevelBump.MAJOR, True, @@ -377,7 +367,6 @@ def test_tags_and_versions_ignores_invalid_tags_as_versions( ) def test_increment_version_no_major_on_zero( latest_version: str, - latest_full_version: str, latest_full_version_in_history: str, level_bump: LevelBump, prerelease: bool, @@ -386,7 +375,6 @@ def test_increment_version_no_major_on_zero( ): actual = _increment_version( latest_version=Version.parse(latest_version), - latest_full_version=Version.parse(latest_full_version), latest_full_version_in_history=Version.parse(latest_full_version_in_history), level_bump=level_bump, prerelease=prerelease, @@ -395,3 +383,47 @@ def test_increment_version_no_major_on_zero( allow_zero_version=True, ) assert expected_version == str(actual) + + +@pytest.mark.parametrize( + "latest_version, latest_full_version_in_history, level_bump, prerelease, prerelease_token", + [ + # NOTE: level_bump != LevelBump.NO_RELEASE, we return early in the + # algorithm to discount this case + # NOTE: you can only perform a PRERELEASE_REVISION bump on a previously + # prerelease version and if you are requesting a prerelease + ( + "1.0.0", + "1.0.0", + LevelBump.PRERELEASE_REVISION, + False, + "rc", + ), + ( + "1.0.0", + "1.0.0", + LevelBump.PRERELEASE_REVISION, + True, + "rc", + ), + ], +) +def test_increment_version_invalid_operation( + latest_version: str, + latest_full_version_in_history: str, + level_bump: LevelBump, + prerelease: bool, + prerelease_token: str, +): + with pytest.raises(ValueError): + _increment_version( + latest_version=Version.parse(latest_version), + latest_full_version_in_history=Version.parse( + latest_full_version_in_history + ), + level_bump=level_bump, + prerelease=prerelease, + prerelease_token=prerelease_token, + major_on_zero=False, + allow_zero_version=True, + )