Пример #1
0
    def execute(
        self, git_selected_repos: List[str]
    ) -> Union[res.ResponseFailure, res.ResponseSuccess]:
        """Batch `git clone` command.

        Args:
            git_selected_repos: list of configured repo names.

        Returns:
            str: output.
            str: error output.
        """
        if self.err_output:
            return res.ResponseFailure(res.ResponseTypes.SYSTEM_ERROR,
                                       self.err_output)
        output = ""
        cwd = pathlib.Path().absolute()
        for repo_name in git_selected_repos:
            folder_name = repo_name.split("/")[1]
            clone_path = self.github_service.get_repo_url(repo_name)
            output += f"{folder_name}: "
            popen = subprocess.Popen(  # noqa: S603, S607
                ["git", "clone", clone_path],
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                cwd=cwd,
            )
            _, error = popen.communicate()
            # check for errors
            if popen.returncode == 0:
                output += "clone successful.\n"
            else:
                error_str = error.decode("utf-8")
                output += f"{error_str}"
        return res.ResponseSuccess(output)
Пример #2
0
 def generate_response(
     self, output: str
 ) -> Union[res.ResponseFailure, res.ResponseSuccess]:
     """Create appropriate response object."""
     if self.error:
         return res.ResponseFailure(res.ResponseTypes.PARAMETERS_ERROR, output)
     return res.ResponseSuccess(output)
Пример #3
0
def test_response_failure_initialisation_with_exception() -> None:
    """It builds a ResponseFailure from exception."""
    response = res.ResponseFailure(
        GENERIC_RESPONSE_TYPE, Exception("Just an error message")
    )

    assert bool(response) is False
    assert response.type == GENERIC_RESPONSE_TYPE
    assert response.message == "Exception: Just an error message"
Пример #4
0
def test_response_failure_has_type_and_message() -> None:
    """It has failure type and message."""
    response = res.ResponseFailure(GENERIC_RESPONSE_TYPE, GENERIC_RESPONSE_MESSAGE)

    assert response.type == GENERIC_RESPONSE_TYPE
    assert response.message == GENERIC_RESPONSE_MESSAGE
    assert response.value == {
        "type": GENERIC_RESPONSE_TYPE,
        "message": GENERIC_RESPONSE_MESSAGE,
    }
Пример #5
0
 def execute(
     self,
     request: Union[il.IssueListValidRequest, il.IssueListInvalidRequest],
     github_repo: str,
 ) -> Union[res.ResponseSuccess, res.ResponseFailure]:
     """Return a list of matching issues."""
     if isinstance(request, il.IssueListInvalidRequest):
         return res.build_response_from_invalid_request(request)
     try:
         issues = self.github_service.list_issues_from_repo(
             github_repo, request)
         return res.ResponseSuccess(issues)
     except Exception as exc:
         return res.ResponseFailure(res.ResponseTypes.SYSTEM_ERROR, exc)
Пример #6
0
def test_execute_for_all_repos_failed(
    mock_config_manager: MockerFixture,
    mock_github_service: MockerFixture,
    mock_gh_list_issue_use_case: MockerFixture,
) -> None:
    """It returns success."""
    config_manager = mock_config_manager.return_value
    github_service = mock_github_service.return_value
    mock_gh_list_issue_use_case.return_value.execute.return_value = res.ResponseFailure(
        res.ResponseTypes.PARAMETERS_ERROR, "msg")
    response = ghci.GhCloseIssueUseCase(config_manager,
                                        github_service).execute(REQUEST_ISSUES)

    assert bool(response) is True
    assert f"{REPO}: no issues closed.\n{REPO2}: no issues closed.\n" == response.value
Пример #7
0
def test_config_init_connection_error(
    mock_prompt_inquirer_prompter: MockerFixture,
    mock_config_manager: MockerFixture,
    mock_config_init_use_case: MockerFixture,
    runner: CliRunner,
) -> None:
    """It executes with connection error first then succeeds."""
    config_manager = mock_config_manager.return_value
    mock_config_init_use_case(config_manager).execute.side_effect = [
        res.ResponseFailure(res.ResponseTypes.SYSTEM_ERROR, "message"),
        res.ResponseSuccess("success message"),
    ]
    result = runner.invoke(git_portfolio.__main__.configure, ["init"], prog_name="gitp")

    assert mock_config_init_use_case(config_manager).execute.call_count == 2
    assert result.output == "Error: message\nsuccess message\n"
Пример #8
0
def test_execute_link_issue_failed_for_specific_repo(
    mock_config_manager: MockerFixture,
    mock_github_service: MockerFixture,
    mock_gh_list_issue_use_case: MockerFixture,
    domain_prs: List[pr.PullRequest],
) -> None:
    """It returns success."""
    config_manager = mock_config_manager.return_value
    github_service = mock_github_service.return_value
    mock_gh_list_issue_use_case.return_value.execute.return_value = res.ResponseFailure(
        res.ResponseTypes.PARAMETERS_ERROR, "msg"
    )
    request = domain_prs[1]
    response = ghcp.GhCreatePrUseCase(config_manager, github_service).execute(
        request, REQUEST_ISSUES, "staticdev/omg"
    )

    assert bool(response) is True
    assert "success message\n" == response.value
Пример #9
0
    def execute(
        self, git_selected_repos: List[str], command: str, args: Tuple[str]
    ) -> Union[res.ResponseFailure, res.ResponseSuccess]:
        """Batch `git` command.

        Args:
            git_selected_repos: list of configured repo names.
            command: git command eg. checkout, pull, push...
            args: command arguments.

        Returns:
            Union[res.ResponseFailure, res.ResponseSuccess]: final result.
        """
        if self.err_output:
            return res.ResponseFailure(res.ResponseTypes.SYSTEM_ERROR, self.err_output)
        output = ""
        cwd = pathlib.Path().absolute()
        for repo_name in git_selected_repos:
            folder_name = repo_name.split("/")[1]
            output += f"{folder_name}: "
            try:
                popen = subprocess.Popen(  # noqa: S603, S607
                    ["git", command, *args],
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,
                    cwd=os.path.join(cwd, folder_name),
                )
                stdout, error = popen.communicate()
                if popen.returncode == 0:
                    # case for command with no output on success such as `git add .`
                    if not stdout:
                        output += f"{command} successful.\n"
                    else:
                        stdout_str = stdout.decode("utf-8")
                        output += f"{stdout_str}\n"
                else:
                    error_str = error.decode("utf-8")
                    output += f"{error_str}"
            except FileNotFoundError as fnf_error:
                output += f"{fnf_error.strerror}: {fnf_error.filename}\n"
        return res.ResponseSuccess(output)
Пример #10
0
def test_response_failure_is_false() -> None:
    """It has bool value of False."""
    response = res.ResponseFailure(GENERIC_RESPONSE_TYPE, GENERIC_RESPONSE_MESSAGE)

    assert bool(response) is False
Пример #11
0
 def _() -> res.ResponseFailure:
     return res.ResponseFailure(res.ResponseTypes.SYSTEM_ERROR, "some error msg")