"""Pytest configuration and fixtures for SharePoint MCP tests."""
import pytest
from unittest.mock import AsyncMock, MagicMock
from sharepoint_mcp.auth import AuthManager
from sharepoint_mcp.config import Config
from sharepoint_mcp.graph import GraphClient
@pytest.fixture
def mock_config() -> Config:
"""Create a mock configuration for testing.
Returns:
Test configuration
"""
return Config(
client_id="test-client-id",
tenant_id="test-tenant-id",
redirect_uri="http://localhost:8765/callback",
log_level="DEBUG",
)
@pytest.fixture
def mock_auth_manager(mock_config: Config) -> MagicMock:
"""Create a mock auth manager.
Args:
mock_config: Mock configuration
Returns:
Mock AuthManager
"""
auth = MagicMock(spec=AuthManager)
auth.config = mock_config
auth.get_access_token = AsyncMock(return_value="mock-access-token")
auth.ensure_authenticated = AsyncMock(return_value="mock-access-token")
return auth
@pytest.fixture
def mock_graph_client(mock_auth_manager: MagicMock) -> GraphClient:
"""Create a mock Graph client.
Args:
mock_auth_manager: Mock auth manager
Returns:
GraphClient with mocked auth
"""
return GraphClient(mock_auth_manager)
@pytest.fixture
def sample_site_response() -> dict:
"""Sample Microsoft Graph API response for sites.
Returns:
Mock API response
"""
return {
"value": [
{
"id": "site-1",
"displayName": "Marketing Site",
"webUrl": "https://contoso.sharepoint.com/sites/marketing",
"description": "Marketing team site",
},
{
"id": "site-2",
"displayName": "Engineering Site",
"webUrl": "https://contoso.sharepoint.com/sites/engineering",
"description": None,
},
]
}
@pytest.fixture
def sample_library_response() -> dict:
"""Sample Microsoft Graph API response for libraries.
Returns:
Mock API response
"""
return {
"value": [
{
"id": "drive-1",
"name": "Documents",
"webUrl": "https://contoso.sharepoint.com/sites/marketing/Documents",
"quota": {"used": 42},
},
{
"id": "drive-2",
"name": "Shared Documents",
"webUrl": "https://contoso.sharepoint.com/sites/marketing/Shared",
"quota": {"used": 15},
},
]
}
@pytest.fixture
def sample_file_response() -> dict:
"""Sample Microsoft Graph API response for files.
Returns:
Mock API response
"""
return {
"value": [
{
"id": "file-1",
"name": "report.pdf",
"size": 1024000,
"webUrl": "https://contoso.sharepoint.com/sites/marketing/Documents/report.pdf",
"createdDateTime": "2025-01-01T10:00:00Z",
"lastModifiedDateTime": "2025-01-02T15:30:00Z",
"file": {"mimeType": "application/pdf"},
"createdBy": {"user": {"displayName": "John Doe"}},
"lastModifiedBy": {"user": {"displayName": "Jane Smith"}},
},
{
"id": "file-2",
"name": "data.xlsx",
"size": 512000,
"webUrl": "https://contoso.sharepoint.com/sites/marketing/Documents/data.xlsx",
"createdDateTime": "2025-01-03T09:00:00Z",
"lastModifiedDateTime": "2025-01-03T09:00:00Z",
"file": {
"mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
},
"createdBy": {"user": {"displayName": "Alice Johnson"}},
"lastModifiedBy": {"user": {"displayName": "Alice Johnson"}},
},
],
"@odata.nextLink": "https://graph.microsoft.com/v1.0/sites/site-1/drives/drive-1/root/children?$skiptoken=abc123",
}
@pytest.fixture
def sample_user_response() -> dict:
"""Sample Microsoft Graph API response for current user.
Returns:
Mock API response
"""
return {
"id": "user-1",
"displayName": "Test User",
"mail": "test.user@contoso.com",
"userPrincipalName": "test.user@contoso.com",
}