def _generate_initial_version(self) -> None: initial_version = Version().create_from_version_parts( *self.__setup_parser.get_current_version_parts()) self.history.add_version(version=initial_version) self.history.save_history() self.git_history.add_initial_commit( version=initial_version.get_version())
def test_update_FeatureRemoved_MinorDecreased(self): removed_commits = self.create_commits( ids=[b"22222222222222222222"], messages=["feat: commit message"]) self.assert_version_update( current_version=Version().create_from_str_version("0.1.0"), added_commits=[], removed_commits=removed_commits, expected_version=Version().create_from_str_version("0.0.0"), )
def test_update_FixAndRefactorAdded_PatchIncreasedByTwo(self): added_commits = self.create_commits( ids=[b"33333333333333333333", b"44444444444444444444"], messages=["fix: Temporal fix", "refactor: Code Refactor"], ) self.assert_version_update( current_version=Version().create_from_str_version("0.1.0"), added_commits=added_commits, removed_commits=[], expected_version=Version().create_from_str_version("0.1.2"), )
def test_update_ChangesInHistory_VersionUpdated(self): added_commits = self.create_commits(ids=[b"33333333333333333333"], messages=["fix: Temporal fix"]) removed_commits = self.create_commits( ids=[b"22222222222222222222"], messages=["feat: commit message"]) self.assert_version_update( current_version=Version().create_from_str_version("0.1.0"), added_commits=added_commits, removed_commits=removed_commits, expected_version=Version().create_from_str_version("0.0.1"), )
def test_update_FeatureAdded_MinorIncreased(self): added_commits = self.create_commits( ids=[b"11111111111111111111", b"22222222222222222222"], messages=["Initial commit", "feat: commit message"], ) self.assert_version_update( current_version=Version().create_from_str_version("0.0.0"), added_commits=added_commits, removed_commits=[], expected_version=Version().create_from_str_version("0.1.0"), )
def test_update_AmendWithSameMessage_NoChangesInVersion(self): added_commits = self.create_commits( ids=[b"33333333333333333333"], messages=["feat: commit message updated"]) removed_commits = self.create_commits( ids=[b"22222222222222222222"], messages=["feat: commit message"]) self.assert_version_update( current_version=Version().create_from_str_version("0.1.0"), added_commits=added_commits, removed_commits=removed_commits, expected_version=Version().create_from_str_version("0.1.0"), )
def _get_previous_version(self) -> None: previous_version = self.history.get_last_version() if previous_version is not None: return copy.deepcopy(previous_version) return Version().create_from_version_parts( *self.__setup_parser.get_current_version_parts())
def assert_version_update( current_version: Version, added_commits: List[Commit], removed_commits: List[Commit], expected_version: Version, ): git_history = GitHistory() history = History() version_parser = MagicMock() semantic_versioning = SemanticVersioning(git_history=git_history, history=history) semantic_versioning.version = current_version # act semantic_versioning.update_version(added_commits=added_commits, removed_commits=removed_commits) # assert assert version_parser.persist_current_version.called_once_with( version=expected_version.get_version())
def parse_version_from_commit(cls, commit: Commit) -> Version: version_match = re.search(r"(.*)([0-9]\.[0-9]\.[0-9])(.*)", commit.message) if version_match is not None and version_match.lastindex == 3: return Version().create_from_str_version(version_match[2])
def assert_version_update( cls, current_version: str, git_commits: List[str], git_commits_messages: List[str], pyhist_commits: List[str], pyhist_commits_messages: List[str], expected_version: str, ): git_history = GitHistory() git_history.git_commits = cls.build_commits( commits=git_commits, messages=git_commits_messages) history = History() history.pyhist_items = [ PyHistItem(commit=commit, version=None, is_version=False) for commit in cls.build_commits(commits=pyhist_commits, messages=pyhist_commits_messages) ] if current_version is not None: history.pyhist_items.insert( 0, PyHistItem( commit=None, version=Version().create_from_str_version(current_version), is_version=False, ), ) setup_parser = SetupParser() current_version_parts = ([0, 0, 0] if current_version is None else [ int(part) for part in current_version.split(".") ]) changelog_generator = ChangelogGenerator(history=history) semantic_versioning = SemanticVersioning(git_history=git_history, history=history) pyhist = PyHist( git_history=git_history, history=history, semantic_versioning=semantic_versioning, changelog_generator=changelog_generator, setup_parser=setup_parser, ) # act with patch.object( setup_parser, "persist_version") as patch_persist_version, patch.object( setup_parser, "get_current_version_parts", return_value=current_version_parts, ) as patch_get_current_version_parts, patch.object( git_history, "add_versioning_commit" ) as patch_add_versioning_commit, patch.object( history, "load_history", side_effect=lambda: None ) as patch_load_history, patch.object( history, "save_history", side_effect=lambda: None ) as patch_save_history, patch.object( changelog_generator, "generate_changelog", side_effect=lambda: None) as patch_generate_changelog: pyhist.update() # assert assert patch_add_versioning_commit.called_once_with( version=expected_version, is_release=False) assert patch_save_history.called assert patch_load_history.called assert patch_generate_changelog.called assert patch_get_current_version_parts.called assert patch_persist_version.called_once_with(version=expected_version)