from src.main.python.ddadevops.domain import ReleaseType
from src.main.python.ddadevops.infrastructure.release_mixin import ReleaseTypeRepository, VersionRepository, ReleaseRepository
from .mock_infrastructure_api import MockGitApi, MockEnvironmentApi
from .helper import Helper

def test_version_repository(tmp_path):
    # init
    th = Helper()
    th.copy_files(th.TEST_FILE_PATH, tmp_path)
    sut = VersionRepository(th.TEST_FILE_PATH)
    version = sut.get_version()

    #test
    assert version is not None


def test_release_repository(tmp_path):
    # init    
    th = Helper()
    th.copy_files( th.TEST_FILE_PATH, tmp_path)
    version_repo = VersionRepository(th.TEST_FILE_PATH)
    release_type_repo = ReleaseTypeRepository.from_git(MockGitApi('MINOR test'))

    # test
    sut = ReleaseRepository(version_repo, release_type_repo, 'main')
    release = sut.get_release()

    assert release is not None


def test_release_type_repository_git():
    sut = ReleaseTypeRepository.from_git(MockGitApi('MINOR test'))
    release_type = sut.get_release_type()
    assert release_type is ReleaseType.MINOR

    sut = ReleaseTypeRepository.from_git(MockGitApi('MINOR bla'))
    release_type = sut.get_release_type()
    assert release_type is ReleaseType.MINOR

    sut = ReleaseTypeRepository.from_git(MockGitApi('Major bla'))
    release_type = sut.get_release_type()
    assert release_type == ReleaseType.MAJOR

    sut = ReleaseTypeRepository.from_git(MockGitApi('PATCH bla'))
    release_type = sut.get_release_type()
    assert release_type == ReleaseType.PATCH

    sut = ReleaseTypeRepository.from_git(MockGitApi('SNAPSHOT bla'))
    release_type = sut.get_release_type()
    assert release_type == ReleaseType.SNAPSHOT

    sut = ReleaseTypeRepository.from_git(MockGitApi('bla'))
    release_type = sut.get_release_type()
    assert release_type == None

def test_release_type_repository_env():
    sut = ReleaseTypeRepository.from_environment(MockEnvironmentApi({'DDADEVOPS_RELEASE_TYPE': 'MINOR test'}))
    release_type = sut.get_release_type()
    assert release_type is ReleaseType.MINOR

    sut = ReleaseTypeRepository.from_environment(MockEnvironmentApi({'DDADEVOPS_RELEASE_TYPE': 'MINOR'}))
    release_type = sut.get_release_type()
    assert release_type is ReleaseType.MINOR

    sut = ReleaseTypeRepository.from_environment(MockEnvironmentApi({'DDADEVOPS_RELEASE_TYPE': 'Major bla'}))
    release_type = sut.get_release_type()
    assert release_type == ReleaseType.MAJOR

    sut = ReleaseTypeRepository.from_environment(MockEnvironmentApi({'DDADEVOPS_RELEASE_TYPE': 'Patch bla'}))
    release_type = sut.get_release_type()
    assert release_type == ReleaseType.PATCH

    sut = ReleaseTypeRepository.from_environment(MockEnvironmentApi({'DDADEVOPS_RELEASE_TYPE': 'Snapshot bla'}))
    release_type = sut.get_release_type()
    assert release_type == ReleaseType.SNAPSHOT

    sut = ReleaseTypeRepository.from_environment(MockEnvironmentApi({'DDADEVOPS_RELEASE_TYPE': 'Random text'}))
    release_type = sut.get_release_type()
    assert release_type == None

    sut = ReleaseTypeRepository.from_environment(MockEnvironmentApi({'REL_TYPE': 'Not the right variable'}))
    release_type = sut.get_release_type()
    assert release_type == None