### Adds the following tools to the Github Toolkit:
1. CreateIssueComment
2. SetStarred
3. CountStargazers
4. ListOrgRepositories
5. GetRepository
6. ListRepositoryActivities
7. ListReviewCommentsInARepository
8. ListPullRequests
9. GetPullRequest
10. UpdatePullRequest
11. ListPullRequestCommits
12. CreateReplyForReviewComment
13. ListReviewCommentsOnPullRequest
14. CreateReviewComment
Adds evals for all of these tools and unit tests.
---------
Co-authored-by: Sam Partee <sam@arcade-ai.com>
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from unittest.mock import AsyncMock, patch
|
|
|
|
import pytest
|
|
from arcade_github.tools.activity import set_starred
|
|
from httpx import Response
|
|
|
|
from arcade.core.errors import ToolExecutionError
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_context():
|
|
context = AsyncMock()
|
|
context.authorization.token = "mock_token" # noqa: S105
|
|
return context
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_client():
|
|
with patch("arcade_github.tools.activity.httpx.AsyncClient") as client:
|
|
yield client.return_value.__aenter__.return_value
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize(
|
|
"starred,expected_message",
|
|
[
|
|
(True, "Successfully starred the repository owner/repo"),
|
|
(False, "Successfully unstarred the repository owner/repo"),
|
|
],
|
|
)
|
|
async def test_set_starred_success(mock_context, mock_client, starred, expected_message):
|
|
mock_client.put.return_value = mock_client.delete.return_value = Response(204)
|
|
|
|
result = await set_starred(mock_context, "owner", "repo", starred)
|
|
assert result == expected_message
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize(
|
|
"status_code,error_message,expected_error",
|
|
[
|
|
(403, "Forbidden", "Error accessing.*: Forbidden"),
|
|
(404, "Not Found", "Error accessing.*: Resource not found"),
|
|
(500, "Internal Server Error", "Error accessing.*: Failed to process request"),
|
|
],
|
|
)
|
|
async def test_set_starred_errors(
|
|
mock_context, mock_client, status_code, error_message, expected_error
|
|
):
|
|
mock_client.put.return_value = mock_client.delete.return_value = Response(
|
|
status_code, json={"message": error_message}
|
|
)
|
|
|
|
with pytest.raises(ToolExecutionError, match=expected_error):
|
|
await set_starred(mock_context, "owner", "repo", True)
|