import logging import pytest from bump_changelog import ( VersionType, get_next_version, get_next_versions, transform_content, ) @pytest.mark.parametrize( "version,version_type,expected_version,expected_versions", [ ["2.6.1", VersionType.PATCH, "2.6.2", ["2.6.2"]], ["2.10.0", VersionType.MINOR, "2.11.0", ["2.11.0", "2.10.1"]], ["10.1.10", VersionType.PATCH, "10.1.11", ["10.1.11"]], [ "2.6.0", VersionType.MINOR, "2.7.0", [ "2.7.0", "2.6.1", ], ], ["2.6.1", VersionType.MAJOR, "3.0.0", ["3.1.0", "3.0.1"]], ["2.6.1-dev0", VersionType.PATCH, "2.6.2", ["2.6.2"]], [ "2.6.1-dev0", VersionType.MINOR, "2.7.0", [ "2.7.1", "2.7.0", ], ], ["2.6.1-dev0", VersionType.MAJOR, "3.0.0", ["3.1.0", "3.0.1"]], ["2.7.0", VersionType.PATCH, "2.7.1", ["2.7.1"]], ["2.7.0", VersionType.MINOR, "2.8.0", ["2.8.0", "2.7.1"]], ["2.7.0", VersionType.MAJOR, "3.0.0", ["3.1.0", "3.0.1"]], ["2.0.0", VersionType.PATCH, "2.0.1", ["2.0.1"]], ["2.0.0", VersionType.MINOR, "2.1.0", ["2.1.0", "2.0.1"]], ["2.0.0", VersionType.MAJOR, "3.0.0", ["3.1.0", "3.0.1"]], ], ) def test_get_next_version(version, version_type, expected_version, expected_versions): assert get_next_version(version, version_type) == expected_version if ( version_type == VersionType.PATCH or version_type == VersionType.MINOR and version.endswith(".0") ): assert get_next_versions(version, version_type) == expected_versions @pytest.mark.parametrize( "old_content,version,expected_error", [ [ """ What's New in astroid 2.7.0? ============================ Release date: TBA What's New in astroid 2.6.1? ============================ Release date: TBA What's New in astroid 2.6.0? ============================ Release date: TBA """, "2.6.1", r"There should be only two release dates 'TBA' \(2.6.1 and 2.7.0\)", ], [ """=================== astroid's ChangeLog =================== What's New in astroid 2.6.0? ============================ Release date: TBA """, "2.6.1", "text for this version '2.6.1' did not exists", ], [ """ What's New in astroid 2.6.2? ============================ Release date: TBA What's New in astroid 2.6.1? ============================ Release date: TBA """, "2.6.1", "The text for the next version '2.6.2' already exists", ], [ """ What's New in astroid 3.0.0? ============================ Release date: TBA What's New in astroid 2.6.10? ============================ Release date: TBA """, "3.0.0", r"There should be only one release date 'TBA' \(3.0.0\)", ], [ """ What's New in astroid 2.7.0? ============================ Release date: TBA What's New in astroid 2.6.10? ============================ Release date: TBA """, "2.7.0", r"There should be only one release date 'TBA' \(2.7.0\)", ], ], ) def test_update_content_error(old_content, version, expected_error, caplog): caplog.set_level(logging.DEBUG) with pytest.raises(AssertionError, match=expected_error): transform_content(old_content, version) def test_update_content(caplog): caplog.set_level(logging.DEBUG) old_content = """ =================== astroid's ChangeLog =================== What's New in astroid 2.6.1? ============================ Release date: TBA """ expected_beginning = """ =================== astroid's ChangeLog =================== What's New in astroid 2.6.2? ============================ Release date: TBA What's New in astroid 2.6.1? ============================ Release date: 20""" new_content = transform_content(old_content, "2.6.1") assert new_content[: len(expected_beginning)] == expected_beginning def test_update_content_minor(): old_content = """ =================== astroid's ChangeLog =================== What's New in astroid 2.7.0? ============================ Release date: TBA """ expected_beginning = """ =================== astroid's ChangeLog =================== What's New in astroid 2.8.0? ============================ Release date: TBA What's New in astroid 2.7.1? ============================ Release date: TBA What's New in astroid 2.7.0? ============================ Release date: 20""" new_content = transform_content(old_content, "2.7.0") assert new_content[: len(expected_beginning)] == expected_beginning def test_update_content_major(caplog): caplog.set_level(logging.DEBUG) old_content = """ =================== astroid's ChangeLog =================== What's New in astroid 3.0.0? ============================ Release date: TBA What's New in astroid 2.7.1? ============================ Release date: 2020-04-03 What's New in astroid 2.7.0? ============================ Release date: 2020-04-01 """ expected_beginning = """ =================== astroid's ChangeLog =================== What's New in astroid 3.1.0? ============================ Release date: TBA What's New in astroid 3.0.1? ============================ Release date: TBA What's New in astroid 3.0.0? ============================ Release date: 20""" new_content = transform_content(old_content, "3.0.0") assert new_content[: len(expected_beginning)] == expected_beginning