We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Acendas/bitbucket-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""Tests for repository management tools."""
from unittest.mock import patch, MagicMock
from bitbucket_mcp.tools import repositories as _mod
list_repositories = _mod.list_repositories.fn
get_repository = _mod.get_repository.fn
create_repository = _mod.create_repository.fn
update_repository = _mod.update_repository.fn
delete_repository = _mod.delete_repository.fn
fork_repository = _mod.fork_repository.fn
list_repository_forks = _mod.list_repository_forks.fn
from tests.conftest import make_mock_response, make_paginated_response
class TestListRepositories:
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_success(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.get.return_value = make_paginated_response([
{
"slug": "repo-1", "name": "Repo 1", "full_name": "ws/repo-1",
"description": "A repo", "is_private": True,
"created_on": "2025-01-01", "updated_on": "2025-01-02",
"size": 1024, "language": "python",
"mainbranch": {"name": "main"},
"links": {"html": {"href": "https://bb.org/repo-1"}}
}
])
result = list_repositories()
assert result["success"] is True
assert len(result["repositories"]) == 1
assert result["repositories"][0]["slug"] == "repo-1"
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_not_found(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.get.return_value = make_mock_response(404)
result = list_repositories()
assert result["success"] is False
class TestGetRepository:
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_success(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.get.return_value = make_mock_response(200, {
"slug": "repo", "name": "Repo", "full_name": "ws/repo",
"description": "desc", "is_private": True,
"fork_policy": "no_public_forks",
"created_on": "2025-01-01", "updated_on": "2025-01-02",
"size": 2048, "language": "python",
"mainbranch": {"name": "main"},
"has_issues": True, "has_wiki": False,
"owner": {"display_name": "Owner"},
"project": {"name": "Proj"},
"links": {
"html": {"href": "https://bb.org/repo"},
"clone": [
{"name": "ssh", "href": "git@bb.org:ws/repo.git"},
{"name": "https", "href": "https://bb.org/ws/repo.git"},
]
}
})
result = get_repository("repo")
assert result["success"] is True
assert result["clone_ssh"] == "git@bb.org:ws/repo.git"
assert result["has_issues"] is True
class TestCreateRepository:
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_success(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.post.return_value = make_mock_response(201, {
"slug": "new-repo", "name": "new-repo",
"full_name": "ws/new-repo", "is_private": True,
"links": {
"html": {"href": "https://bb.org/new-repo"},
"clone": [
{"name": "ssh", "href": "git@bb.org:ws/new-repo.git"},
{"name": "https", "href": "https://bb.org/ws/new-repo.git"},
]
}
})
result = create_repository("new-repo", description="Test repo")
assert result["success"] is True
assert result["slug"] == "new-repo"
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_permission_denied(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.post.return_value = make_mock_response(403)
result = create_repository("new-repo")
assert result["success"] is False
assert "Permission denied" in result["error"]
class TestDeleteRepository:
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_success(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.delete.return_value = make_mock_response(204)
result = delete_repository("repo")
assert result["success"] is True
assert "deleted" in result["message"]
class TestUpdateRepository:
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_success(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.put.return_value = make_mock_response(200, {
"slug": "repo", "name": "repo",
"description": "updated desc", "is_private": True,
"fork_policy": "no_forks", "has_issues": True,
"has_wiki": True, "language": "python",
"links": {"html": {"href": "https://bb.org/repo"}}
})
result = update_repository("repo", description="updated desc")
assert result["success"] is True
assert result["description"] == "updated desc"
def test_no_fields(self, saved_config):
result = update_repository("repo")
assert result["success"] is False
assert "No update fields" in result["error"]
class TestForkRepository:
@patch("bitbucket_mcp.tools.repositories.httpx.Client")
def test_success(self, MockClient, saved_config):
client = MagicMock()
MockClient.return_value.__enter__ = MagicMock(return_value=client)
MockClient.return_value.__exit__ = MagicMock(return_value=False)
client.post.return_value = make_mock_response(201, {
"slug": "repo-fork", "name": "repo-fork",
"full_name": "ws/repo-fork",
"links": {"html": {"href": "https://bb.org/repo-fork"}},
"parent": {"full_name": "ws/repo"}
})
result = fork_repository("repo")
assert result["success"] is True
assert result["parent"] == "ws/repo"