"""Tests for snippet tools."""
from unittest.mock import patch, MagicMock
from bitbucket_mcp.tools import snippets as _mod
list_snippets = _mod.list_snippets.fn
create_snippet = _mod.create_snippet.fn
get_snippet = _mod.get_snippet.fn
delete_snippet = _mod.delete_snippet.fn
from tests.conftest import make_mock_response
class TestListSnippets:
@patch("bitbucket_mcp.tools.snippets.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": [
{
"id": "abc123",
"title": "My Snippet",
"is_private": False,
"created_on": "2025-01-01",
"updated_on": "2025-01-02",
"owner": {"display_name": "Dev"},
"links": {"html": {"href": "https://bb.org/snippets/abc123"}},
}
],
"size": 1, "page": 1, "pagelen": 25,
})
result = list_snippets()
assert result["success"] is True
assert len(result["snippets"]) == 1
assert result["snippets"][0]["title"] == "My Snippet"
@patch("bitbucket_mcp.tools.snippets.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_snippets()
assert result["success"] is False
assert "not found" in result["error"]
class TestCreateSnippet:
@patch("bitbucket_mcp.tools.snippets.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, {
"id": "new123",
"title": "Code Snippet",
"is_private": False,
"links": {"html": {"href": "https://bb.org/snippets/new123"}},
})
result = create_snippet("Code Snippet", "print('hello')", "hello.py")
assert result["success"] is True
assert result["id"] == "new123"
assert "Snippet created" in result["message"]
@patch("bitbucket_mcp.tools.snippets.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.post.return_value = make_mock_response(401)
result = create_snippet("Snippet", "content", "file.py")
assert result["success"] is False
assert "Authentication failed" in result["error"]
class TestGetSnippet:
@patch("bitbucket_mcp.tools.snippets.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, {
"id": "abc123",
"title": "My Snippet",
"is_private": False,
"owner": {"display_name": "Dev"},
"created_on": "2025-01-01",
"updated_on": "2025-01-02",
"files": {
"hello.py": {
"size": 20,
"links": {"self": {"href": "https://bb.org/snippets/abc123/files/hello.py"}},
}
},
"links": {"html": {"href": "https://bb.org/snippets/abc123"}},
})
result = get_snippet("abc123")
assert result["success"] is True
assert result["title"] == "My Snippet"
assert len(result["files"]) == 1
assert result["files"][0]["filename"] == "hello.py"
@patch("bitbucket_mcp.tools.snippets.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_snippet("nonexistent")
assert result["success"] is False
assert "not found" in result["error"]
class TestDeleteSnippet:
@patch("bitbucket_mcp.tools.snippets.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_snippet("abc123")
assert result["success"] is True
assert "deleted" in result["message"]
@patch("bitbucket_mcp.tools.snippets.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.delete.return_value = make_mock_response(403)
result = delete_snippet("abc123")
assert result["success"] is False
assert "Permission denied" in result["error"]
@patch("bitbucket_mcp.tools.snippets.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.delete.return_value = make_mock_response(404)
result = delete_snippet("nonexistent")
assert result["success"] is False
assert "not found" in result["error"]