From 82bc4c807fea025051c83cc2dbdfef7fd1cb5cda Mon Sep 17 00:00:00 2001 From: bennetrr Date: Fri, 19 Apr 2024 15:57:56 +0200 Subject: [PATCH] test: Use pylint and assertpy --- pyproject.toml | 4 + tests/e2e/test_one_commit.py | 777 ++-- tests/e2e/test_one_hotfix.py | 965 ++-- tests/e2e/test_one_hotfix_then_version.py | 1409 +++--- tests/e2e/test_two_commits.py | 2469 ++++++----- tests/e2e/test_two_hotfixes.py | 1433 +++--- tests/e2e/test_two_versions.py | 4904 ++++++++++----------- tests/e2e/test_utils/__init__.py | 10 +- tests/e2e/test_utils/fixtures.py | 26 + tests/e2e/test_utils/logger.py | 1 + tests/e2e/test_utils/test_repo.py | 31 +- 11 files changed, 5990 insertions(+), 6039 deletions(-) create mode 100644 tests/e2e/test_utils/fixtures.py diff --git a/pyproject.toml b/pyproject.toml index eda3ebe..77241ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,10 @@ per-file-ignores = [ mypy_path = ".mypy_stubs" strict = true +[[tool.mypy.overrides]] +module = "assertpy.*" +ignore_missing_imports = true + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/tests/e2e/test_one_commit.py b/tests/e2e/test_one_commit.py index 6496ce6..8018396 100644 --- a/tests/e2e/test_one_commit.py +++ b/tests/e2e/test_one_commit.py @@ -1,398 +1,383 @@ """Test all scenarios where one or zero commits (beside the initial commit) are made.""" # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements -import unittest -from unittest import TestCase - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action, setup_logging - - -class OneCommitTestCase(TestCase): - """Test all scenarios where one or zero commits (beside the initial commit) are made.""" - repo: TestRepo - - @classmethod - def setUpClass(cls) -> None: - setup_logging() - - def setUp(self) -> None: - self.repo = TestRepo() - - def tearDown(self) -> None: - self.repo.close() - - def test_initial(self) -> None: - """Test Case: Run the action directly after the initial commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Act - self.repo.checkout('release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.checkout('release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.checkout('release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(None, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(None, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(None, tag_prod) - - def test_chore(self) -> None: - """Test Case: Run the action after a ``chore:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Act - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(None, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(None, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(None, tag_prod) - - def test_fix(self) -> None: - """Test Case: Run the action after a ``fix:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_feat(self) -> None: - """Test Case: Run the action after a ``feat:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_breaking(self) -> None: - """Test Case: Run the action after a ``feat!:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - -if __name__ == '__main__': - unittest.main() +from assertpy import assert_that + +from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action + + +def test_initial(repo: TestRepo) -> None: + """Test Case: Run the action directly after the initial commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Act + repo.checkout('release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.checkout('release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.checkout('release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_none() + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_none() + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_none() + + +def test_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Act + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_none() + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_none() + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_none() + + +def test_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) diff --git a/tests/e2e/test_one_hotfix.py b/tests/e2e/test_one_hotfix.py index 4843c07..97edf7b 100644 --- a/tests/e2e/test_one_hotfix.py +++ b/tests/e2e/test_one_hotfix.py @@ -1,493 +1,476 @@ """Test all scenarios where one hotfix / cherrypick is made.""" # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements -import unittest -from unittest import TestCase - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action, setup_logging - - -class OneHotfixTestCase(TestCase): - """Test all scenarios where one hotfix / cherrypick is made.""" - repo: TestRepo - - @classmethod - def setUpClass(cls) -> None: - setup_logging() - - def setUp(self) -> None: - self.repo = TestRepo() - - def tearDown(self) -> None: - self.repo.close() - - def test_fix_then_hotfix(self) -> None: - """Test Case: Run the action after a ``fix:`` commit and after a hotfix.""" - # Arrange - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix - args_hotfix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_release = ActionOutputs( - version='0.0.1-pre-hotfix.1', - version_name='v0.0.1-pre-hotfix.1', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_hotfix_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_beta = ActionOutputs( - version='0.0.1-beta-hotfix.1', - version_name='v0.0.1-beta-hotfix.1', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_hotfix_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_prod = ActionOutputs( - version='0.0.1-hotfix.1', - version_name='v0.0.1-hotfix.1', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Act - # Fix - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Hotfix - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix_release = run_action(args_hotfix_release) - tag_hotfix_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix_beta = run_action(args_hotfix_beta) - tag_hotfix_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix_prod = run_action(args_hotfix_prod) - tag_hotfix_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - # Hotfix - self.assertEqual(expected_output_hotfix_release, actual_output_hotfix_release) - self.assertEqual(expected_output_hotfix_release.version_name, tag_hotfix_release) - - self.assertEqual(expected_output_hotfix_beta, actual_output_hotfix_beta) - self.assertEqual(expected_output_hotfix_beta.version_name, tag_hotfix_beta) - - self.assertEqual(expected_output_hotfix_prod, actual_output_hotfix_prod) - self.assertEqual(expected_output_hotfix_prod.version_name, tag_hotfix_prod) - - def test_feature_then_hotfix(self) -> None: - """Test Case: Run the action after a ``feat:`` commit and after a hotfix.""" - # Arrange - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix - args_hotfix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_release = ActionOutputs( - version='0.1.0-pre-hotfix.1', - version_name='v0.1.0-pre-hotfix.1', - previous_version='0.1.0-pre', - previous_version_name='v0.1.0-pre', - tag_created=True - ) - - args_hotfix_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_beta = ActionOutputs( - version='0.1.0-beta-hotfix.1', - version_name='v0.1.0-beta-hotfix.1', - previous_version='0.1.0-beta', - previous_version_name='v0.1.0-beta', - tag_created=True - ) - - args_hotfix_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_prod = ActionOutputs( - version='0.1.0-hotfix.1', - version_name='v0.1.0-hotfix.1', - previous_version='0.1.0', - previous_version_name='v0.1.0', - tag_created=True - ) - - # Act - # Feature - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Hotfix - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix_release = run_action(args_hotfix_release) - tag_hotfix_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix_beta = run_action(args_hotfix_beta) - tag_hotfix_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix_prod = run_action(args_hotfix_prod) - tag_hotfix_prod = self.repo.get_latest_tag_name() - - # Assert - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - # Hotfix - self.assertEqual(expected_output_hotfix_release, actual_output_hotfix_release) - self.assertEqual(expected_output_hotfix_release.version_name, tag_hotfix_release) - - self.assertEqual(expected_output_hotfix_beta, actual_output_hotfix_beta) - self.assertEqual(expected_output_hotfix_beta.version_name, tag_hotfix_beta) - - self.assertEqual(expected_output_hotfix_prod, actual_output_hotfix_prod) - self.assertEqual(expected_output_hotfix_prod.version_name, tag_hotfix_prod) - - def test_breaking_then_hotfix(self) -> None: - """Test Case: Run the action after a ``feat!:`` commit and after a hotfix.""" - # Arrange - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix - args_hotfix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_release = ActionOutputs( - version='1.0.0-pre-hotfix.1', - version_name='v1.0.0-pre-hotfix.1', - previous_version='1.0.0-pre', - previous_version_name='v1.0.0-pre', - tag_created=True - ) - - args_hotfix_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_beta = ActionOutputs( - version='1.0.0-beta-hotfix.1', - version_name='v1.0.0-beta-hotfix.1', - previous_version='1.0.0-beta', - previous_version_name='v1.0.0-beta', - tag_created=True - ) - - args_hotfix_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_prod = ActionOutputs( - version='1.0.0-hotfix.1', - version_name='v1.0.0-hotfix.1', - previous_version='1.0.0', - previous_version_name='v1.0.0', - tag_created=True - ) - - # Act - # Breaking - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Hotfix - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix_release = run_action(args_hotfix_release) - tag_hotfix_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix_beta = run_action(args_hotfix_beta) - tag_hotfix_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix_prod = run_action(args_hotfix_prod) - tag_hotfix_prod = self.repo.get_latest_tag_name() - - # Assert - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - # Hotfix - self.assertEqual(expected_output_hotfix_release, actual_output_hotfix_release) - self.assertEqual(expected_output_hotfix_release.version_name, tag_hotfix_release) - - self.assertEqual(expected_output_hotfix_beta, actual_output_hotfix_beta) - self.assertEqual(expected_output_hotfix_beta.version_name, tag_hotfix_beta) - - self.assertEqual(expected_output_hotfix_prod, actual_output_hotfix_prod) - self.assertEqual(expected_output_hotfix_prod.version_name, tag_hotfix_prod) - - -if __name__ == '__main__': - unittest.main() +from assertpy import assert_that + +from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action + + +def test_fix_then_hotfix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` commit and after a hotfix.""" + # Arrange + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix + args_hotfix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_release = ActionOutputs( + version='0.0.1-pre-hotfix.1', + version_name='v0.0.1-pre-hotfix.1', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_hotfix_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_beta = ActionOutputs( + version='0.0.1-beta-hotfix.1', + version_name='v0.0.1-beta-hotfix.1', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_hotfix_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_prod = ActionOutputs( + version='0.0.1-hotfix.1', + version_name='v0.0.1-hotfix.1', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Act + # Fix + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Hotfix + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix_release = run_action(args_hotfix_release) + tag_hotfix_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix_beta = run_action(args_hotfix_beta) + tag_hotfix_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix_prod = run_action(args_hotfix_prod) + tag_hotfix_prod = repo.get_latest_tag_name() + + # Assert + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + # Hotfix + assert_that(actual_output_hotfix_release).is_equal_to(expected_output_hotfix_release) + assert_that(tag_hotfix_release).is_equal_to(expected_output_hotfix_release.version_name) + + assert_that(actual_output_hotfix_beta).is_equal_to(expected_output_hotfix_beta) + assert_that(tag_hotfix_beta).is_equal_to(expected_output_hotfix_beta.version_name) + + assert_that(actual_output_hotfix_prod).is_equal_to(expected_output_hotfix_prod) + assert_that(tag_hotfix_prod).is_equal_to(expected_output_hotfix_prod.version_name) + + +def test_feature_then_hotfix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` commit and after a hotfix.""" + # Arrange + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix + args_hotfix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_release = ActionOutputs( + version='0.1.0-pre-hotfix.1', + version_name='v0.1.0-pre-hotfix.1', + previous_version='0.1.0-pre', + previous_version_name='v0.1.0-pre', + tag_created=True + ) + + args_hotfix_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_beta = ActionOutputs( + version='0.1.0-beta-hotfix.1', + version_name='v0.1.0-beta-hotfix.1', + previous_version='0.1.0-beta', + previous_version_name='v0.1.0-beta', + tag_created=True + ) + + args_hotfix_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_prod = ActionOutputs( + version='0.1.0-hotfix.1', + version_name='v0.1.0-hotfix.1', + previous_version='0.1.0', + previous_version_name='v0.1.0', + tag_created=True + ) + + # Act + # Feature + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Hotfix + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix_release = run_action(args_hotfix_release) + tag_hotfix_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix_beta = run_action(args_hotfix_beta) + tag_hotfix_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix_prod = run_action(args_hotfix_prod) + tag_hotfix_prod = repo.get_latest_tag_name() + + # Assert + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + # Hotfix + assert_that(actual_output_hotfix_release).is_equal_to(expected_output_hotfix_release) + assert_that(tag_hotfix_release).is_equal_to(expected_output_hotfix_release.version_name) + + assert_that(actual_output_hotfix_beta).is_equal_to(expected_output_hotfix_beta) + assert_that(tag_hotfix_beta).is_equal_to(expected_output_hotfix_beta.version_name) + + assert_that(actual_output_hotfix_prod).is_equal_to(expected_output_hotfix_prod) + assert_that(tag_hotfix_prod).is_equal_to(expected_output_hotfix_prod.version_name) + + +def test_breaking_then_hotfix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` commit and after a hotfix.""" + # Arrange + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix + args_hotfix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_release = ActionOutputs( + version='1.0.0-pre-hotfix.1', + version_name='v1.0.0-pre-hotfix.1', + previous_version='1.0.0-pre', + previous_version_name='v1.0.0-pre', + tag_created=True + ) + + args_hotfix_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_beta = ActionOutputs( + version='1.0.0-beta-hotfix.1', + version_name='v1.0.0-beta-hotfix.1', + previous_version='1.0.0-beta', + previous_version_name='v1.0.0-beta', + tag_created=True + ) + + args_hotfix_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_prod = ActionOutputs( + version='1.0.0-hotfix.1', + version_name='v1.0.0-hotfix.1', + previous_version='1.0.0', + previous_version_name='v1.0.0', + tag_created=True + ) + + # Act + # Breaking + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Hotfix + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix_release = run_action(args_hotfix_release) + tag_hotfix_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix_beta = run_action(args_hotfix_beta) + tag_hotfix_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix_prod = run_action(args_hotfix_prod) + tag_hotfix_prod = repo.get_latest_tag_name() + + # Assert + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + # Hotfix + assert_that(actual_output_hotfix_release).is_equal_to(expected_output_hotfix_release) + assert_that(tag_hotfix_release).is_equal_to(expected_output_hotfix_release.version_name) + + assert_that(actual_output_hotfix_beta).is_equal_to(expected_output_hotfix_beta) + assert_that(tag_hotfix_beta).is_equal_to(expected_output_hotfix_beta.version_name) + + assert_that(actual_output_hotfix_prod).is_equal_to(expected_output_hotfix_prod) + assert_that(tag_hotfix_prod).is_equal_to(expected_output_hotfix_prod.version_name) diff --git a/tests/e2e/test_one_hotfix_then_version.py b/tests/e2e/test_one_hotfix_then_version.py index ff12008..0c919bb 100644 --- a/tests/e2e/test_one_hotfix_then_version.py +++ b/tests/e2e/test_one_hotfix_then_version.py @@ -1,715 +1,698 @@ """Test all scenarios where one hotfix / cherrypick and a commit with a release after each are made.""" # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements -import unittest -from unittest import TestCase - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action, setup_logging - - -class OneHotfixTestCase(TestCase): - """Test all scenarios where one hotfix / cherrypick and a commit with a release after each are made.""" - repo: TestRepo - - @classmethod - def setUpClass(cls) -> None: - setup_logging() - - def setUp(self) -> None: - self.repo = TestRepo() - - def tearDown(self) -> None: - self.repo.close() - - def test_fix_then_hotfix_then_fix(self) -> None: - """Test Case: Run the action after a ``fix:`` commit, after a hotfix and after another ``fix:`` commit.""" - # Arrange - # Fix 1 - args_fix1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix1_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix1_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix1_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix1_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix1_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix - args_hotfix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_release = ActionOutputs( - version='0.0.1-pre-hotfix.1', - version_name='v0.0.1-pre-hotfix.1', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_hotfix_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_beta = ActionOutputs( - version='0.0.1-beta-hotfix.1', - version_name='v0.0.1-beta-hotfix.1', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_hotfix_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_prod = ActionOutputs( - version='0.0.1-hotfix.1', - version_name='v0.0.1-hotfix.1', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Fix 2 - args_fix2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix2_release = ActionOutputs( - version='0.0.2-pre', - version_name='v0.0.2-pre', - previous_version='0.0.1-pre-hotfix.1', - previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True - ) - - args_fix2_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix2_beta = ActionOutputs( - version='0.0.2-beta', - version_name='v0.0.2-beta', - previous_version='0.0.1-beta-hotfix.1', - previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True - ) - - args_fix2_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix2_prod = ActionOutputs( - version='0.0.2', - version_name='v0.0.2', - previous_version='0.0.1-hotfix.1', - previous_version_name='v0.0.1-hotfix.1', - tag_created=True - ) - - # Act - # Fix 1 - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix1_release = run_action(args_fix1_release) - tag_fix1_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix1_beta = run_action(args_fix1_beta) - tag_fix1_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix1_prod = run_action(args_fix1_prod) - tag_fix1_prod = self.repo.get_latest_tag_name() - - # Hotfix - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix_release = run_action(args_hotfix_release) - tag_hotfix_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix_beta = run_action(args_hotfix_beta) - tag_hotfix_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix_prod = run_action(args_hotfix_prod) - tag_hotfix_prod = self.repo.get_latest_tag_name() - - # Fix 2 - self.repo.checkout('main') - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix2_release = run_action(args_fix2_release) - tag_fix2_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix2_beta = run_action(args_fix2_beta) - tag_fix2_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix2_prod = run_action(args_fix2_prod) - tag_fix2_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix 1 - self.assertEqual(expected_output_fix1_release, actual_output_fix1_release) - self.assertEqual(expected_output_fix1_release.version_name, tag_fix1_release) - - self.assertEqual(expected_output_fix1_beta, actual_output_fix1_beta) - self.assertEqual(expected_output_fix1_beta.version_name, tag_fix1_beta) - - self.assertEqual(expected_output_fix1_prod, actual_output_fix1_prod) - self.assertEqual(expected_output_fix1_prod.version_name, tag_fix1_prod) - - # Hotfix - self.assertEqual(expected_output_hotfix_release, actual_output_hotfix_release) - self.assertEqual(expected_output_hotfix_release.version_name, tag_hotfix_release) - - self.assertEqual(expected_output_hotfix_beta, actual_output_hotfix_beta) - self.assertEqual(expected_output_hotfix_beta.version_name, tag_hotfix_beta) - - self.assertEqual(expected_output_hotfix_prod, actual_output_hotfix_prod) - self.assertEqual(expected_output_hotfix_prod.version_name, tag_hotfix_prod) - - # Fix 2 - self.assertEqual(expected_output_fix2_release, actual_output_fix2_release) - self.assertEqual(expected_output_fix2_release.version_name, tag_fix2_release) - - self.assertEqual(expected_output_fix2_beta, actual_output_fix2_beta) - self.assertEqual(expected_output_fix2_beta.version_name, tag_fix2_beta) - - self.assertEqual(expected_output_fix2_prod, actual_output_fix2_prod) - self.assertEqual(expected_output_fix2_prod.version_name, tag_fix2_prod) - - def test_fix_then_hotfix_then_feature(self) -> None: - """Test Case: Run the action after a ``fix:`` commit, after a hotfix and after a ``feat:`` commit.""" - # Arrange - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix - args_hotfix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_release = ActionOutputs( - version='0.0.1-pre-hotfix.1', - version_name='v0.0.1-pre-hotfix.1', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_hotfix_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_beta = ActionOutputs( - version='0.0.1-beta-hotfix.1', - version_name='v0.0.1-beta-hotfix.1', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_hotfix_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_prod = ActionOutputs( - version='0.0.1-hotfix.1', - version_name='v0.0.1-hotfix.1', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Feature - args_feature_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feature_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='0.0.1-pre-hotfix.1', - previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True - ) - - args_feature_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feature_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='0.0.1-beta-hotfix.1', - previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True - ) - - args_feature_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feature_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='0.0.1-hotfix.1', - previous_version_name='v0.0.1-hotfix.1', - tag_created=True - ) - - # Act - # Fix - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Hotfix - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix_release = run_action(args_hotfix_release) - tag_hotfix_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix_beta = run_action(args_hotfix_beta) - tag_hotfix_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix_prod = run_action(args_hotfix_prod) - tag_hotfix_prod = self.repo.get_latest_tag_name() - - # Feature - self.repo.checkout('main') - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feature_release = run_action(args_feature_release) - tag_feature_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feature_beta = run_action(args_feature_beta) - tag_feature_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feature_prod = run_action(args_feature_prod) - tag_feature_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - # Hotfix - self.assertEqual(expected_output_hotfix_release, actual_output_hotfix_release) - self.assertEqual(expected_output_hotfix_release.version_name, tag_hotfix_release) - - self.assertEqual(expected_output_hotfix_beta, actual_output_hotfix_beta) - self.assertEqual(expected_output_hotfix_beta.version_name, tag_hotfix_beta) - - self.assertEqual(expected_output_hotfix_prod, actual_output_hotfix_prod) - self.assertEqual(expected_output_hotfix_prod.version_name, tag_hotfix_prod) - - # Feature - self.assertEqual(expected_output_feature_release, actual_output_feature_release) - self.assertEqual(expected_output_feature_release.version_name, tag_feature_release) - - self.assertEqual(expected_output_feature_beta, actual_output_feature_beta) - self.assertEqual(expected_output_feature_beta.version_name, tag_feature_beta) - - self.assertEqual(expected_output_feature_prod, actual_output_feature_prod) - self.assertEqual(expected_output_feature_prod.version_name, tag_feature_prod) - - def test_fix_then_hotfix_then_breaking(self) -> None: - """Test Case: Run the action after a ``fix:`` commit, after a hotfix and after a ``feat!`` commit.""" - # Arrange - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix - args_hotfix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_release = ActionOutputs( - version='0.0.1-pre-hotfix.1', - version_name='v0.0.1-pre-hotfix.1', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_hotfix_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_beta = ActionOutputs( - version='0.0.1-beta-hotfix.1', - version_name='v0.0.1-beta-hotfix.1', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_hotfix_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix_prod = ActionOutputs( - version='0.0.1-hotfix.1', - version_name='v0.0.1-hotfix.1', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='0.0.1-pre-hotfix.1', - previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='0.0.1-beta-hotfix.1', - previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='0.0.1-hotfix.1', - previous_version_name='v0.0.1-hotfix.1', - tag_created=True - ) - - # Act - # Fix - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Hotfix - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix_release = run_action(args_hotfix_release) - tag_hotfix_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix_beta = run_action(args_hotfix_beta) - tag_hotfix_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix_prod = run_action(args_hotfix_prod) - tag_hotfix_prod = self.repo.get_latest_tag_name() - - # Breaking - self.repo.checkout('main') - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - # Hotfix - self.assertEqual(expected_output_hotfix_release, actual_output_hotfix_release) - self.assertEqual(expected_output_hotfix_release.version_name, tag_hotfix_release) - - self.assertEqual(expected_output_hotfix_beta, actual_output_hotfix_beta) - self.assertEqual(expected_output_hotfix_beta.version_name, tag_hotfix_beta) - - self.assertEqual(expected_output_hotfix_prod, actual_output_hotfix_prod) - self.assertEqual(expected_output_hotfix_prod.version_name, tag_hotfix_prod) - - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - -if __name__ == '__main__': - unittest.main() +from assertpy import assert_that + +from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action + + +def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` commit, after a hotfix and after another ``fix:`` commit.""" + # Arrange + # Fix 1 + args_fix1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix1_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix1_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix1_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix1_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix1_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix + args_hotfix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_release = ActionOutputs( + version='0.0.1-pre-hotfix.1', + version_name='v0.0.1-pre-hotfix.1', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_hotfix_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_beta = ActionOutputs( + version='0.0.1-beta-hotfix.1', + version_name='v0.0.1-beta-hotfix.1', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_hotfix_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_prod = ActionOutputs( + version='0.0.1-hotfix.1', + version_name='v0.0.1-hotfix.1', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Fix 2 + args_fix2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix2_release = ActionOutputs( + version='0.0.2-pre', + version_name='v0.0.2-pre', + previous_version='0.0.1-pre-hotfix.1', + previous_version_name='v0.0.1-pre-hotfix.1', + tag_created=True + ) + + args_fix2_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix2_beta = ActionOutputs( + version='0.0.2-beta', + version_name='v0.0.2-beta', + previous_version='0.0.1-beta-hotfix.1', + previous_version_name='v0.0.1-beta-hotfix.1', + tag_created=True + ) + + args_fix2_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix2_prod = ActionOutputs( + version='0.0.2', + version_name='v0.0.2', + previous_version='0.0.1-hotfix.1', + previous_version_name='v0.0.1-hotfix.1', + tag_created=True + ) + + # Act + # Fix 1 + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix1_release = run_action(args_fix1_release) + tag_fix1_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix1_beta = run_action(args_fix1_beta) + tag_fix1_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix1_prod = run_action(args_fix1_prod) + tag_fix1_prod = repo.get_latest_tag_name() + + # Hotfix + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix_release = run_action(args_hotfix_release) + tag_hotfix_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix_beta = run_action(args_hotfix_beta) + tag_hotfix_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix_prod = run_action(args_hotfix_prod) + tag_hotfix_prod = repo.get_latest_tag_name() + + # Fix 2 + repo.checkout('main') + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix2_release = run_action(args_fix2_release) + tag_fix2_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix2_beta = run_action(args_fix2_beta) + tag_fix2_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix2_prod = run_action(args_fix2_prod) + tag_fix2_prod = repo.get_latest_tag_name() + + # Assert + # Fix 1 + assert_that(actual_output_fix1_release).is_equal_to(expected_output_fix1_release) + assert_that(tag_fix1_release).is_equal_to(expected_output_fix1_release.version_name) + + assert_that(actual_output_fix1_beta).is_equal_to(expected_output_fix1_beta) + assert_that(tag_fix1_beta).is_equal_to(expected_output_fix1_beta.version_name) + + assert_that(actual_output_fix1_prod).is_equal_to(expected_output_fix1_prod) + assert_that(tag_fix1_prod).is_equal_to(expected_output_fix1_prod.version_name) + + # Hotfix + assert_that(actual_output_hotfix_release).is_equal_to(expected_output_hotfix_release) + assert_that(tag_hotfix_release).is_equal_to(expected_output_hotfix_release.version_name) + + assert_that(actual_output_hotfix_beta).is_equal_to(expected_output_hotfix_beta) + assert_that(tag_hotfix_beta).is_equal_to(expected_output_hotfix_beta.version_name) + + assert_that(actual_output_hotfix_prod).is_equal_to(expected_output_hotfix_prod) + assert_that(tag_hotfix_prod).is_equal_to(expected_output_hotfix_prod.version_name) + + # Fix 2 + assert_that(actual_output_fix2_release).is_equal_to(expected_output_fix2_release) + assert_that(tag_fix2_release).is_equal_to(expected_output_fix2_release.version_name) + + assert_that(actual_output_fix2_beta).is_equal_to(expected_output_fix2_beta) + assert_that(tag_fix2_beta).is_equal_to(expected_output_fix2_beta.version_name) + + assert_that(actual_output_fix2_prod).is_equal_to(expected_output_fix2_prod) + assert_that(tag_fix2_prod).is_equal_to(expected_output_fix2_prod.version_name) + + +def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` commit, after a hotfix and after a ``feat:`` commit.""" + # Arrange + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix + args_hotfix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_release = ActionOutputs( + version='0.0.1-pre-hotfix.1', + version_name='v0.0.1-pre-hotfix.1', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_hotfix_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_beta = ActionOutputs( + version='0.0.1-beta-hotfix.1', + version_name='v0.0.1-beta-hotfix.1', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_hotfix_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_prod = ActionOutputs( + version='0.0.1-hotfix.1', + version_name='v0.0.1-hotfix.1', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Feature + args_feature_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feature_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='0.0.1-pre-hotfix.1', + previous_version_name='v0.0.1-pre-hotfix.1', + tag_created=True + ) + + args_feature_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feature_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='0.0.1-beta-hotfix.1', + previous_version_name='v0.0.1-beta-hotfix.1', + tag_created=True + ) + + args_feature_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feature_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='0.0.1-hotfix.1', + previous_version_name='v0.0.1-hotfix.1', + tag_created=True + ) + + # Act + # Fix + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Hotfix + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix_release = run_action(args_hotfix_release) + tag_hotfix_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix_beta = run_action(args_hotfix_beta) + tag_hotfix_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix_prod = run_action(args_hotfix_prod) + tag_hotfix_prod = repo.get_latest_tag_name() + + # Feature + repo.checkout('main') + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feature_release = run_action(args_feature_release) + tag_feature_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feature_beta = run_action(args_feature_beta) + tag_feature_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feature_prod = run_action(args_feature_prod) + tag_feature_prod = repo.get_latest_tag_name() + + # Assert + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + # Hotfix + assert_that(actual_output_hotfix_release).is_equal_to(expected_output_hotfix_release) + assert_that(tag_hotfix_release).is_equal_to(expected_output_hotfix_release.version_name) + + assert_that(actual_output_hotfix_beta).is_equal_to(expected_output_hotfix_beta) + assert_that(tag_hotfix_beta).is_equal_to(expected_output_hotfix_beta.version_name) + + assert_that(actual_output_hotfix_prod).is_equal_to(expected_output_hotfix_prod) + assert_that(tag_hotfix_prod).is_equal_to(expected_output_hotfix_prod.version_name) + + # Feature + assert_that(actual_output_feature_release).is_equal_to(expected_output_feature_release) + assert_that(tag_feature_release).is_equal_to(expected_output_feature_release.version_name) + + assert_that(actual_output_feature_beta).is_equal_to(expected_output_feature_beta) + assert_that(tag_feature_beta).is_equal_to(expected_output_feature_beta.version_name) + + assert_that(actual_output_feature_prod).is_equal_to(expected_output_feature_prod) + assert_that(tag_feature_prod).is_equal_to(expected_output_feature_prod.version_name) + + +def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` commit, after a hotfix and after a ``feat!`` commit.""" + # Arrange + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix + args_hotfix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_release = ActionOutputs( + version='0.0.1-pre-hotfix.1', + version_name='v0.0.1-pre-hotfix.1', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_hotfix_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_beta = ActionOutputs( + version='0.0.1-beta-hotfix.1', + version_name='v0.0.1-beta-hotfix.1', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_hotfix_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix_prod = ActionOutputs( + version='0.0.1-hotfix.1', + version_name='v0.0.1-hotfix.1', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='0.0.1-pre-hotfix.1', + previous_version_name='v0.0.1-pre-hotfix.1', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='0.0.1-beta-hotfix.1', + previous_version_name='v0.0.1-beta-hotfix.1', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='0.0.1-hotfix.1', + previous_version_name='v0.0.1-hotfix.1', + tag_created=True + ) + + # Act + # Fix + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Hotfix + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix_release = run_action(args_hotfix_release) + tag_hotfix_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix_beta = run_action(args_hotfix_beta) + tag_hotfix_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix_prod = run_action(args_hotfix_prod) + tag_hotfix_prod = repo.get_latest_tag_name() + + # Breaking + repo.checkout('main') + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Assert + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + # Hotfix + assert_that(actual_output_hotfix_release).is_equal_to(expected_output_hotfix_release) + assert_that(tag_hotfix_release).is_equal_to(expected_output_hotfix_release.version_name) + + assert_that(actual_output_hotfix_beta).is_equal_to(expected_output_hotfix_beta) + assert_that(tag_hotfix_beta).is_equal_to(expected_output_hotfix_beta.version_name) + + assert_that(actual_output_hotfix_prod).is_equal_to(expected_output_hotfix_prod) + assert_that(tag_hotfix_prod).is_equal_to(expected_output_hotfix_prod.version_name) + + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) diff --git a/tests/e2e/test_two_commits.py b/tests/e2e/test_two_commits.py index ff82c24..4956cc7 100644 --- a/tests/e2e/test_two_commits.py +++ b/tests/e2e/test_two_commits.py @@ -1,1238 +1,1235 @@ """Test all scenarios where two commits with a release at the end are made.""" # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements,too-many-statements -import unittest -from unittest import TestCase - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action, setup_logging - - -class TwoCommitsTestCase(TestCase): - """Test all scenarios where two commits with a release at the end are made.""" - repo: TestRepo - - @classmethod - def setUpClass(cls) -> None: - setup_logging() - - def setUp(self) -> None: - self.repo = TestRepo() - - def tearDown(self) -> None: - self.repo.close() - - def test_chore_then_chore(self) -> None: - """Test Case: Run the action after a ``chore:`` and another ``chore:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Act - self.repo.commit(CommitMessages.CHORE) - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(None, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(None, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(None, tag_prod) - - def test_chore_then_fix(self) -> None: - """Test Case: Run the action after a ``chore:`` and a ``fix:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.CHORE) - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_chore_then_feat(self) -> None: - """Test Case: Run the action after a ``chore:`` and a ``feat:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.CHORE) - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_chore_then_breaking(self) -> None: - """Test Case: Run the action after a ``chore:`` and a ``feat!:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.CHORE) - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_fix_then_chore(self) -> None: - """Test Case: Run the action after a ``fix:`` and a ``chore:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FIX) - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_fix_then_fix(self) -> None: - """Test Case: Run the action after a ``fix:`` and another ``fix:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FIX) - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_fix_then_feat(self) -> None: - """Test Case: Run the action after a ``fix:`` and a ``feat:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FIX) - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_fix_then_breaking(self) -> None: - """Test Case: Run the action after a ``fix:`` and a ``feat!:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FIX) - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_feat_then_chore(self) -> None: - """Test Case: Run the action after a ``feat:`` and a ``chore:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FEATURE) - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_feat_then_fix(self) -> None: - """Test Case: Run the action after a ``feat:`` and a ``fix:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FEATURE) - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_feat_then_feat(self) -> None: - """Test Case: Run the action after a ``feat:`` and another ``feat:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FEATURE) - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_feat_then_breaking(self) -> None: - """Test Case: Run the action after a ``feat:`` and a ``feat!:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.FEATURE) - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_breaking_then_chore(self) -> None: - """Test Case: Run the action after a ``feat!:`` and a ``chore:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.BREAKING_FEATURE) - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_breaking_then_fix(self) -> None: - """Test Case: Run the action after a ``feat!:`` and a ``fix:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.BREAKING_FEATURE) - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_breaking_then_feat(self) -> None: - """Test Case: Run the action after a ``feat!:`` and another ``feat:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.BREAKING_FEATURE) - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - def test_breaking_then_breaking(self) -> None: - """Test Case: Run the action after a ``feat!:`` and another ``feat!:`` commit.""" - # Arrange - args_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - self.repo.commit(CommitMessages.BREAKING_FEATURE) - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_release = run_action(args_release) - tag_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_beta = run_action(args_beta) - tag_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_prod = run_action(args_prod) - tag_prod = self.repo.get_latest_tag_name() - - # Assert - self.assertEqual(expected_output_release, actual_output_release) - self.assertEqual(expected_output_release.version_name, tag_release) - - self.assertEqual(expected_output_beta, actual_output_beta) - self.assertEqual(expected_output_beta.version_name, tag_beta) - - self.assertEqual(expected_output_prod, actual_output_prod) - self.assertEqual(expected_output_prod.version_name, tag_prod) - - -if __name__ == '__main__': - unittest.main() + +from assertpy import assert_that + +from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action + + +def test_chore_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and another ``chore:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Act + repo.commit(CommitMessages.CHORE) + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_none() + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_none() + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_none() + + +def test_chore_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and a ``fix:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.CHORE) + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_chore_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and a ``feat:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.CHORE) + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_chore_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and a ``feat!:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.CHORE) + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_fix_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and a ``chore:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FIX) + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_fix_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and another ``fix:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FIX) + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_fix_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and a ``feat:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + expected_output_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FIX) + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_fix_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and a ``feat!:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FIX) + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_feat_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and a ``chore:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FEATURE) + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_feat_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and a ``fix:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FEATURE) + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_feat_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and another ``feat:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + expected_output_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FEATURE) + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_feat_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and a ``feat!:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.FEATURE) + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_breaking_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and a ``chore:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.BREAKING_FEATURE) + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_breaking_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and a ``fix:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.BREAKING_FEATURE) + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_breaking_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and another ``feat:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.BREAKING_FEATURE) + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) + + +def test_breaking_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and another ``feat!:`` commit.""" + # Arrange + args_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + repo.commit(CommitMessages.BREAKING_FEATURE) + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_release = run_action(args_release) + tag_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_beta = run_action(args_beta) + tag_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_prod = run_action(args_prod) + tag_prod = repo.get_latest_tag_name() + + # Assert + assert_that(actual_output_release).is_equal_to(expected_output_release) + assert_that(tag_release).is_equal_to(expected_output_release.version_name) + + assert_that(actual_output_beta).is_equal_to(expected_output_beta) + assert_that(tag_beta).is_equal_to(expected_output_beta.version_name) + + assert_that(actual_output_prod).is_equal_to(expected_output_prod) + assert_that(tag_prod).is_equal_to(expected_output_prod.version_name) diff --git a/tests/e2e/test_two_hotfixes.py b/tests/e2e/test_two_hotfixes.py index c6c1584..9493199 100644 --- a/tests/e2e/test_two_hotfixes.py +++ b/tests/e2e/test_two_hotfixes.py @@ -1,727 +1,710 @@ """Test all scenarios where two hotfixes / cherrypicks are made.""" # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements -import unittest -from unittest import TestCase - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action, setup_logging - - -class TwoHotfixesTestCase(TestCase): - """Test all scenarios where two hotfixes / cherrypicks are made.""" - repo: TestRepo - - @classmethod - def setUpClass(cls) -> None: - setup_logging() - - def setUp(self) -> None: - self.repo = TestRepo() - - def tearDown(self) -> None: - self.repo.close() - - def test_fix_then_hotfixes(self) -> None: - """Test Case: Run the action after a ``fix:`` commit and after two hotfixes.""" - # Arrange - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix 1 - args_hotfix1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_release = ActionOutputs( - version='0.0.1-pre-hotfix.1', - version_name='v0.0.1-pre-hotfix.1', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_hotfix1_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_beta = ActionOutputs( - version='0.0.1-beta-hotfix.1', - version_name='v0.0.1-beta-hotfix.1', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_hotfix1_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_prod = ActionOutputs( - version='0.0.1-hotfix.1', - version_name='v0.0.1-hotfix.1', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Hotfix 2 - args_hotfix2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_release = ActionOutputs( - version='0.0.1-pre-hotfix.2', - version_name='v0.0.1-pre-hotfix.2', - previous_version='0.0.1-pre-hotfix.1', - previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True - ) - - args_hotfix2_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_beta = ActionOutputs( - version='0.0.1-beta-hotfix.2', - version_name='v0.0.1-beta-hotfix.2', - previous_version='0.0.1-beta-hotfix.1', - previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True - ) - - args_hotfix2_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_prod = ActionOutputs( - version='0.0.1-hotfix.2', - version_name='v0.0.1-hotfix.2', - previous_version='0.0.1-hotfix.1', - previous_version_name='v0.0.1-hotfix.1', - tag_created=True - ) - - # Act - # Fix - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Hotfix 1 - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix1_release = run_action(args_hotfix1_release) - tag_hotfix1_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix1_beta = run_action(args_hotfix1_beta) - tag_hotfix1_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix1_prod = run_action(args_hotfix1_prod) - tag_hotfix1_prod = self.repo.get_latest_tag_name() - - # Hotfix 2 - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix2_release = run_action(args_hotfix2_release) - tag_hotfix2_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix2_beta = run_action(args_hotfix2_beta) - tag_hotfix2_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix2_prod = run_action(args_hotfix2_prod) - tag_hotfix2_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - # Hotfix 1 - self.assertEqual(expected_output_hotfix1_release, actual_output_hotfix1_release) - self.assertEqual(expected_output_hotfix1_release.version_name, tag_hotfix1_release) - - self.assertEqual(expected_output_hotfix1_beta, actual_output_hotfix1_beta) - self.assertEqual(expected_output_hotfix1_beta.version_name, tag_hotfix1_beta) - - self.assertEqual(expected_output_hotfix1_prod, actual_output_hotfix1_prod) - self.assertEqual(expected_output_hotfix1_prod.version_name, tag_hotfix1_prod) - - # Hotfix 2 - self.assertEqual(expected_output_hotfix2_release, actual_output_hotfix2_release) - self.assertEqual(expected_output_hotfix2_release.version_name, tag_hotfix2_release) - - self.assertEqual(expected_output_hotfix2_beta, actual_output_hotfix2_beta) - self.assertEqual(expected_output_hotfix2_beta.version_name, tag_hotfix2_beta) - - self.assertEqual(expected_output_hotfix2_prod, actual_output_hotfix2_prod) - self.assertEqual(expected_output_hotfix2_prod.version_name, tag_hotfix2_prod) - - def test_feat_then_hotfixes(self) -> None: - """Test Case: Run the action after a ``feat:`` commit and after two hotfixes.""" - # Arrange - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix 1 - args_hotfix1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_release = ActionOutputs( - version='0.1.0-pre-hotfix.1', - version_name='v0.1.0-pre-hotfix.1', - previous_version='0.1.0-pre', - previous_version_name='v0.1.0-pre', - tag_created=True - ) - - args_hotfix1_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_beta = ActionOutputs( - version='0.1.0-beta-hotfix.1', - version_name='v0.1.0-beta-hotfix.1', - previous_version='0.1.0-beta', - previous_version_name='v0.1.0-beta', - tag_created=True - ) - - args_hotfix1_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_prod = ActionOutputs( - version='0.1.0-hotfix.1', - version_name='v0.1.0-hotfix.1', - previous_version='0.1.0', - previous_version_name='v0.1.0', - tag_created=True - ) - - # Hotfix 2 - args_hotfix2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_release = ActionOutputs( - version='0.1.0-pre-hotfix.2', - version_name='v0.1.0-pre-hotfix.2', - previous_version='0.1.0-pre-hotfix.1', - previous_version_name='v0.1.0-pre-hotfix.1', - tag_created=True - ) - - args_hotfix2_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_beta = ActionOutputs( - version='0.1.0-beta-hotfix.2', - version_name='v0.1.0-beta-hotfix.2', - previous_version='0.1.0-beta-hotfix.1', - previous_version_name='v0.1.0-beta-hotfix.1', - tag_created=True - ) - - args_hotfix2_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_prod = ActionOutputs( - version='0.1.0-hotfix.2', - version_name='v0.1.0-hotfix.2', - previous_version='0.1.0-hotfix.1', - previous_version_name='v0.1.0-hotfix.1', - tag_created=True - ) - - # Act - # Feature - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Hotfix 1 - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix1_release = run_action(args_hotfix1_release) - tag_hotfix1_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix1_beta = run_action(args_hotfix1_beta) - tag_hotfix1_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix1_prod = run_action(args_hotfix1_prod) - tag_hotfix1_prod = self.repo.get_latest_tag_name() - - # Hotfix 2 - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix2_release = run_action(args_hotfix2_release) - tag_hotfix2_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix2_beta = run_action(args_hotfix2_beta) - tag_hotfix2_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix2_prod = run_action(args_hotfix2_prod) - tag_hotfix2_prod = self.repo.get_latest_tag_name() - - # Assert - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - # Hotfix 1 - self.assertEqual(expected_output_hotfix1_release, actual_output_hotfix1_release) - self.assertEqual(expected_output_hotfix1_release.version_name, tag_hotfix1_release) - - self.assertEqual(expected_output_hotfix1_beta, actual_output_hotfix1_beta) - self.assertEqual(expected_output_hotfix1_beta.version_name, tag_hotfix1_beta) - - self.assertEqual(expected_output_hotfix1_prod, actual_output_hotfix1_prod) - self.assertEqual(expected_output_hotfix1_prod.version_name, tag_hotfix1_prod) - - # Hotfix 2 - self.assertEqual(expected_output_hotfix2_release, actual_output_hotfix2_release) - self.assertEqual(expected_output_hotfix2_release.version_name, tag_hotfix2_release) - - self.assertEqual(expected_output_hotfix2_beta, actual_output_hotfix2_beta) - self.assertEqual(expected_output_hotfix2_beta.version_name, tag_hotfix2_beta) - - self.assertEqual(expected_output_hotfix2_prod, actual_output_hotfix2_prod) - self.assertEqual(expected_output_hotfix2_prod.version_name, tag_hotfix2_prod) - - def test_breaking_then_hotfixes(self) -> None: - """Test Case: Run the action after a ``feat!:`` commit and after two hotfixes.""" - # Arrange - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Hotfix 1 - args_hotfix1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_release = ActionOutputs( - version='1.0.0-pre-hotfix.1', - version_name='v1.0.0-pre-hotfix.1', - previous_version='1.0.0-pre', - previous_version_name='v1.0.0-pre', - tag_created=True - ) - - args_hotfix1_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_beta = ActionOutputs( - version='1.0.0-beta-hotfix.1', - version_name='v1.0.0-beta-hotfix.1', - previous_version='1.0.0-beta', - previous_version_name='v1.0.0-beta', - tag_created=True - ) - - args_hotfix1_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix1_prod = ActionOutputs( - version='1.0.0-hotfix.1', - version_name='v1.0.0-hotfix.1', - previous_version='1.0.0', - previous_version_name='v1.0.0', - tag_created=True - ) - - # Hotfix 2 - args_hotfix2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_release = ActionOutputs( - version='1.0.0-pre-hotfix.2', - version_name='v1.0.0-pre-hotfix.2', - previous_version='1.0.0-pre-hotfix.1', - previous_version_name='v1.0.0-pre-hotfix.1', - tag_created=True - ) - - args_hotfix2_beta = ActionInputs( - prefix='v', - suffix='beta', - reference_version_suffix='pre', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_beta = ActionOutputs( - version='1.0.0-beta-hotfix.2', - version_name='v1.0.0-beta-hotfix.2', - previous_version='1.0.0-beta-hotfix.1', - previous_version_name='v1.0.0-beta-hotfix.1', - tag_created=True - ) - - args_hotfix2_prod = ActionInputs( - prefix='v', - suffix=None, - reference_version_suffix='beta', - bumping_suffix='hotfix', - only_bump_suffix=True, - create_tag=True - ) - - expected_output_hotfix2_prod = ActionOutputs( - version='1.0.0-hotfix.2', - version_name='v1.0.0-hotfix.2', - previous_version='1.0.0-hotfix.1', - previous_version_name='v1.0.0-hotfix.1', - tag_created=True - ) - - # Act - # Breaking - self.repo.commit(CommitMessages.BREAKING_FIX) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Hotfix 1 - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix1_release = run_action(args_hotfix1_release) - tag_hotfix1_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix1_beta = run_action(args_hotfix1_beta) - tag_hotfix1_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix1_prod = run_action(args_hotfix1_prod) - tag_hotfix1_prod = self.repo.get_latest_tag_name() - - # Hotfix 2 - self.repo.checkout('main') - commit = self.repo.commit(CommitMessages.FIX) - - self.repo.cherrypick(commit, 'release') - actual_output_hotfix2_release = run_action(args_hotfix2_release) - tag_hotfix2_release = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-beta') - actual_output_hotfix2_beta = run_action(args_hotfix2_beta) - tag_hotfix2_beta = self.repo.get_latest_tag_name() - - self.repo.cherrypick(commit, 'release-prod') - actual_output_hotfix2_prod = run_action(args_hotfix2_prod) - tag_hotfix2_prod = self.repo.get_latest_tag_name() - - # Assert - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - # Hotfix 1 - self.assertEqual(expected_output_hotfix1_release, actual_output_hotfix1_release) - self.assertEqual(expected_output_hotfix1_release.version_name, tag_hotfix1_release) - - self.assertEqual(expected_output_hotfix1_beta, actual_output_hotfix1_beta) - self.assertEqual(expected_output_hotfix1_beta.version_name, tag_hotfix1_beta) - - self.assertEqual(expected_output_hotfix1_prod, actual_output_hotfix1_prod) - self.assertEqual(expected_output_hotfix1_prod.version_name, tag_hotfix1_prod) - - # Hotfix 2 - self.assertEqual(expected_output_hotfix2_release, actual_output_hotfix2_release) - self.assertEqual(expected_output_hotfix2_release.version_name, tag_hotfix2_release) - - self.assertEqual(expected_output_hotfix2_beta, actual_output_hotfix2_beta) - self.assertEqual(expected_output_hotfix2_beta.version_name, tag_hotfix2_beta) - - self.assertEqual(expected_output_hotfix2_prod, actual_output_hotfix2_prod) - self.assertEqual(expected_output_hotfix2_prod.version_name, tag_hotfix2_prod) - - -if __name__ == '__main__': - unittest.main() +from assertpy import assert_that + +from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action + + +def test_fix_then_hotfixes(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` commit and after two hotfixes.""" + # Arrange + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix 1 + args_hotfix1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_release = ActionOutputs( + version='0.0.1-pre-hotfix.1', + version_name='v0.0.1-pre-hotfix.1', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_hotfix1_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_beta = ActionOutputs( + version='0.0.1-beta-hotfix.1', + version_name='v0.0.1-beta-hotfix.1', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_hotfix1_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_prod = ActionOutputs( + version='0.0.1-hotfix.1', + version_name='v0.0.1-hotfix.1', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Hotfix 2 + args_hotfix2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_release = ActionOutputs( + version='0.0.1-pre-hotfix.2', + version_name='v0.0.1-pre-hotfix.2', + previous_version='0.0.1-pre-hotfix.1', + previous_version_name='v0.0.1-pre-hotfix.1', + tag_created=True + ) + + args_hotfix2_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_beta = ActionOutputs( + version='0.0.1-beta-hotfix.2', + version_name='v0.0.1-beta-hotfix.2', + previous_version='0.0.1-beta-hotfix.1', + previous_version_name='v0.0.1-beta-hotfix.1', + tag_created=True + ) + + args_hotfix2_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_prod = ActionOutputs( + version='0.0.1-hotfix.2', + version_name='v0.0.1-hotfix.2', + previous_version='0.0.1-hotfix.1', + previous_version_name='v0.0.1-hotfix.1', + tag_created=True + ) + + # Act + # Fix + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Hotfix 1 + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix1_release = run_action(args_hotfix1_release) + tag_hotfix1_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix1_beta = run_action(args_hotfix1_beta) + tag_hotfix1_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix1_prod = run_action(args_hotfix1_prod) + tag_hotfix1_prod = repo.get_latest_tag_name() + + # Hotfix 2 + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix2_release = run_action(args_hotfix2_release) + tag_hotfix2_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix2_beta = run_action(args_hotfix2_beta) + tag_hotfix2_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix2_prod = run_action(args_hotfix2_prod) + tag_hotfix2_prod = repo.get_latest_tag_name() + + # Assert + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + # Hotfix 1 + assert_that(actual_output_hotfix1_release).is_equal_to(expected_output_hotfix1_release) + assert_that(tag_hotfix1_release).is_equal_to(expected_output_hotfix1_release.version_name) + + assert_that(actual_output_hotfix1_beta).is_equal_to(expected_output_hotfix1_beta) + assert_that(tag_hotfix1_beta).is_equal_to(expected_output_hotfix1_beta.version_name) + + assert_that(actual_output_hotfix1_prod).is_equal_to(expected_output_hotfix1_prod) + assert_that(tag_hotfix1_prod).is_equal_to(expected_output_hotfix1_prod.version_name) + + # Hotfix 2 + assert_that(actual_output_hotfix2_release).is_equal_to(expected_output_hotfix2_release) + assert_that(tag_hotfix2_release).is_equal_to(expected_output_hotfix2_release.version_name) + + assert_that(actual_output_hotfix2_beta).is_equal_to(expected_output_hotfix2_beta) + assert_that(tag_hotfix2_beta).is_equal_to(expected_output_hotfix2_beta.version_name) + + assert_that(actual_output_hotfix2_prod).is_equal_to(expected_output_hotfix2_prod) + assert_that(tag_hotfix2_prod).is_equal_to(expected_output_hotfix2_prod.version_name) + + +def test_feat_then_hotfixes(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` commit and after two hotfixes.""" + # Arrange + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix 1 + args_hotfix1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_release = ActionOutputs( + version='0.1.0-pre-hotfix.1', + version_name='v0.1.0-pre-hotfix.1', + previous_version='0.1.0-pre', + previous_version_name='v0.1.0-pre', + tag_created=True + ) + + args_hotfix1_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_beta = ActionOutputs( + version='0.1.0-beta-hotfix.1', + version_name='v0.1.0-beta-hotfix.1', + previous_version='0.1.0-beta', + previous_version_name='v0.1.0-beta', + tag_created=True + ) + + args_hotfix1_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_prod = ActionOutputs( + version='0.1.0-hotfix.1', + version_name='v0.1.0-hotfix.1', + previous_version='0.1.0', + previous_version_name='v0.1.0', + tag_created=True + ) + + # Hotfix 2 + args_hotfix2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_release = ActionOutputs( + version='0.1.0-pre-hotfix.2', + version_name='v0.1.0-pre-hotfix.2', + previous_version='0.1.0-pre-hotfix.1', + previous_version_name='v0.1.0-pre-hotfix.1', + tag_created=True + ) + + args_hotfix2_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_beta = ActionOutputs( + version='0.1.0-beta-hotfix.2', + version_name='v0.1.0-beta-hotfix.2', + previous_version='0.1.0-beta-hotfix.1', + previous_version_name='v0.1.0-beta-hotfix.1', + tag_created=True + ) + + args_hotfix2_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_prod = ActionOutputs( + version='0.1.0-hotfix.2', + version_name='v0.1.0-hotfix.2', + previous_version='0.1.0-hotfix.1', + previous_version_name='v0.1.0-hotfix.1', + tag_created=True + ) + + # Act + # Feature + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Hotfix 1 + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix1_release = run_action(args_hotfix1_release) + tag_hotfix1_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix1_beta = run_action(args_hotfix1_beta) + tag_hotfix1_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix1_prod = run_action(args_hotfix1_prod) + tag_hotfix1_prod = repo.get_latest_tag_name() + + # Hotfix 2 + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix2_release = run_action(args_hotfix2_release) + tag_hotfix2_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix2_beta = run_action(args_hotfix2_beta) + tag_hotfix2_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix2_prod = run_action(args_hotfix2_prod) + tag_hotfix2_prod = repo.get_latest_tag_name() + + # Assert + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + # Hotfix 1 + assert_that(actual_output_hotfix1_release).is_equal_to(expected_output_hotfix1_release) + assert_that(tag_hotfix1_release).is_equal_to(expected_output_hotfix1_release.version_name) + + assert_that(actual_output_hotfix1_beta).is_equal_to(expected_output_hotfix1_beta) + assert_that(tag_hotfix1_beta).is_equal_to(expected_output_hotfix1_beta.version_name) + + assert_that(actual_output_hotfix1_prod).is_equal_to(expected_output_hotfix1_prod) + assert_that(tag_hotfix1_prod).is_equal_to(expected_output_hotfix1_prod.version_name) + + # Hotfix 2 + assert_that(actual_output_hotfix2_release).is_equal_to(expected_output_hotfix2_release) + assert_that(tag_hotfix2_release).is_equal_to(expected_output_hotfix2_release.version_name) + + assert_that(actual_output_hotfix2_beta).is_equal_to(expected_output_hotfix2_beta) + assert_that(tag_hotfix2_beta).is_equal_to(expected_output_hotfix2_beta.version_name) + + assert_that(actual_output_hotfix2_prod).is_equal_to(expected_output_hotfix2_prod) + assert_that(tag_hotfix2_prod).is_equal_to(expected_output_hotfix2_prod.version_name) + + +def test_breaking_then_hotfixes(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` commit and after two hotfixes.""" + # Arrange + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Hotfix 1 + args_hotfix1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_release = ActionOutputs( + version='1.0.0-pre-hotfix.1', + version_name='v1.0.0-pre-hotfix.1', + previous_version='1.0.0-pre', + previous_version_name='v1.0.0-pre', + tag_created=True + ) + + args_hotfix1_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_beta = ActionOutputs( + version='1.0.0-beta-hotfix.1', + version_name='v1.0.0-beta-hotfix.1', + previous_version='1.0.0-beta', + previous_version_name='v1.0.0-beta', + tag_created=True + ) + + args_hotfix1_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix1_prod = ActionOutputs( + version='1.0.0-hotfix.1', + version_name='v1.0.0-hotfix.1', + previous_version='1.0.0', + previous_version_name='v1.0.0', + tag_created=True + ) + + # Hotfix 2 + args_hotfix2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_release = ActionOutputs( + version='1.0.0-pre-hotfix.2', + version_name='v1.0.0-pre-hotfix.2', + previous_version='1.0.0-pre-hotfix.1', + previous_version_name='v1.0.0-pre-hotfix.1', + tag_created=True + ) + + args_hotfix2_beta = ActionInputs( + prefix='v', + suffix='beta', + reference_version_suffix='pre', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_beta = ActionOutputs( + version='1.0.0-beta-hotfix.2', + version_name='v1.0.0-beta-hotfix.2', + previous_version='1.0.0-beta-hotfix.1', + previous_version_name='v1.0.0-beta-hotfix.1', + tag_created=True + ) + + args_hotfix2_prod = ActionInputs( + prefix='v', + suffix=None, + reference_version_suffix='beta', + bumping_suffix='hotfix', + only_bump_suffix=True, + create_tag=True + ) + + expected_output_hotfix2_prod = ActionOutputs( + version='1.0.0-hotfix.2', + version_name='v1.0.0-hotfix.2', + previous_version='1.0.0-hotfix.1', + previous_version_name='v1.0.0-hotfix.1', + tag_created=True + ) + + # Act + # Breaking + repo.commit(CommitMessages.BREAKING_FIX) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Hotfix 1 + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix1_release = run_action(args_hotfix1_release) + tag_hotfix1_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix1_beta = run_action(args_hotfix1_beta) + tag_hotfix1_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix1_prod = run_action(args_hotfix1_prod) + tag_hotfix1_prod = repo.get_latest_tag_name() + + # Hotfix 2 + repo.checkout('main') + commit = repo.commit(CommitMessages.FIX) + + repo.cherrypick(commit, 'release') + actual_output_hotfix2_release = run_action(args_hotfix2_release) + tag_hotfix2_release = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-beta') + actual_output_hotfix2_beta = run_action(args_hotfix2_beta) + tag_hotfix2_beta = repo.get_latest_tag_name() + + repo.cherrypick(commit, 'release-prod') + actual_output_hotfix2_prod = run_action(args_hotfix2_prod) + tag_hotfix2_prod = repo.get_latest_tag_name() + + # Assert + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + # Hotfix 1 + assert_that(actual_output_hotfix1_release).is_equal_to(expected_output_hotfix1_release) + assert_that(tag_hotfix1_release).is_equal_to(expected_output_hotfix1_release.version_name) + + assert_that(actual_output_hotfix1_beta).is_equal_to(expected_output_hotfix1_beta) + assert_that(tag_hotfix1_beta).is_equal_to(expected_output_hotfix1_beta.version_name) + + assert_that(actual_output_hotfix1_prod).is_equal_to(expected_output_hotfix1_prod) + assert_that(tag_hotfix1_prod).is_equal_to(expected_output_hotfix1_prod.version_name) + + # Hotfix 2 + assert_that(actual_output_hotfix2_release).is_equal_to(expected_output_hotfix2_release) + assert_that(tag_hotfix2_release).is_equal_to(expected_output_hotfix2_release.version_name) + + assert_that(actual_output_hotfix2_beta).is_equal_to(expected_output_hotfix2_beta) + assert_that(tag_hotfix2_beta).is_equal_to(expected_output_hotfix2_beta.version_name) + + assert_that(actual_output_hotfix2_prod).is_equal_to(expected_output_hotfix2_prod) + assert_that(tag_hotfix2_prod).is_equal_to(expected_output_hotfix2_prod.version_name) diff --git a/tests/e2e/test_two_versions.py b/tests/e2e/test_two_versions.py index ac5913a..4b43aa6 100644 --- a/tests/e2e/test_two_versions.py +++ b/tests/e2e/test_two_versions.py @@ -1,2456 +1,2452 @@ """Test all scenarios where two commits with a release after each are made.""" # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements -import unittest -from unittest import TestCase - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action, setup_logging - - -class TwoVersionTestCase(TestCase): - """Test all scenarios where two commits with a release after each are made.""" - repo: TestRepo - - @classmethod - def setUpClass(cls) -> None: - setup_logging() - - def setUp(self) -> None: - self.repo = TestRepo() - - def tearDown(self) -> None: - self.repo.close() - - def test_chore_then_chore(self) -> None: - """Test Case: Run the action after a ``chore:`` and another ``chore:`` commit.""" - # Arrange - # Chore 1 - args_chore1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore1_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore1_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore1_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore1_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore1_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Chore 2 - args_chore2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore2_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore2_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore2_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore2_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore2_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Act - # Chore 1 - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore1_release = run_action(args_chore1_release) - tag_chore1_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore1_beta = run_action(args_chore1_beta) - tag_chore1_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore1_prod = run_action(args_chore1_prod) - tag_chore1_prod = self.repo.get_latest_tag_name() - - # Chore 2 - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore2_release = run_action(args_chore2_release) - tag_chore2_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore2_beta = run_action(args_chore2_beta) - tag_chore2_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore2_prod = run_action(args_chore2_prod) - tag_chore2_prod = self.repo.get_latest_tag_name() - - # Assert - # Chore 1 - self.assertEqual(expected_output_chore1_release, actual_output_chore1_release) - self.assertEqual(None, tag_chore1_release) - - self.assertEqual(expected_output_chore1_beta, actual_output_chore1_beta) - self.assertEqual(None, tag_chore1_beta) - - self.assertEqual(expected_output_chore1_prod, actual_output_chore1_prod) - self.assertEqual(None, tag_chore1_prod) - - # Chore 2 - self.assertEqual(expected_output_chore2_release, actual_output_chore2_release) - self.assertEqual(None, tag_chore2_release) - - self.assertEqual(expected_output_chore2_beta, actual_output_chore2_beta) - self.assertEqual(None, tag_chore2_beta) - - self.assertEqual(expected_output_chore2_prod, actual_output_chore2_prod) - self.assertEqual(None, tag_chore2_prod) - - def test_chore_then_fix(self) -> None: - """Test Case: Run the action after a ``chore:`` and a ``fix:`` commit.""" - # Arrange - # Chore - args_chore_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - # Chore - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore_release = run_action(args_chore_release) - tag_chore_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore_beta = run_action(args_chore_beta) - tag_chore_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore_prod = run_action(args_chore_prod) - tag_chore_prod = self.repo.get_latest_tag_name() - - # Fix - self.repo.checkout('main') - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Assert - # Chore - self.assertEqual(expected_output_chore_release, actual_output_chore_release) - self.assertEqual(None, tag_chore_release) - - self.assertEqual(expected_output_chore_beta, actual_output_chore_beta) - self.assertEqual(None, tag_chore_beta) - - self.assertEqual(expected_output_chore_prod, actual_output_chore_prod) - self.assertEqual(None, tag_chore_prod) - - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - def test_chore_then_feat(self) -> None: - """Test Case: Run the action after a ``chore:`` and a ``feat:`` commit.""" - # Arrange - # Chore - args_chore_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - # Chore - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore_release = run_action(args_chore_release) - tag_chore_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore_beta = run_action(args_chore_beta) - tag_chore_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore_prod = run_action(args_chore_prod) - tag_chore_prod = self.repo.get_latest_tag_name() - - # Feature - self.repo.checkout('main') - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Assert - # Chore - self.assertEqual(expected_output_chore_release, actual_output_chore_release) - self.assertEqual(None, tag_chore_release) - - self.assertEqual(expected_output_chore_beta, actual_output_chore_beta) - self.assertEqual(None, tag_chore_beta) - - self.assertEqual(expected_output_chore_prod, actual_output_chore_prod) - self.assertEqual(None, tag_chore_prod) - - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - def test_chore_then_breaking(self) -> None: - """Test Case: Run the action after a ``chore:`` and a ``feat!:`` commit.""" - # Arrange - # Chore - args_chore_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore_beta = ActionOutputs( - version='0.0.0-beta', - version_name='v0.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=False - ) - - args_chore_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False - ) - - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Act - # Chore - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore_release = run_action(args_chore_release) - tag_chore_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore_beta = run_action(args_chore_beta) - tag_chore_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore_prod = run_action(args_chore_prod) - tag_chore_prod = self.repo.get_latest_tag_name() - - # Breaking - self.repo.checkout('main') - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Assert - # Chore - self.assertEqual(expected_output_chore_release, actual_output_chore_release) - self.assertEqual(None, tag_chore_release) - - self.assertEqual(expected_output_chore_beta, actual_output_chore_beta) - self.assertEqual(None, tag_chore_beta) - - self.assertEqual(expected_output_chore_prod, actual_output_chore_prod) - self.assertEqual(None, tag_chore_prod) - - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - def test_fix_then_chore(self) -> None: - """Test Case: Run the action after a ``fix:`` and a ``chore:`` commit.""" - # Arrange - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Chore - args_chore_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=False - ) - - args_chore_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=False - ) - - args_chore_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=False - ) - - # Act - # Fix - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Chore - self.repo.checkout('main') - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore_release = run_action(args_chore_release) - tag_chore_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore_beta = run_action(args_chore_beta) - tag_chore_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore_prod = run_action(args_chore_prod) - tag_chore_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - # Chore - self.assertEqual(expected_output_chore_release, actual_output_chore_release) - self.assertEqual(expected_output_fix_prod.version_name, tag_chore_release) - - self.assertEqual(expected_output_chore_beta, actual_output_chore_beta) - self.assertEqual(expected_output_fix_prod.version_name, tag_chore_beta) - - self.assertEqual(expected_output_chore_prod, actual_output_chore_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_chore_prod) - - def test_fix_then_fix(self) -> None: - """Test Case: Run the action after a ``fix:`` and another ``fix:`` commit.""" - # Arrange - # Fix 1 - args_fix1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix1_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix1_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix1_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix1_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix1_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Fix 2 - args_fix2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix2_release = ActionOutputs( - version='0.0.2-pre', - version_name='v0.0.2-pre', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_fix2_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix2_beta = ActionOutputs( - version='0.0.2-beta', - version_name='v0.0.2-beta', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_fix2_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix2_prod = ActionOutputs( - version='0.0.2', - version_name='v0.0.2', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Act - # Fix 1 - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix1_release = run_action(args_fix1_release) - tag_fix1_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix1_beta = run_action(args_fix1_beta) - tag_fix1_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix1_prod = run_action(args_fix1_prod) - tag_fix1_prod = self.repo.get_latest_tag_name() - - # Fix 2 - self.repo.checkout('main') - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix2_release = run_action(args_fix2_release) - tag_fix2_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix2_beta = run_action(args_fix2_beta) - tag_fix2_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix2_prod = run_action(args_fix2_prod) - tag_fix2_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix 1 - self.assertEqual(expected_output_fix1_release, actual_output_fix1_release) - self.assertEqual(expected_output_fix1_release.version_name, tag_fix1_release) - - self.assertEqual(expected_output_fix1_beta, actual_output_fix1_beta) - self.assertEqual(expected_output_fix1_beta.version_name, tag_fix1_beta) - - self.assertEqual(expected_output_fix1_prod, actual_output_fix1_prod) - self.assertEqual(expected_output_fix1_prod.version_name, tag_fix1_prod) - - # Fix 2 - self.assertEqual(expected_output_fix2_release, actual_output_fix2_release) - self.assertEqual(expected_output_fix2_release.version_name, tag_fix2_release) - - self.assertEqual(expected_output_fix2_beta, actual_output_fix2_beta) - self.assertEqual(expected_output_fix2_beta.version_name, tag_fix2_beta) - - self.assertEqual(expected_output_fix2_prod, actual_output_fix2_prod) - self.assertEqual(expected_output_fix2_prod.version_name, tag_fix2_prod) - - def test_fix_then_feat(self) -> None: - """Test Case: Run the action after a ``fix:`` and a ``feat:`` commit.""" - # Arrange - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Act - # Fix - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Feature - self.repo.checkout('main') - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - def test_fix_then_breaking(self) -> None: - """Test Case: Run the action after a ``fix:`` and a ``feat!:`` commit.""" - # Arrange - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.0.1-beta', - version_name='v0.0.1-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='0.0.1-pre', - previous_version_name='v0.0.1-pre', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='0.0.1-beta', - previous_version_name='v0.0.1-beta', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='0.0.1', - previous_version_name='v0.0.1', - tag_created=True - ) - - # Act - # Fix - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Breaking - self.repo.checkout('main') - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Assert - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - def test_feat_then_chore(self) -> None: - """Test Case: Run the action after a ``feat:`` and a ``chore:`` commit.""" - # Arrange - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Chore - args_chore_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='0.1.0-pre', - previous_version_name='v0.1.0-pre', - tag_created=False - ) - - args_chore_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='0.1.0-beta', - previous_version_name='v0.1.0-beta', - tag_created=False - ) - - args_chore_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='0.1.0', - previous_version_name='v0.1.0', - tag_created=False - ) - - # Act - # Feature - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Chore - self.repo.checkout('main') - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore_release = run_action(args_chore_release) - tag_chore_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore_beta = run_action(args_chore_beta) - tag_chore_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore_prod = run_action(args_chore_prod) - tag_chore_prod = self.repo.get_latest_tag_name() - - # Assert - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - # Chore - self.assertEqual(expected_output_chore_release, actual_output_chore_release) - self.assertEqual(expected_output_feat_prod.version_name, tag_chore_release) - - self.assertEqual(expected_output_chore_beta, actual_output_chore_beta) - self.assertEqual(expected_output_feat_prod.version_name, tag_chore_beta) - - self.assertEqual(expected_output_chore_prod, actual_output_chore_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_chore_prod) - - def test_feat_then_fix(self) -> None: - """Test Case: Run the action after a ``feat:`` and a ``fix:`` commit.""" - # Arrange - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='0.1.1-pre', - version_name='v0.1.1-pre', - previous_version='0.1.0-pre', - previous_version_name='v0.1.0-pre', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='0.1.1-beta', - version_name='v0.1.1-beta', - previous_version='0.1.0-beta', - previous_version_name='v0.1.0-beta', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='0.1.1', - version_name='v0.1.1', - previous_version='0.1.0', - previous_version_name='v0.1.0', - tag_created=True - ) - - # Act - # Feature - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Fix - self.repo.checkout('main') - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Assert - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - def test_feat_then_feat(self) -> None: - """Test Case: Run the action after a ``feat:`` and another ``feat:`` commit.""" - # Arrange - # Feature 1 - args_feat1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat1_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat1_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat1_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat1_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat1_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Feature 2 - args_feat2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat2_release = ActionOutputs( - version='0.2.0-pre', - version_name='v0.2.0-pre', - previous_version='0.1.0-pre', - previous_version_name='v0.1.0-pre', - tag_created=True - ) - - args_feat2_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat2_beta = ActionOutputs( - version='0.2.0-beta', - version_name='v0.2.0-beta', - previous_version='0.1.0-beta', - previous_version_name='v0.1.0-beta', - tag_created=True - ) - - args_feat2_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True, - ) - - expected_output_feat2_prod = ActionOutputs( - version='0.2.0', - version_name='v0.2.0', - previous_version='0.1.0', - previous_version_name='v0.1.0', - tag_created=True - ) - - # Act - # Feature 1 - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat1_release = run_action(args_feat1_release) - tag_feat1_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat1_beta = run_action(args_feat1_beta) - tag_feat1_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat1_prod = run_action(args_feat1_prod) - tag_feat1_prod = self.repo.get_latest_tag_name() - - # Feature 2 - self.repo.checkout('main') - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat2_release = run_action(args_feat2_release) - tag_feat2_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat2_beta = run_action(args_feat2_beta) - tag_feat2_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat2_prod = run_action(args_feat2_prod) - tag_feat2_prod = self.repo.get_latest_tag_name() - - # Assert - # Feature 1 - self.assertEqual(expected_output_feat1_release, actual_output_feat1_release) - self.assertEqual(expected_output_feat1_release.version_name, tag_feat1_release) - - self.assertEqual(expected_output_feat1_beta, actual_output_feat1_beta) - self.assertEqual(expected_output_feat1_beta.version_name, tag_feat1_beta) - - self.assertEqual(expected_output_feat1_prod, actual_output_feat1_prod) - self.assertEqual(expected_output_feat1_prod.version_name, tag_feat1_prod) - - # Feature 2 - self.assertEqual(expected_output_feat2_release, actual_output_feat2_release) - self.assertEqual(expected_output_feat2_release.version_name, tag_feat2_release) - - self.assertEqual(expected_output_feat2_beta, actual_output_feat2_beta) - self.assertEqual(expected_output_feat2_beta.version_name, tag_feat2_beta) - - self.assertEqual(expected_output_feat2_prod, actual_output_feat2_prod) - self.assertEqual(expected_output_feat2_prod.version_name, tag_feat2_prod) - - def test_feat_then_breaking(self) -> None: - """Test Case: Run the action after a ``feat:`` and a ``feat!:`` commit.""" - # Arrange - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='0.1.0-beta', - version_name='v0.1.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='0.1.0-pre', - previous_version_name='v0.1.0-pre', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='0.1.0-beta', - previous_version_name='v0.1.0-beta', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='0.1.0', - previous_version_name='v0.1.0', - tag_created=True - ) - - # Act - # Feature - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Breaking - self.repo.checkout('main') - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Assert - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - def test_breaking_then_chore(self) -> None: - """Test Case: Run the action after a ``feat!:`` and a ``chore:`` commit.""" - # Arrange - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Chore - args_chore_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_chore_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='1.0.0-pre', - previous_version_name='v1.0.0-pre', - tag_created=False - ) - - args_chore_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_chore_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='1.0.0-beta', - previous_version_name='v1.0.0-beta', - tag_created=False - ) - - args_chore_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_chore_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='1.0.0', - previous_version_name='v1.0.0', - tag_created=False - ) - - # Act - # Breaking - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Chore - self.repo.checkout('main') - self.repo.commit(CommitMessages.CHORE) - - self.repo.merge('main', 'release') - actual_output_chore_release = run_action(args_chore_release) - tag_chore_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_chore_beta = run_action(args_chore_beta) - tag_chore_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_chore_prod = run_action(args_chore_prod) - tag_chore_prod = self.repo.get_latest_tag_name() - - # Assert - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - # Chore - self.assertEqual(expected_output_chore_release, actual_output_chore_release) - self.assertEqual(expected_output_breaking_prod.version_name, tag_chore_release) - - self.assertEqual(expected_output_chore_beta, actual_output_chore_beta) - self.assertEqual(expected_output_breaking_prod.version_name, tag_chore_beta) - - self.assertEqual(expected_output_chore_prod, actual_output_chore_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_chore_prod) - - def test_breaking_then_fix(self) -> None: - """Test Case: Run the action after a ``feat!:`` and a ``fix:`` commit.""" - # Arrange - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Fix - args_fix_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_fix_release = ActionOutputs( - version='1.0.1-pre', - version_name='v1.0.1-pre', - previous_version='1.0.0-pre', - previous_version_name='v1.0.0-pre', - tag_created=True - ) - - args_fix_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_fix_beta = ActionOutputs( - version='1.0.1-beta', - version_name='v1.0.1-beta', - previous_version='1.0.0-beta', - previous_version_name='v1.0.0-beta', - tag_created=True - ) - - args_fix_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_fix_prod = ActionOutputs( - version='1.0.1', - version_name='v1.0.1', - previous_version='1.0.0', - previous_version_name='v1.0.0', - tag_created=True - ) - - # Act - # Breaking - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Fix - self.repo.checkout('main') - self.repo.commit(CommitMessages.FIX) - - self.repo.merge('main', 'release') - actual_output_fix_release = run_action(args_fix_release) - tag_fix_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_fix_beta = run_action(args_fix_beta) - tag_fix_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_fix_prod = run_action(args_fix_prod) - tag_fix_prod = self.repo.get_latest_tag_name() - - # Assert - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - # Fix - self.assertEqual(expected_output_fix_release, actual_output_fix_release) - self.assertEqual(expected_output_fix_release.version_name, tag_fix_release) - - self.assertEqual(expected_output_fix_beta, actual_output_fix_beta) - self.assertEqual(expected_output_fix_beta.version_name, tag_fix_beta) - - self.assertEqual(expected_output_fix_prod, actual_output_fix_prod) - self.assertEqual(expected_output_fix_prod.version_name, tag_fix_prod) - - def test_breaking_then_feat(self) -> None: - """Test Case: Run the action after a ``feat!:`` and a ``feat:`` commit.""" - # Arrange - # Breaking - args_breaking_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Feature - args_feat_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_feat_release = ActionOutputs( - version='1.1.0-pre', - version_name='v1.1.0-pre', - previous_version='1.0.0-pre', - previous_version_name='v1.0.0-pre', - tag_created=True - ) - - args_feat_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_feat_beta = ActionOutputs( - version='1.1.0-beta', - version_name='v1.1.0-beta', - previous_version='1.0.0-beta', - previous_version_name='v1.0.0-beta', - tag_created=True - ) - - args_feat_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_feat_prod = ActionOutputs( - version='1.1.0', - version_name='v1.1.0', - previous_version='1.0.0', - previous_version_name='v1.0.0', - tag_created=True - ) - - # Act - # Breaking - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking_release = run_action(args_breaking_release) - tag_breaking_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking_beta = run_action(args_breaking_beta) - tag_breaking_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking_prod = run_action(args_breaking_prod) - tag_breaking_prod = self.repo.get_latest_tag_name() - - # Feature - self.repo.checkout('main') - self.repo.commit(CommitMessages.FEATURE) - - self.repo.merge('main', 'release') - actual_output_feat_release = run_action(args_feat_release) - tag_feat_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_feat_beta = run_action(args_feat_beta) - tag_feat_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_feat_prod = run_action(args_feat_prod) - tag_feat_prod = self.repo.get_latest_tag_name() - - # Assert - # Breaking - self.assertEqual(expected_output_breaking_release, actual_output_breaking_release) - self.assertEqual(expected_output_breaking_release.version_name, tag_breaking_release) - - self.assertEqual(expected_output_breaking_beta, actual_output_breaking_beta) - self.assertEqual(expected_output_breaking_beta.version_name, tag_breaking_beta) - - self.assertEqual(expected_output_breaking_prod, actual_output_breaking_prod) - self.assertEqual(expected_output_breaking_prod.version_name, tag_breaking_prod) - - # Feature - self.assertEqual(expected_output_feat_release, actual_output_feat_release) - self.assertEqual(expected_output_feat_release.version_name, tag_feat_release) - - self.assertEqual(expected_output_feat_beta, actual_output_feat_beta) - self.assertEqual(expected_output_feat_beta.version_name, tag_feat_beta) - - self.assertEqual(expected_output_feat_prod, actual_output_feat_prod) - self.assertEqual(expected_output_feat_prod.version_name, tag_feat_prod) - - def test_breaking_then_breaking(self) -> None: - """Test Case: Run the action after a ``feat!:`` and another ``feat!:`` commit.""" - # Arrange - # Breaking 1 - args_breaking1_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking1_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking1_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking1_beta = ActionOutputs( - version='1.0.0-beta', - version_name='v1.0.0-beta', - previous_version='', - previous_version_name='', - tag_created=True - ) - - args_breaking1_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking1_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True - ) - - # Breaking 2 - args_breaking2_release = ActionInputs( - prefix='v', - suffix='pre', - reference_version_suffix=None, - create_tag=True - ) - - expected_output_breaking2_release = ActionOutputs( - version='2.0.0-pre', - version_name='v2.0.0-pre', - previous_version='1.0.0-pre', - previous_version_name='v1.0.0-pre', - tag_created=True - ) - - args_breaking2_beta = ActionInputs( - prefix='v', - suffix='beta', - only_bump_suffix=True, - reference_version_suffix='pre', - create_tag=True - ) - - expected_output_breaking2_beta = ActionOutputs( - version='2.0.0-beta', - version_name='v2.0.0-beta', - previous_version='1.0.0-beta', - previous_version_name='v1.0.0-beta', - tag_created=True - ) - - args_breaking2_prod = ActionInputs( - prefix='v', - suffix=None, - only_bump_suffix=True, - reference_version_suffix='beta', - create_tag=True - ) - - expected_output_breaking2_prod = ActionOutputs( - version='2.0.0', - version_name='v2.0.0', - previous_version='1.0.0', - previous_version_name='v1.0.0', - tag_created=True - ) - - # Act - # Breaking 1 - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking1_release = run_action(args_breaking1_release) - tag_breaking1_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking1_beta = run_action(args_breaking1_beta) - tag_breaking1_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking1_prod = run_action(args_breaking1_prod) - tag_breaking1_prod = self.repo.get_latest_tag_name() - - # Breaking 2 - self.repo.checkout('main') - self.repo.commit(CommitMessages.BREAKING_FEATURE) - - self.repo.merge('main', 'release') - actual_output_breaking2_release = run_action(args_breaking2_release) - tag_breaking2_release = self.repo.get_latest_tag_name() - - self.repo.merge('release', 'release-beta') - actual_output_breaking2_beta = run_action(args_breaking2_beta) - tag_breaking2_beta = self.repo.get_latest_tag_name() - - self.repo.merge('release-beta', 'release-prod') - actual_output_breaking2_prod = run_action(args_breaking2_prod) - tag_breaking2_prod = self.repo.get_latest_tag_name() - - # Assert - # Breaking 1 - self.assertEqual(expected_output_breaking1_release, actual_output_breaking1_release) - self.assertEqual(expected_output_breaking1_release.version_name, tag_breaking1_release) - - self.assertEqual(expected_output_breaking1_beta, actual_output_breaking1_beta) - self.assertEqual(expected_output_breaking1_beta.version_name, tag_breaking1_beta) - - self.assertEqual(expected_output_breaking1_prod, actual_output_breaking1_prod) - self.assertEqual(expected_output_breaking1_prod.version_name, tag_breaking1_prod) - - # Breaking 2 - self.assertEqual(expected_output_breaking2_release, actual_output_breaking2_release) - self.assertEqual(expected_output_breaking2_release.version_name, tag_breaking2_release) - - self.assertEqual(expected_output_breaking2_beta, actual_output_breaking2_beta) - self.assertEqual(expected_output_breaking2_beta.version_name, tag_breaking2_beta) - - self.assertEqual(expected_output_breaking2_prod, actual_output_breaking2_prod) - self.assertEqual(expected_output_breaking2_prod.version_name, tag_breaking2_prod) - - -if __name__ == '__main__': - unittest.main() +from assertpy import assert_that + +from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action + + +def test_chore_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and another ``chore:`` commit.""" + # Arrange + # Chore 1 + args_chore1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore1_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore1_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore1_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore1_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore1_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Chore 2 + args_chore2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore2_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore2_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore2_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore2_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore2_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Act + # Chore 1 + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore1_release = run_action(args_chore1_release) + tag_chore1_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore1_beta = run_action(args_chore1_beta) + tag_chore1_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore1_prod = run_action(args_chore1_prod) + tag_chore1_prod = repo.get_latest_tag_name() + + # Chore 2 + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore2_release = run_action(args_chore2_release) + tag_chore2_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore2_beta = run_action(args_chore2_beta) + tag_chore2_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore2_prod = run_action(args_chore2_prod) + tag_chore2_prod = repo.get_latest_tag_name() + + # Assert + # Chore 1 + assert_that(actual_output_chore1_release).is_equal_to(expected_output_chore1_release) + assert_that(tag_chore1_release).is_none() + + assert_that(actual_output_chore1_beta).is_equal_to(expected_output_chore1_beta) + assert_that(tag_chore1_beta).is_none() + + assert_that(actual_output_chore1_prod).is_equal_to(expected_output_chore1_prod) + assert_that(tag_chore1_prod).is_none() + + # Chore 2 + assert_that(actual_output_chore2_release).is_equal_to(expected_output_chore2_release) + assert_that(tag_chore2_release).is_none() + + assert_that(actual_output_chore2_beta).is_equal_to(expected_output_chore2_beta) + assert_that(tag_chore2_beta).is_none() + + assert_that(actual_output_chore2_prod).is_equal_to(expected_output_chore2_prod) + assert_that(tag_chore2_prod).is_none() + + +def test_chore_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and a ``fix:`` commit.""" + # Arrange + # Chore + args_chore_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + # Chore + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore_release = run_action(args_chore_release) + tag_chore_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore_beta = run_action(args_chore_beta) + tag_chore_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore_prod = run_action(args_chore_prod) + tag_chore_prod = repo.get_latest_tag_name() + + # Fix + repo.checkout('main') + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Assert + # Chore + assert_that(actual_output_chore_release).is_equal_to(expected_output_chore_release) + assert_that(tag_chore_release).is_none() + + assert_that(actual_output_chore_beta).is_equal_to(expected_output_chore_beta) + assert_that(tag_chore_beta).is_none() + + assert_that(actual_output_chore_prod).is_equal_to(expected_output_chore_prod) + assert_that(tag_chore_prod).is_none() + + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + +def test_chore_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and a ``feat:`` commit.""" + # Arrange + # Chore + args_chore_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + # Chore + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore_release = run_action(args_chore_release) + tag_chore_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore_beta = run_action(args_chore_beta) + tag_chore_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore_prod = run_action(args_chore_prod) + tag_chore_prod = repo.get_latest_tag_name() + + # Feature + repo.checkout('main') + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Assert + # Chore + assert_that(actual_output_chore_release).is_equal_to(expected_output_chore_release) + assert_that(tag_chore_release).is_none() + + assert_that(actual_output_chore_beta).is_equal_to(expected_output_chore_beta) + assert_that(tag_chore_beta).is_none() + + assert_that(actual_output_chore_prod).is_equal_to(expected_output_chore_prod) + assert_that(tag_chore_prod).is_none() + + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + +def test_chore_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``chore:`` and a ``feat!:`` commit.""" + # Arrange + # Chore + args_chore_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore_release = ActionOutputs( + version='0.0.0-pre', + version_name='v0.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore_beta = ActionOutputs( + version='0.0.0-beta', + version_name='v0.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=False + ) + + args_chore_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore_prod = ActionOutputs( + version='0.0.0', + version_name='v0.0.0', + previous_version='', + previous_version_name='', + tag_created=False + ) + + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Act + # Chore + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore_release = run_action(args_chore_release) + tag_chore_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore_beta = run_action(args_chore_beta) + tag_chore_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore_prod = run_action(args_chore_prod) + tag_chore_prod = repo.get_latest_tag_name() + + # Breaking + repo.checkout('main') + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Assert + # Chore + assert_that(actual_output_chore_release).is_equal_to(expected_output_chore_release) + assert_that(tag_chore_release).is_none() + + assert_that(actual_output_chore_beta).is_equal_to(expected_output_chore_beta) + assert_that(tag_chore_beta).is_none() + + assert_that(actual_output_chore_prod).is_equal_to(expected_output_chore_prod) + assert_that(tag_chore_prod).is_none() + + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + +def test_fix_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and a ``chore:`` commit.""" + # Arrange + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Chore + args_chore_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=False + ) + + args_chore_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=False + ) + + args_chore_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=False + ) + + # Act + # Fix + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Chore + repo.checkout('main') + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore_release = run_action(args_chore_release) + tag_chore_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore_beta = run_action(args_chore_beta) + tag_chore_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore_prod = run_action(args_chore_prod) + tag_chore_prod = repo.get_latest_tag_name() + + # Assert + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + # Chore + assert_that(actual_output_chore_release).is_equal_to(expected_output_chore_release) + assert_that(tag_chore_release).is_equal_to(expected_output_fix_prod.version_name) + + assert_that(actual_output_chore_beta).is_equal_to(expected_output_chore_beta) + assert_that(tag_chore_beta).is_equal_to(expected_output_fix_prod.version_name) + + assert_that(actual_output_chore_prod).is_equal_to(expected_output_chore_prod) + assert_that(tag_chore_prod).is_equal_to(expected_output_fix_prod.version_name) + + +def test_fix_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and another ``fix:`` commit.""" + # Arrange + # Fix 1 + args_fix1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix1_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix1_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix1_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix1_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix1_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Fix 2 + args_fix2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix2_release = ActionOutputs( + version='0.0.2-pre', + version_name='v0.0.2-pre', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_fix2_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix2_beta = ActionOutputs( + version='0.0.2-beta', + version_name='v0.0.2-beta', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_fix2_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix2_prod = ActionOutputs( + version='0.0.2', + version_name='v0.0.2', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Act + # Fix 1 + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix1_release = run_action(args_fix1_release) + tag_fix1_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix1_beta = run_action(args_fix1_beta) + tag_fix1_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix1_prod = run_action(args_fix1_prod) + tag_fix1_prod = repo.get_latest_tag_name() + + # Fix 2 + repo.checkout('main') + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix2_release = run_action(args_fix2_release) + tag_fix2_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix2_beta = run_action(args_fix2_beta) + tag_fix2_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix2_prod = run_action(args_fix2_prod) + tag_fix2_prod = repo.get_latest_tag_name() + + # Assert + # Fix 1 + assert_that(actual_output_fix1_release).is_equal_to(expected_output_fix1_release) + assert_that(tag_fix1_release).is_equal_to(expected_output_fix1_release.version_name) + + assert_that(actual_output_fix1_beta).is_equal_to(expected_output_fix1_beta) + assert_that(tag_fix1_beta).is_equal_to(expected_output_fix1_beta.version_name) + + assert_that(actual_output_fix1_prod).is_equal_to(expected_output_fix1_prod) + assert_that(tag_fix1_prod).is_equal_to(expected_output_fix1_prod.version_name) + + # Fix 2 + assert_that(actual_output_fix2_release).is_equal_to(expected_output_fix2_release) + assert_that(tag_fix2_release).is_equal_to(expected_output_fix2_release.version_name) + + assert_that(actual_output_fix2_beta).is_equal_to(expected_output_fix2_beta) + assert_that(tag_fix2_beta).is_equal_to(expected_output_fix2_beta.version_name) + + assert_that(actual_output_fix2_prod).is_equal_to(expected_output_fix2_prod) + assert_that(tag_fix2_prod).is_equal_to(expected_output_fix2_prod.version_name) + + +def test_fix_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and a ``feat:`` commit.""" + # Arrange + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Act + # Fix + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Feature + repo.checkout('main') + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Assert + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + +def test_fix_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``fix:`` and a ``feat!:`` commit.""" + # Arrange + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.0.1-pre', + version_name='v0.0.1-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.0.1-beta', + version_name='v0.0.1-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.0.1', + version_name='v0.0.1', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='0.0.1-pre', + previous_version_name='v0.0.1-pre', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='0.0.1-beta', + previous_version_name='v0.0.1-beta', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='0.0.1', + previous_version_name='v0.0.1', + tag_created=True + ) + + # Act + # Fix + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Breaking + repo.checkout('main') + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Assert + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + +def test_feat_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and a ``chore:`` commit.""" + # Arrange + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Chore + args_chore_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='0.1.0-pre', + previous_version_name='v0.1.0-pre', + tag_created=False + ) + + args_chore_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='0.1.0-beta', + previous_version_name='v0.1.0-beta', + tag_created=False + ) + + args_chore_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='0.1.0', + previous_version_name='v0.1.0', + tag_created=False + ) + + # Act + # Feature + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Chore + repo.checkout('main') + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore_release = run_action(args_chore_release) + tag_chore_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore_beta = run_action(args_chore_beta) + tag_chore_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore_prod = run_action(args_chore_prod) + tag_chore_prod = repo.get_latest_tag_name() + + # Assert + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + # Chore + assert_that(actual_output_chore_release).is_equal_to(expected_output_chore_release) + assert_that(tag_chore_release).is_equal_to(expected_output_feat_prod.version_name) + + assert_that(actual_output_chore_beta).is_equal_to(expected_output_chore_beta) + assert_that(tag_chore_beta).is_equal_to(expected_output_feat_prod.version_name) + + assert_that(actual_output_chore_prod).is_equal_to(expected_output_chore_prod) + assert_that(tag_chore_prod).is_equal_to(expected_output_feat_prod.version_name) + + +def test_feat_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and a ``fix:`` commit.""" + # Arrange + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='0.1.1-pre', + version_name='v0.1.1-pre', + previous_version='0.1.0-pre', + previous_version_name='v0.1.0-pre', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='0.1.1-beta', + version_name='v0.1.1-beta', + previous_version='0.1.0-beta', + previous_version_name='v0.1.0-beta', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='0.1.1', + version_name='v0.1.1', + previous_version='0.1.0', + previous_version_name='v0.1.0', + tag_created=True + ) + + # Act + # Feature + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Fix + repo.checkout('main') + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Assert + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + +def test_feat_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and another ``feat:`` commit.""" + # Arrange + # Feature 1 + args_feat1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat1_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat1_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat1_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat1_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat1_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Feature 2 + args_feat2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat2_release = ActionOutputs( + version='0.2.0-pre', + version_name='v0.2.0-pre', + previous_version='0.1.0-pre', + previous_version_name='v0.1.0-pre', + tag_created=True + ) + + args_feat2_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat2_beta = ActionOutputs( + version='0.2.0-beta', + version_name='v0.2.0-beta', + previous_version='0.1.0-beta', + previous_version_name='v0.1.0-beta', + tag_created=True + ) + + args_feat2_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True, + ) + + expected_output_feat2_prod = ActionOutputs( + version='0.2.0', + version_name='v0.2.0', + previous_version='0.1.0', + previous_version_name='v0.1.0', + tag_created=True + ) + + # Act + # Feature 1 + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat1_release = run_action(args_feat1_release) + tag_feat1_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat1_beta = run_action(args_feat1_beta) + tag_feat1_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat1_prod = run_action(args_feat1_prod) + tag_feat1_prod = repo.get_latest_tag_name() + + # Feature 2 + repo.checkout('main') + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat2_release = run_action(args_feat2_release) + tag_feat2_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat2_beta = run_action(args_feat2_beta) + tag_feat2_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat2_prod = run_action(args_feat2_prod) + tag_feat2_prod = repo.get_latest_tag_name() + + # Assert + # Feature 1 + assert_that(actual_output_feat1_release).is_equal_to(expected_output_feat1_release) + assert_that(tag_feat1_release).is_equal_to(expected_output_feat1_release.version_name) + + assert_that(actual_output_feat1_beta).is_equal_to(expected_output_feat1_beta) + assert_that(tag_feat1_beta).is_equal_to(expected_output_feat1_beta.version_name) + + assert_that(actual_output_feat1_prod).is_equal_to(expected_output_feat1_prod) + assert_that(tag_feat1_prod).is_equal_to(expected_output_feat1_prod.version_name) + + # Feature 2 + assert_that(actual_output_feat2_release).is_equal_to(expected_output_feat2_release) + assert_that(tag_feat2_release).is_equal_to(expected_output_feat2_release.version_name) + + assert_that(actual_output_feat2_beta).is_equal_to(expected_output_feat2_beta) + assert_that(tag_feat2_beta).is_equal_to(expected_output_feat2_beta.version_name) + + assert_that(actual_output_feat2_prod).is_equal_to(expected_output_feat2_prod) + assert_that(tag_feat2_prod).is_equal_to(expected_output_feat2_prod.version_name) + + +def test_feat_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat:`` and a ``feat!:`` commit.""" + # Arrange + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='0.1.0-pre', + version_name='v0.1.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='0.1.0-beta', + version_name='v0.1.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='0.1.0', + version_name='v0.1.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='0.1.0-pre', + previous_version_name='v0.1.0-pre', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='0.1.0-beta', + previous_version_name='v0.1.0-beta', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='0.1.0', + previous_version_name='v0.1.0', + tag_created=True + ) + + # Act + # Feature + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Breaking + repo.checkout('main') + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Assert + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + +def test_breaking_then_chore(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and a ``chore:`` commit.""" + # Arrange + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Chore + args_chore_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_chore_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='1.0.0-pre', + previous_version_name='v1.0.0-pre', + tag_created=False + ) + + args_chore_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_chore_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='1.0.0-beta', + previous_version_name='v1.0.0-beta', + tag_created=False + ) + + args_chore_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_chore_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='1.0.0', + previous_version_name='v1.0.0', + tag_created=False + ) + + # Act + # Breaking + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Chore + repo.checkout('main') + repo.commit(CommitMessages.CHORE) + + repo.merge('main', 'release') + actual_output_chore_release = run_action(args_chore_release) + tag_chore_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_chore_beta = run_action(args_chore_beta) + tag_chore_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_chore_prod = run_action(args_chore_prod) + tag_chore_prod = repo.get_latest_tag_name() + + # Assert + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + # Chore + assert_that(actual_output_chore_release).is_equal_to(expected_output_chore_release) + assert_that(tag_chore_release).is_equal_to(expected_output_breaking_prod.version_name) + + assert_that(actual_output_chore_beta).is_equal_to(expected_output_chore_beta) + assert_that(tag_chore_beta).is_equal_to(expected_output_breaking_prod.version_name) + + assert_that(actual_output_chore_prod).is_equal_to(expected_output_chore_prod) + assert_that(tag_chore_prod).is_equal_to(expected_output_breaking_prod.version_name) + + +def test_breaking_then_fix(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and a ``fix:`` commit.""" + # Arrange + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Fix + args_fix_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_fix_release = ActionOutputs( + version='1.0.1-pre', + version_name='v1.0.1-pre', + previous_version='1.0.0-pre', + previous_version_name='v1.0.0-pre', + tag_created=True + ) + + args_fix_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_fix_beta = ActionOutputs( + version='1.0.1-beta', + version_name='v1.0.1-beta', + previous_version='1.0.0-beta', + previous_version_name='v1.0.0-beta', + tag_created=True + ) + + args_fix_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_fix_prod = ActionOutputs( + version='1.0.1', + version_name='v1.0.1', + previous_version='1.0.0', + previous_version_name='v1.0.0', + tag_created=True + ) + + # Act + # Breaking + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Fix + repo.checkout('main') + repo.commit(CommitMessages.FIX) + + repo.merge('main', 'release') + actual_output_fix_release = run_action(args_fix_release) + tag_fix_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_fix_beta = run_action(args_fix_beta) + tag_fix_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_fix_prod = run_action(args_fix_prod) + tag_fix_prod = repo.get_latest_tag_name() + + # Assert + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + # Fix + assert_that(actual_output_fix_release).is_equal_to(expected_output_fix_release) + assert_that(tag_fix_release).is_equal_to(expected_output_fix_release.version_name) + + assert_that(actual_output_fix_beta).is_equal_to(expected_output_fix_beta) + assert_that(tag_fix_beta).is_equal_to(expected_output_fix_beta.version_name) + + assert_that(actual_output_fix_prod).is_equal_to(expected_output_fix_prod) + assert_that(tag_fix_prod).is_equal_to(expected_output_fix_prod.version_name) + + +def test_breaking_then_feat(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and a ``feat:`` commit.""" + # Arrange + # Breaking + args_breaking_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Feature + args_feat_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_feat_release = ActionOutputs( + version='1.1.0-pre', + version_name='v1.1.0-pre', + previous_version='1.0.0-pre', + previous_version_name='v1.0.0-pre', + tag_created=True + ) + + args_feat_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_feat_beta = ActionOutputs( + version='1.1.0-beta', + version_name='v1.1.0-beta', + previous_version='1.0.0-beta', + previous_version_name='v1.0.0-beta', + tag_created=True + ) + + args_feat_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_feat_prod = ActionOutputs( + version='1.1.0', + version_name='v1.1.0', + previous_version='1.0.0', + previous_version_name='v1.0.0', + tag_created=True + ) + + # Act + # Breaking + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking_release = run_action(args_breaking_release) + tag_breaking_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking_beta = run_action(args_breaking_beta) + tag_breaking_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking_prod = run_action(args_breaking_prod) + tag_breaking_prod = repo.get_latest_tag_name() + + # Feature + repo.checkout('main') + repo.commit(CommitMessages.FEATURE) + + repo.merge('main', 'release') + actual_output_feat_release = run_action(args_feat_release) + tag_feat_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_feat_beta = run_action(args_feat_beta) + tag_feat_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_feat_prod = run_action(args_feat_prod) + tag_feat_prod = repo.get_latest_tag_name() + + # Assert + # Breaking + assert_that(actual_output_breaking_release).is_equal_to(expected_output_breaking_release) + assert_that(tag_breaking_release).is_equal_to(expected_output_breaking_release.version_name) + + assert_that(actual_output_breaking_beta).is_equal_to(expected_output_breaking_beta) + assert_that(tag_breaking_beta).is_equal_to(expected_output_breaking_beta.version_name) + + assert_that(actual_output_breaking_prod).is_equal_to(expected_output_breaking_prod) + assert_that(tag_breaking_prod).is_equal_to(expected_output_breaking_prod.version_name) + + # Feature + assert_that(actual_output_feat_release).is_equal_to(expected_output_feat_release) + assert_that(tag_feat_release).is_equal_to(expected_output_feat_release.version_name) + + assert_that(actual_output_feat_beta).is_equal_to(expected_output_feat_beta) + assert_that(tag_feat_beta).is_equal_to(expected_output_feat_beta.version_name) + + assert_that(actual_output_feat_prod).is_equal_to(expected_output_feat_prod) + assert_that(tag_feat_prod).is_equal_to(expected_output_feat_prod.version_name) + + +def test_breaking_then_breaking(repo: TestRepo) -> None: + """Test Case: Run the action after a ``feat!:`` and another ``feat!:`` commit.""" + # Arrange + # Breaking 1 + args_breaking1_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking1_release = ActionOutputs( + version='1.0.0-pre', + version_name='v1.0.0-pre', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking1_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking1_beta = ActionOutputs( + version='1.0.0-beta', + version_name='v1.0.0-beta', + previous_version='', + previous_version_name='', + tag_created=True + ) + + args_breaking1_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking1_prod = ActionOutputs( + version='1.0.0', + version_name='v1.0.0', + previous_version='', + previous_version_name='', + tag_created=True + ) + + # Breaking 2 + args_breaking2_release = ActionInputs( + prefix='v', + suffix='pre', + reference_version_suffix=None, + create_tag=True + ) + + expected_output_breaking2_release = ActionOutputs( + version='2.0.0-pre', + version_name='v2.0.0-pre', + previous_version='1.0.0-pre', + previous_version_name='v1.0.0-pre', + tag_created=True + ) + + args_breaking2_beta = ActionInputs( + prefix='v', + suffix='beta', + only_bump_suffix=True, + reference_version_suffix='pre', + create_tag=True + ) + + expected_output_breaking2_beta = ActionOutputs( + version='2.0.0-beta', + version_name='v2.0.0-beta', + previous_version='1.0.0-beta', + previous_version_name='v1.0.0-beta', + tag_created=True + ) + + args_breaking2_prod = ActionInputs( + prefix='v', + suffix=None, + only_bump_suffix=True, + reference_version_suffix='beta', + create_tag=True + ) + + expected_output_breaking2_prod = ActionOutputs( + version='2.0.0', + version_name='v2.0.0', + previous_version='1.0.0', + previous_version_name='v1.0.0', + tag_created=True + ) + + # Act + # Breaking 1 + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking1_release = run_action(args_breaking1_release) + tag_breaking1_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking1_beta = run_action(args_breaking1_beta) + tag_breaking1_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking1_prod = run_action(args_breaking1_prod) + tag_breaking1_prod = repo.get_latest_tag_name() + + # Breaking 2 + repo.checkout('main') + repo.commit(CommitMessages.BREAKING_FEATURE) + + repo.merge('main', 'release') + actual_output_breaking2_release = run_action(args_breaking2_release) + tag_breaking2_release = repo.get_latest_tag_name() + + repo.merge('release', 'release-beta') + actual_output_breaking2_beta = run_action(args_breaking2_beta) + tag_breaking2_beta = repo.get_latest_tag_name() + + repo.merge('release-beta', 'release-prod') + actual_output_breaking2_prod = run_action(args_breaking2_prod) + tag_breaking2_prod = repo.get_latest_tag_name() + + # Assert + # Breaking 1 + assert_that(actual_output_breaking1_release).is_equal_to(expected_output_breaking1_release) + assert_that(tag_breaking1_release).is_equal_to(expected_output_breaking1_release.version_name) + + assert_that(actual_output_breaking1_beta).is_equal_to(expected_output_breaking1_beta) + assert_that(tag_breaking1_beta).is_equal_to(expected_output_breaking1_beta.version_name) + + assert_that(actual_output_breaking1_prod).is_equal_to(expected_output_breaking1_prod) + assert_that(tag_breaking1_prod).is_equal_to(expected_output_breaking1_prod.version_name) + + # Breaking 2 + assert_that(actual_output_breaking2_release).is_equal_to(expected_output_breaking2_release) + assert_that(tag_breaking2_release).is_equal_to(expected_output_breaking2_release.version_name) + + assert_that(actual_output_breaking2_beta).is_equal_to(expected_output_breaking2_beta) + assert_that(tag_breaking2_beta).is_equal_to(expected_output_breaking2_beta.version_name) + + assert_that(actual_output_breaking2_prod).is_equal_to(expected_output_breaking2_prod) + assert_that(tag_breaking2_prod).is_equal_to(expected_output_breaking2_prod.version_name) diff --git a/tests/e2e/test_utils/__init__.py b/tests/e2e/test_utils/__init__.py index b2685e1..2b460f2 100644 --- a/tests/e2e/test_utils/__init__.py +++ b/tests/e2e/test_utils/__init__.py @@ -1,8 +1,8 @@ """Utilities.""" -from get_release_version_action import main as run_action, Inputs as ActionInputs, Outputs as ActionOutputs - +from get_release_version_action import Inputs as ActionInputs, Outputs as ActionOutputs, main as run_action +from .logger import IndentLoggingFormatter, setup_logging from .test_repo import CommitMessages, GitBranchNotFoundError, TestRepo -from .logger import setup_logging, IndentLoggingFormatter +from .fixtures import repo, logging __all__ = [ 'ActionInputs', @@ -12,5 +12,7 @@ 'GitBranchNotFoundError', 'TestRepo', 'setup_logging', - 'IndentLoggingFormatter' + 'IndentLoggingFormatter', + 'repo', + 'fixtures' ] diff --git a/tests/e2e/test_utils/fixtures.py b/tests/e2e/test_utils/fixtures.py new file mode 100644 index 0000000..4c895a8 --- /dev/null +++ b/tests/e2e/test_utils/fixtures.py @@ -0,0 +1,26 @@ +"""Common fixtures for all tests.""" +from collections.abc import Generator +from pathlib import Path + +from pytest import fixture + +from .logger import setup_logging +from .test_repo import TestRepo + +__all__ = [ + 'logging', + 'repo' +] + + +@fixture(scope='module', autouse=True) +def logging() -> None: + """Setup logging.""" + setup_logging() + + +@fixture +def repo(tmp_path: Path) -> Generator[TestRepo, None, None]: + """Create a new test git repository.""" + with TestRepo(tmp_path) as test_repo: + yield test_repo diff --git a/tests/e2e/test_utils/logger.py b/tests/e2e/test_utils/logger.py index 6f39f87..d453a32 100644 --- a/tests/e2e/test_utils/logger.py +++ b/tests/e2e/test_utils/logger.py @@ -15,6 +15,7 @@ class IndentLoggingFormatter(logging.Formatter): """Logging formatter to indent multiline messages.""" + def __init__(self, fmt: str | None) -> None: super().__init__(fmt) diff --git a/tests/e2e/test_utils/test_repo.py b/tests/e2e/test_utils/test_repo.py index b99b0fe..d58a96f 100644 --- a/tests/e2e/test_utils/test_repo.py +++ b/tests/e2e/test_utils/test_repo.py @@ -5,15 +5,14 @@ import os from enum import StrEnum from pathlib import Path -from tempfile import TemporaryDirectory +from time import sleep from typing import Any from uuid import uuid4 -from time import sleep - -from get_release_version_action.utils.git import tag_creation_history from git import Commit, Repo +from get_release_version_action.utils.git import tag_creation_history + TESTING_TIMEOUT = 1 """ Timeout in seconds for waiting for git operations to ensure that we don't have multiple operations for the same second. @@ -43,22 +42,17 @@ class CommitMessages(StrEnum): class TestRepo: """Wrapper around the ``git.Repo`` class that implements specific methods for unit testing.""" - tempdir: TemporaryDirectory + path: Path repo: Repo - def __init__(self, *, keep_repository_dir: bool = False) -> None: + def __init__(self, path: Path) -> None: """ Wrapper around the ``git.Repo`` class that implements specific methods for unit testing. - This creates a new git repo in a temporary directory, makes an initial README commit to the ``main`` branch + This creates a new git repo in the given directory, makes an initial README commit to the ``main`` branch and creates 3 branches called ``release``, ``release-beta`` and ``release-prod``. """ - self.tempdir = TemporaryDirectory( - prefix='wemogy.get-release-version-action.tests', - ignore_cleanup_errors=True, - delete=not keep_repository_dir, - dir=Path(os.getcwd()) / '.working-directory' - ) + self.path = path logger.info('Creating git repository in directory %s', self.path) os.chdir(self.path) @@ -84,11 +78,6 @@ def __enter__(self) -> TestRepo: def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None: self.close() - @property - def path(self) -> Path: - """Get the path of the temporary directory.""" - return Path(self.tempdir.name) - def close(self) -> None: """Close the ``git.Repo`` object.""" self.repo.close() @@ -154,8 +143,10 @@ def cherrypick(self, commit: Commit, dest_branch_name: str) -> None: :param dest_branch_name: The branch name to cherrypick onto. :raises GitBranchNotFoundError: If the branch was not found. """ - logger.info('Cherrypicking commit %s (%s) into branch %s', - commit.message, commit.hexsha, dest_branch_name) + logger.info( + 'Cherrypicking commit %s (%s) into branch %s', + commit.message, commit.hexsha, dest_branch_name + ) self.checkout(dest_branch_name) self.repo.git.cherry_pick(commit.hexsha)