Implement unittests
This commit is contained in:
0
semver/scm/tests/__init__.py
Normal file
0
semver/scm/tests/__init__.py
Normal file
100
semver/scm/tests/test_git.py
Normal file
100
semver/scm/tests/test_git.py
Normal file
@ -0,0 +1,100 @@
|
||||
import unittest
|
||||
from unittest import mock
|
||||
import subprocess
|
||||
|
||||
from semver.version_type import VersionType
|
||||
from semver.exceptions import SemverException
|
||||
from semver.scm import SCM
|
||||
from semver.scm.git import Git
|
||||
|
||||
|
||||
class TestMockSCM(unittest.TestCase):
|
||||
@mock.patch("subprocess.run")
|
||||
def setUp(self, mock_subprocess_run: mock.Mock):
|
||||
# Mock the subprocess.run function to avoid
|
||||
# running actual git commands
|
||||
mock_subprocess_run.return_value.returncode = 0
|
||||
mock_subprocess_run.return_value.stdout = ""
|
||||
|
||||
self.scm = Git()
|
||||
|
||||
def test_run_command(self):
|
||||
proc: subprocess.CompletedProcess[str] = self.scm._run_command("echo", "hello")
|
||||
self.assertEqual(proc.stdout, "hello\n")
|
||||
|
||||
@mock.patch("toml.load")
|
||||
@mock.patch("subprocess.run")
|
||||
def test_get_tag_version(
|
||||
self, mock_subprocess_run: mock.Mock, mock_toml_load: mock.Mock
|
||||
):
|
||||
mock_toml_load.return_value = {"bumpversion": {"tag_name": "v{new_version}"}}
|
||||
mock_subprocess_run.return_value.stdout = "v1.0.0\n"
|
||||
|
||||
expected_version = "v1.0.0"
|
||||
version = self.scm.get_tag_version()
|
||||
self.assertEqual(version, expected_version)
|
||||
|
||||
@mock.patch("toml.load")
|
||||
@mock.patch("subprocess.run")
|
||||
def test_get_tag_version_git_fail(
|
||||
self, mock_subprocess_run: mock.Mock, mock_toml_load: mock.Mock
|
||||
):
|
||||
mock_toml_load.return_value = {"bumpversion": {"tag_name": "v{new_version}"}}
|
||||
mock_subprocess_run.return_value.returncode = 1
|
||||
mock_subprocess_run.side_effect = subprocess.CalledProcessError(
|
||||
1, "git", "git error"
|
||||
)
|
||||
|
||||
with self.assertRaises(SemverException):
|
||||
self.scm.get_tag_version()
|
||||
|
||||
@mock.patch("subprocess.run")
|
||||
def test_get_branch(self, mock_subprocess_run: mock.Mock):
|
||||
mock_subprocess_run.return_value.stdout = "main\n"
|
||||
|
||||
expected_branch = "main"
|
||||
branch = self.scm.get_branch()
|
||||
self.assertEqual(branch, expected_branch)
|
||||
|
||||
@mock.patch("subprocess.run")
|
||||
def test_get_merge_branch(self, mock_subprocess_run: mock.Mock):
|
||||
mock_subprocess_run.return_value.stdout = (
|
||||
"Merge pull request #1 from RightBrain-Networks/feature/example\n"
|
||||
)
|
||||
|
||||
expected_merge_branch = "feature/example"
|
||||
merge_branch = self.scm.get_merge_branch()
|
||||
self.assertEqual(merge_branch, expected_merge_branch)
|
||||
|
||||
@mock.patch("subprocess.run")
|
||||
def test_commit_and_push(self, mock_subprocess_run: mock.Mock):
|
||||
mock_subprocess_run.return_value.returncode = 0
|
||||
|
||||
branch = "main"
|
||||
self.scm.commit_and_push(branch)
|
||||
|
||||
@mock.patch("subprocess.run")
|
||||
def test_commit_and_push_git_fail(self, mock_subprocess_run: mock.Mock):
|
||||
mock_subprocess_run.return_value.returncode = 1
|
||||
|
||||
branch = "main"
|
||||
with self.assertRaises(SemverException):
|
||||
self.scm.commit_and_push(branch)
|
||||
|
||||
@mock.patch("subprocess.run")
|
||||
def test_commit_and_push_git_fail_tags(self, mock_subprocess_run: mock.Mock):
|
||||
mock_subprocess_run.side_effect = [
|
||||
mock.Mock(returncode=0),
|
||||
mock.Mock(returncode=1),
|
||||
]
|
||||
|
||||
branch = "main"
|
||||
with self.assertRaises(SemverException):
|
||||
self.scm.commit_and_push(branch)
|
||||
|
||||
@mock.patch("subprocess.run")
|
||||
def test_tag_version(self, mock_subprocess_run: mock.Mock):
|
||||
mock_subprocess_run.return_value.returncode = 0
|
||||
|
||||
version = "1.0.0"
|
||||
self.scm.tag_version(version)
|
34
semver/scm/tests/test_mock.py
Normal file
34
semver/scm/tests/test_mock.py
Normal file
@ -0,0 +1,34 @@
|
||||
import unittest
|
||||
|
||||
|
||||
from semver.version_type import VersionType
|
||||
from semver.scm import SCM
|
||||
from semver.scm.mock import MockSCM
|
||||
|
||||
|
||||
class TestMockSCM(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.scm: SCM = MockSCM()
|
||||
|
||||
def test_get_tag_version(self):
|
||||
expected_version = "1.0.0"
|
||||
version = self.scm.get_tag_version()
|
||||
self.assertEqual(version, expected_version)
|
||||
|
||||
def test_get_branch(self):
|
||||
expected_branch = "main"
|
||||
branch = self.scm.get_branch()
|
||||
self.assertEqual(branch, expected_branch)
|
||||
|
||||
def test_get_merge_branch(self):
|
||||
expected_merge_branch = "main"
|
||||
merge_branch = self.scm.get_merge_branch()
|
||||
self.assertEqual(merge_branch, expected_merge_branch)
|
||||
|
||||
def test_commit_and_push(self):
|
||||
branch = "main"
|
||||
self.scm.commit_and_push(branch)
|
||||
|
||||
def test_tag_version(self):
|
||||
version = "1.0.0"
|
||||
self.scm.tag_version(version)
|
72
semver/scm/tests/test_scm.py
Normal file
72
semver/scm/tests/test_scm.py
Normal file
@ -0,0 +1,72 @@
|
||||
import unittest
|
||||
|
||||
from semver.version_type import VersionType
|
||||
from semver.scm import SCM
|
||||
from semver.scm.mock import MockSCM
|
||||
|
||||
|
||||
class TestSCM(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.scm: SCM = MockSCM()
|
||||
|
||||
def test_get_file_version_existing_config(self):
|
||||
config = {"bumpversion": {"current_version": "1.2.3"}}
|
||||
expected_version = "1.2.3"
|
||||
version = self.scm.get_file_version(config)
|
||||
self.assertEqual(version, expected_version)
|
||||
|
||||
def test_get_file_version_no_config(self):
|
||||
config = {}
|
||||
expected_version = "0.0.0"
|
||||
version = self.scm.get_file_version(config)
|
||||
self.assertEqual(version, expected_version)
|
||||
|
||||
def test_get_file_version_no_version(self):
|
||||
config = {"bumpversion": {}}
|
||||
expected_version = "0.0.0"
|
||||
version = self.scm.get_file_version(config)
|
||||
self.assertEqual(version, expected_version)
|
||||
|
||||
def test_get_version_type_major(self):
|
||||
merged_branch = "main"
|
||||
major_branches = ["main"]
|
||||
minor_branches = ["develop"]
|
||||
patch_branches = ["hotfix"]
|
||||
expected_version_type = VersionType.MAJOR
|
||||
version_type = self.scm.get_version_type(
|
||||
merged_branch, major_branches, minor_branches, patch_branches
|
||||
)
|
||||
self.assertEqual(version_type, expected_version_type)
|
||||
|
||||
def test_get_version_type_minor(self):
|
||||
merged_branch = "develop"
|
||||
major_branches = ["main"]
|
||||
minor_branches = ["develop"]
|
||||
patch_branches = ["hotfix"]
|
||||
expected_version_type = VersionType.MINOR
|
||||
version_type = self.scm.get_version_type(
|
||||
merged_branch, major_branches, minor_branches, patch_branches
|
||||
)
|
||||
self.assertEqual(version_type, expected_version_type)
|
||||
|
||||
def test_get_version_type_patch(self):
|
||||
merged_branch = "hotfix"
|
||||
major_branches = ["main"]
|
||||
minor_branches = ["develop"]
|
||||
patch_branches = ["hotfix"]
|
||||
expected_version_type = VersionType.PATCH
|
||||
version_type = self.scm.get_version_type(
|
||||
merged_branch, major_branches, minor_branches, patch_branches
|
||||
)
|
||||
self.assertEqual(version_type, expected_version_type)
|
||||
|
||||
def test_get_version_type_none(self):
|
||||
merged_branch = "feature"
|
||||
major_branches = ["main"]
|
||||
minor_branches = ["develop"]
|
||||
patch_branches = ["hotfix"]
|
||||
expected_version_type = None
|
||||
version_type = self.scm.get_version_type(
|
||||
merged_branch, major_branches, minor_branches, patch_branches
|
||||
)
|
||||
self.assertEqual(version_type, expected_version_type)
|
Reference in New Issue
Block a user