Пример #1
0
    def test_given_git_url_https_given_config_username_and_given_password_in_url(
            self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'url' in key:
                return 'https://*****:*****@mock.xyz/mock.git'
            if 'username' in key:
                return 'mock-config-user'

        mock_get_value.side_effect = mock_get_value_side_effect

        # run test
        actual_git_url1 = step_implementer.git_url
        actual_git_url2 = step_implementer.git_url

        # validate
        self.assertEqual(
            actual_git_url1,
            'https://*****:*****@mock.xyz/mock.git')
        self.assertEqual(actual_git_url1, actual_git_url2)
        mock_git_repo.assert_not_called()
Пример #2
0
    def test_fail(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'git-commit-message' in key:
                return 'mock commit message'

        mock_get_value.side_effect = mock_get_value_side_effect
        mock_git_repo.git.commit.side_effect = GitCommandError('mock error')
        type(mock_git_repo.active_branch).name = PropertyMock(
            return_value='mock-branch')

        # run test
        with self.assertRaisesRegex(
                StepRunnerException,
                r"Error committing changes to current branch \(mock-branch\): Cmd\('mock'\)"
                r" failed!\s*cmdline: mock error"):
            step_implementer.git_commit_changes()

        # validate
        mock_git_repo.git.commit.assert_called_with('-am',
                                                    'mock commit message')
Пример #3
0
    def test_given_git_user_name_and_given_git_user_email(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'git-user-name' in key:
                return 'mock-git-user'
            if 'git-user-email' in key:
                return '*****@*****.**'

        mock_get_value.side_effect = mock_get_value_side_effect

        # run test
        step_implementer.configure_git_user()

        # validate
        mock_git_repo.config_writer().set_value.assert_has_calls([
            call('user', 'name', 'mock-git-user'),
            call().release(),
            call('user', 'email', '*****@*****.**'),
            call().release()
        ])
Пример #4
0
    def test_success(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # run test
        step_implementer.git_tag(git_tag_value='v0.42.0-mock')

        # validate
        mock_git_repo.create_tag.assert_called_once_with('v0.42.0-mock',
                                                         force=True)
Пример #5
0
    def test_success(self, mock_git_url, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_git_url.return_value = 'mock-url'

        # run test
        step_implementer.git_push_tags()

        # validate
        mock_git_repo.git.push.assert_called_with('mock-url', '--tag')
Пример #6
0
    def test_success_utc_timezone(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # setup mock
        mock_git_repo.commit().committed_datetime = datetime(
            2022, 1, 18, 16, 12, 5, tzinfo=timezone.utc)

        # run test
        actual_timestamp = step_implementer.git_commit_utc_timestamp()

        # validate
        self.assertEqual(actual_timestamp, 1642522325.0)
Пример #7
0
    def test_not_dirty(self, mock_git_push, mock_git_commit_changes,
                       mock_configure_git_user, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_git_repo.is_dirty.return_value = False

        # run test
        step_implementer.commit_changes_and_push()

        # validate
        mock_configure_git_user.assert_not_called()
        mock_git_commit_changes.assert_not_called()
        mock_git_push.assert_not_called()
Пример #8
0
    def test_fail(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # setup mock
        mock_git_repo.create_tag.side_effect = GitCommandError('mock error')

        # run test
        with self.assertRaisesRegex(
                StepRunnerException,
                r"Error creating git tag \(v0.42.0-mock\): Cmd\('mock'\) failed!\s*cmdline: mock error"
        ):
            step_implementer.git_tag(git_tag_value='v0.42.0-mock')

        # validate
        mock_git_repo.create_tag.assert_called_once_with('v0.42.0-mock',
                                                         force=True)
Пример #9
0
    def test_fail(self, mock_git_url, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_git_url.return_value = 'mock-url'
        type(mock_git_repo.active_branch).name = PropertyMock(
            return_value='mock-branch')
        mock_git_repo.git.push.side_effect = GitCommandError('mock error')

        # run test
        with self.assertRaisesRegex(
                StepRunnerException,
                r"Error pushing tags to remote \(mock-url\) on current branch \(mock-branch\):"
                r" Cmd\('mock'\) failed!\s*cmdline: mock error"):
            step_implementer.git_push_tags()

        # validate
        mock_git_repo.git.push.assert_called_with('mock-url', '--tag')
Пример #10
0
 def test_results(self):
     defaults = GitMixin.step_implementer_config_defaults()
     expected_defaults = {
         'git-repo-root': './',
         'git-commit-message': 'Automated commit of changes during release engineering' \
             ' generate-metadata step',
         'git-user-name': 'Ploigos Robot',
         'git-user-email': 'ploigos-robot'
     }
     self.assertEqual(defaults, expected_defaults)
Пример #11
0
    def test_success(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'git-commit-message' in key:
                return 'mock commit message'

        mock_get_value.side_effect = mock_get_value_side_effect

        # run test
        step_implementer.git_commit_changes()

        # validate
        mock_git_repo.git.commit.assert_called_with('-am',
                                                    'mock commit message')
Пример #12
0
    def test_given_repo_root(self, mock_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'repo-root' in key:
                return 'mock/repo/path'

        mock_get_value.side_effect = mock_get_value_side_effect

        # run test
        actual_git_repo = step_implementer.git_repo

        # validate
        self.assertIsNotNone(actual_git_repo)
        mock_repo.assert_called_once_with('mock/repo/path')
Пример #13
0
    def test_multiple_calls(self, mock_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'git-repo-root' in key:
                return 'mock/repo/path'

        mock_get_value.side_effect = mock_get_value_side_effect

        # run test
        actual_git_repo1 = step_implementer.git_repo
        actual_git_repo2 = step_implementer.git_repo

        # validate
        self.assertEqual(actual_git_repo1, actual_git_repo2)
        mock_repo.assert_called_once_with('mock/repo/path')
Пример #14
0
    def test_given_git_url_http_no_username_no_password(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'url' in key:
                return 'http://mock.xyz/mock.git'

        mock_get_value.side_effect = mock_get_value_side_effect

        # run test
        actual_git_url1 = step_implementer.git_url
        actual_git_url2 = step_implementer.git_url

        # validate
        self.assertEqual(actual_git_url1, 'http://mock.xyz/mock.git')
        self.assertEqual(actual_git_url1, actual_git_url2)
        mock_git_repo.assert_not_called()
Пример #15
0
    def step_implementer_config_defaults():
        """
        Getter for the StepImplementer's configuration defaults.

        Notes
        -----
        These are the lowest precedence configuration values.

        Returns
        -------
        dict
            Default values to use for step configuration values.
        """
        return {**GitMixin.step_implementer_config_defaults(), **DEFAULT_CONFIG}
Пример #16
0
    def test_url_from_git_repo_ssh(self, mock_git_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            return None

        mock_get_value.side_effect = mock_get_value_side_effect
        type(mock_git_repo.remote()).url = PropertyMock(
            return_value='ssh://[email protected]/mock.git')

        # run test
        actual_git_url1 = step_implementer.git_url
        actual_git_url2 = step_implementer.git_url

        # validate
        self.assertEqual(actual_git_url1, 'ssh://[email protected]/mock.git')
        self.assertEqual(actual_git_url1, actual_git_url2)
        mock_git_repo.assert_not_called()
Пример #17
0
    def test_repo_error(self, mock_repo):
        # setup
        step_implementer = GitMixin()

        # set up mocks
        mock_get_value = MagicMock()
        step_implementer.get_value = mock_get_value

        def mock_get_value_side_effect(key):
            if 'git-repo-root' in key:
                return 'mock/bad/repo/path'

        mock_get_value.side_effect = mock_get_value_side_effect
        mock_repo.side_effect = InvalidGitRepositoryError('mock error')

        # run test
        with self.assertRaisesRegex(
                StepRunnerException,
                "Given git-repo-root \(mock/bad/repo/path\) is not a Git repository: mock error"
        ):
            step_implementer.git_repo

        # validate
        mock_repo.assert_called_once_with('mock/bad/repo/path')
Пример #18
0
    def _required_config_or_result_keys():
        """Getter for step configuration or previous step result artifacts that are required before
        running this step.

        See Also
        --------
        _validate_required_config_or_previous_step_result_artifact_keys

        Returns
        -------
        array_list
            Array of configuration keys or previous step result artifacts
            that are required before running the step.
        """
        return REQUIRED_CONFIG_OR_PREVIOUS_STEP_RESULT_ARTIFACT_KEYS + \
            GitMixin._required_config_or_result_keys()
Пример #19
0
 def test_results(self):
     required_keys = GitMixin._required_config_or_result_keys()
     expected_required_keys = [['git-repo-root', 'repo-root']]
     self.assertEqual(required_keys, expected_required_keys)