diff --git a/domain.py b/domain.py index c5193a6..7fa79bd 100644 --- a/domain.py +++ b/domain.py @@ -1,5 +1,11 @@ from enum import Enum + +class Config(): + def __init__(self, main_branch): + pass + + class ReleaseType(Enum): MAJOR = 0 MINOR = 1 @@ -10,7 +16,8 @@ class ReleaseType(Enum): class Version(): - def __init__(self, version_list: list): + def __init__(self, id: Path, version_list: list): + self.id = id self.version_list = version_list self.version_string = None self.is_snapshot = None @@ -55,6 +62,22 @@ class Version(): class Release(): - def __init__(self, release_type: ReleaseType, version: Version): + def __init__(self, release_type: ReleaseType, version: Version, current_branch: str): self.release_type = release_type self.version = version + self.current_branch = current_branch + + def release_version(self): + return self.version.create_release_version(self.release_type) + + def bump_version(self): + return self.version.create_bump_version() + + def validate(self, main_branch): + result = [] + if self.release_type is not None and main_branch != self.current_branch: + result.append(f"Releases are allowed only on {main_branch}") + return result + + def is_valid(self, main_branch): + return self.validate(main_branch).count < 1 diff --git a/infrastructure.py b/infrastructure.py index d1d844a..4bf963a 100644 --- a/infrastructure.py +++ b/infrastructure.py @@ -54,5 +54,5 @@ class ReleaseRepository(): self.version_repository = version_repository self.release_type_repository = release_type_repository - def get_current_release(self) -> Release: + def get_release(self) -> Release: return Release(self.release_type_repository.get_release_type(), self.version_repository.get_version()) diff --git a/services.py b/services.py index 6b46c12..e3e87cc 100644 --- a/services.py +++ b/services.py @@ -1,43 +1,22 @@ from pathlib import Path -from infrastructure import VersionRepository, GitRepository +from infrastructure import ReleaseRepository from domain import Version, ReleaseType -class InitReleaseService(): - def __init__(self, version_repo: VersionRepository): - if version_repo is None: - raise Exception('VersionRepo was not created. Did you run create_release_version()?') - self.version_repo = version_repo +# Todo: can be removed +class InitReleaseService(): - def __calculate_release_type(self, commit_string = None): - if commit_string is None: - return GitRepository().get_release_type_from_latest_commit() - else: - return GitRepository.create_from_commit_string(commit_string).get_release_type_from_latest_commit() - + def __init__(self, release_repo: ReleaseRepository): + self.release_repo = release_repo + def get_version(self): - return self.version_repo.get_version() - - def create_release_version(self, commit_string = None): - release_type = self.__calculate_release_type(commit_string) - version = self.get_version().create_release_version(release_type) - return version - - def create_bump_version(self): - version = self.get_version().create_bump_version() - return version + return self.release_repo.get_release().version class PrepareReleaseService(): - def __init__(self, version_repository: VersionRepository, git_repository: GitRepository, config_file: Path, main_branch: str): - self.version_repository = version_repository - self.git_repository = git_repository - self.main_branch = main_branch - self.config_file = config_file - - def run_tests(self): # maybe auto? - raise NotImplementedError + def __init__(self, release_repo: ReleaseRepository): + self.release_repo = release_repo def __write_and_commit_version(self, version: Version, commit_message: str): if self.main_branch != self.git_repository.get_current_branch(): diff --git a/test/test_infrastructure.py b/test/test_infrastructure.py index a767ef5..1e0ff48 100644 --- a/test/test_infrastructure.py +++ b/test/test_infrastructure.py @@ -29,49 +29,6 @@ class TestGitApi(GitApi): return self.commit_string -def test_git_repository(): - - # init - commit_string = "Major bla" - repo = GitRepository.create_from_commit_string(commit_string) - release_type = repo.get_release_type_from_latest_commit() - - # test - assert release_type == ReleaseType.MAJOR - - # init - commit_string = "MINOR bla" - repo = GitRepository.create_from_commit_string(commit_string) - release_type = repo.get_release_type_from_latest_commit() - - # test - assert release_type == ReleaseType.MINOR - - # init - commit_string = "PATCH bla" - repo = GitRepository.create_from_commit_string(commit_string) - release_type = repo.get_release_type_from_latest_commit() - - # test - assert release_type == ReleaseType.PATCH - - # init - commit_string = "SNAPSHOT bla" - repo = GitRepository.create_from_commit_string(commit_string) - release_type = repo.get_release_type_from_latest_commit() - - # test - assert release_type == ReleaseType.SNAPSHOT - - # init - commit_string = "bla" - repo = GitRepository.create_from_commit_string(commit_string) - release_type = repo.get_release_type_from_latest_commit() - - # test - assert release_type == None - - def test_gradle(tmp_path): # init file_name = 'config.gradle' @@ -159,12 +116,32 @@ def test_release_repository(tmp_path): # test sut = ReleaseRepository(VersionRepository(f), ReleaseTypeRepository(TestGitApi('MINOR test'))) - release = sut.get_current_release() + release = sut.get_release() + + assert release is not None - assert release.version is not None def test_release_type_repository(): sut = ReleaseTypeRepository(TestGitApi('MINOR test')) release_type = sut.get_release_type() + assert release_type is ReleaseType.MINOR + sut = ReleaseTypeRepository(TestGitApi('MINOR bla')) + release_type = sut.get_release_type() assert release_type is ReleaseType.MINOR + + sut = ReleaseTypeRepository(TestGitApi('Major bla')) + release_type = sut.get_release_type() + assert release_type == ReleaseType.MAJOR + + sut = ReleaseTypeRepository(TestGitApi('PATCH bla')) + release_type = sut.get_release_type() + assert release_type == ReleaseType.PATCH + + sut = ReleaseTypeRepository(TestGitApi('SNAPSHOT bla')) + release_type = sut.get_release_type() + assert release_type == ReleaseType.SNAPSHOT + + sut = ReleaseTypeRepository(TestGitApi('bla')) + release_type = sut.get_release_type() + assert release_type == None diff --git a/test/test_infrastructure_api.py b/test/test_infrastructure_api.py new file mode 100644 index 0000000..6d681da --- /dev/null +++ b/test/test_infrastructure_api.py @@ -0,0 +1,21 @@ +from pathlib import Path +import sys +import os + +# getting the name of the directory +# where the this file is present. +current = os.path.dirname(os.path.realpath(__file__)) + +# Getting the parent directory name +# where the current directory is present. +parent = os.path.dirname(current) + +# adding the parent directory to +# the sys.path. +sys.path.append(parent) + +# now we can import the module in the parent +# directory. + +from infrastructure_api import GitApi +