"""Tests for user and account tools."""
from unittest.mock import patch, MagicMock
from bitbucket_mcp.tools import users as _mod
get_current_user = _mod.get_current_user.fn
get_user_profile = _mod.get_user_profile.fn
get_user_permissions = _mod.get_user_permissions.fn
from tests.conftest import make_mock_response
class TestGetCurrentUser:
@patch("bitbucket_mcp.tools.users.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, {
"uuid": "{user-uuid}",
"username": "devuser",
"display_name": "Dev User",
"nickname": "dev",
"account_id": "123",
"created_on": "2025-01-01",
"links": {"html": {"href": "https://bb.org/devuser"}},
})
result = get_current_user()
assert result["success"] is True
assert result["username"] == "devuser"
assert result["display_name"] == "Dev User"
@patch("bitbucket_mcp.tools.users.httpx.Client")
def test_auth_failure(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(401)
result = get_current_user()
assert result["success"] is False
assert "Authentication failed" in result["error"]
def test_no_credentials(self):
result = get_current_user()
assert result["success"] is False
assert "No Bitbucket credentials" in result["error"]
class TestGetUserProfile:
@patch("bitbucket_mcp.tools.users.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, {
"uuid": "{other-uuid}",
"username": "otheruser",
"display_name": "Other User",
"nickname": "other",
"account_id": "456",
"created_on": "2025-01-01",
"links": {"html": {"href": "https://bb.org/otheruser"}},
})
result = get_user_profile("otheruser")
assert result["success"] is True
assert result["username"] == "otheruser"
@patch("bitbucket_mcp.tools.users.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 = get_user_profile("nonexistent")
assert result["success"] is False
assert "not found" in result["error"]
class TestGetUserPermissions:
@patch("bitbucket_mcp.tools.users.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, {
"values": [
{
"repository": {
"full_name": "ws/repo",
"slug": "repo",
"links": {"html": {"href": "https://bb.org/ws/repo"}},
},
"permission": "write",
}
],
"size": 1, "page": 1, "pagelen": 25,
})
result = get_user_permissions()
assert result["success"] is True
assert len(result["permissions"]) == 1
assert result["permissions"][0]["repository"] == "ws/repo"
assert result["permissions"][0]["permission"] == "write"
@patch("bitbucket_mcp.tools.users.httpx.Client")
def test_auth_failure(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(401)
result = get_user_permissions()
assert result["success"] is False
assert "Authentication failed" in result["error"]