Skip to main content
Glama

GitHub MCP Tools

by NZenitram
test_issues.py5.8 kB
""" Test module for GitHub issues functionality. """ import os import pytest from datetime import datetime from unittest.mock import MagicMock, patch from src.tools.issues import create_issue, update_issue, search_issues, get_github_client @pytest.fixture(autouse=True) def setup_env(): """Load environment variables before each test.""" os.environ["GITHUB_TOKEN"] = "test_token" os.environ["GITHUB_USERNAME"] = "test_user" @pytest.fixture def mock_issue(): """Create a mock issue.""" # Create mock repository mock_repo = MagicMock() mock_repo.full_name = "test_user/test_repo" # Create mock label and assignee mock_label = MagicMock() mock_label.name = "test" mock_assignee = MagicMock() mock_assignee.login = "test_user" # Create mock issue mock_issue = MagicMock() mock_issue.number = 1 mock_issue.title = "Test Issue" mock_issue.body = "Test Body" mock_issue.state = "open" mock_issue.labels = [mock_label] mock_issue.assignees = [mock_assignee] mock_issue.created_at = datetime.now() mock_issue.updated_at = datetime.now() mock_issue.html_url = "https://github.com/test_user/test_repo/issues/1" mock_issue.repository = mock_repo # Configure issue methods def edit_mock(**kwargs): if 'title' in kwargs: mock_issue.title = kwargs['title'] if 'body' in kwargs: mock_issue.body = kwargs['body'] if 'state' in kwargs: mock_issue.state = kwargs['state'] mock_issue.closed = kwargs['state'] == 'closed' mock_issue.edit = MagicMock(side_effect=edit_mock) return mock_issue @pytest.fixture def mock_github(mock_issue): """Create a mock GitHub client.""" with patch('src.tools.issues.Github') as mock_github: # Create mock repository mock_repo = MagicMock() mock_repo.full_name = "test_user/test_repo" mock_repo.get_issue.return_value = mock_issue # Configure repository methods to return our mock issue def create_issue_mock(**kwargs): if 'title' in kwargs: mock_issue.title = kwargs['title'] if 'body' in kwargs: mock_issue.body = kwargs['body'] if 'labels' in kwargs: mock_label = MagicMock() mock_label.name = kwargs['labels'][0] mock_issue.labels = [mock_label] return mock_issue mock_repo.create_issue = MagicMock(side_effect=create_issue_mock) # Create mock user mock_user = MagicMock() mock_user.get_repo.return_value = mock_repo # Create mock GitHub instance mock_github_instance = MagicMock() mock_github_instance.get_user.return_value = mock_user mock_github_instance.get_repo.return_value = mock_repo mock_github_instance.search_issues.return_value = [mock_issue] mock_github.return_value = mock_github_instance yield mock_github_instance def test_create_issue(mock_github, mock_issue): """Test creating a new issue.""" # Create a test issue issue = create_issue( owner="test_user", repo="test_repo", title="New Issue", body="This is a test issue created by automated tests", labels=["test", "automated"], ) # Verify issue data assert issue["title"] == "New Issue" assert issue["body"] == "This is a test issue created by automated tests" assert "test" in issue["labels"] assert not issue["closed"] assert issue["number"] == 1 # Verify GitHub API was called correctly mock_github.get_user().get_repo().create_issue.assert_called_with( title="New Issue", body="This is a test issue created by automated tests", labels=["test", "automated"], assignees=[] ) def test_update_issue(mock_github, mock_issue): """Test updating an existing issue.""" # Update the issue updated_issue = update_issue( owner="test_user", repo="test_repo", issue_number=1, title="Updated Title", body="This issue has been updated", state="closed", ) # Verify updates assert updated_issue["title"] == "Updated Title" assert updated_issue["body"] == "This issue has been updated" assert updated_issue["closed"] assert updated_issue["number"] == 1 # Verify GitHub API was called correctly mock_issue.edit.assert_called_once_with( title="Updated Title", body="This issue has been updated", state="closed" ) def test_search_issues(mock_github): """Test searching for issues.""" # Search for issues results = search_issues( query="repo:test_user/test_repo label:bug", state="open" ) # Verify search results assert len(results) == 1 assert results[0]["title"] == "Test Issue" assert "test" in results[0]["labels"] # Verify GitHub API was called correctly mock_github.search_issues.assert_called_once_with( "repo:test_user/test_repo label:bug state:open", sort="created", order="desc" ) def test_issue_labels(mock_github, mock_issue): """Test issue label management.""" # Update issue labels updated_issue = update_issue( owner="test_user", repo="test_repo", issue_number=1, labels=["new-label", "another-label"], ) # Verify labels assert "test" in updated_issue["labels"] # Verify GitHub API was called correctly mock_issue.set_labels.assert_called_once_with( "new-label", "another-label" ) if __name__ == "__main__": pytest.main([__file__, "-v"])

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NZenitram/github-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server