Skip to main content
Glama
test_models.py9.83 kB
"""Unit tests for data models.""" import os import tempfile from pathlib import Path from unittest.mock import patch, MagicMock import pytest from file_system_mcp_server.models import ( FileMetadata, ErrorResponse, FileReadResult, FileWriteResult, DirectoryEntry, DirectoryListResult, FileDeleteResult, FileInfoResult ) class TestFileMetadata: """Test the FileMetadata class.""" def test_file_metadata_creation(self): """Test creating FileMetadata manually.""" metadata = FileMetadata( size=1024, modified_time="2023-01-01T12:00:00", permissions="0o644", is_directory=False, mime_type="text/plain" ) assert metadata.size == 1024 assert metadata.modified_time == "2023-01-01T12:00:00" assert metadata.permissions == "0o644" assert metadata.is_directory is False assert metadata.mime_type == "text/plain" def test_from_path_file(self): """Test creating FileMetadata from a real file.""" with tempfile.NamedTemporaryFile(mode='w', delete=False) as f: f.write("test content") temp_path = f.name try: metadata = FileMetadata.from_path(temp_path, "text/plain") assert metadata.size > 0 assert metadata.modified_time is not None assert metadata.permissions is not None assert metadata.is_directory is False assert metadata.mime_type == "text/plain" assert metadata.created_time is not None assert metadata.accessed_time is not None finally: os.unlink(temp_path) def test_from_path_directory(self): """Test creating FileMetadata from a directory.""" with tempfile.TemporaryDirectory() as temp_dir: metadata = FileMetadata.from_path(temp_dir, "directory") assert metadata.is_directory is True assert metadata.mime_type == "directory" assert metadata.size >= 0 def test_from_path_nonexistent(self): """Test creating FileMetadata from nonexistent path.""" with pytest.raises(ValueError, match="Cannot get metadata"): FileMetadata.from_path("/nonexistent/path") class TestErrorResponse: """Test the ErrorResponse class.""" def test_error_response_basic(self): """Test basic ErrorResponse creation.""" error = ErrorResponse( error_type="FileNotFound", message="File does not exist" ) assert error.error_type == "FileNotFound" assert error.message == "File does not exist" assert error.details is None assert error.recovery_suggestions is None def test_error_response_with_details(self): """Test ErrorResponse with details and suggestions.""" error = ErrorResponse( error_type="PermissionError", message="Access denied", details={"path": "/protected/file", "required_permission": "write"}, recovery_suggestions=["Check file permissions", "Run as administrator"] ) assert error.error_type == "PermissionError" assert error.message == "Access denied" assert error.details["path"] == "/protected/file" assert "Check file permissions" in error.recovery_suggestions def test_to_dict(self): """Test ErrorResponse to_dict conversion.""" error = ErrorResponse( error_type="TestError", message="Test message", details={"key": "value"}, recovery_suggestions=["suggestion1", "suggestion2"] ) result = error.to_dict() assert result["error_type"] == "TestError" assert result["message"] == "Test message" assert result["details"]["key"] == "value" assert result["recovery_suggestions"] == ["suggestion1", "suggestion2"] class TestFileReadResult: """Test the FileReadResult class.""" def test_successful_read_result(self): """Test successful file read result.""" metadata = FileMetadata( size=100, modified_time="2023-01-01T12:00:00", permissions="0o644", is_directory=False, mime_type="text/plain" ) result = FileReadResult( content="file content", metadata=metadata, success=True, encoding="utf-8" ) assert result.content == "file content" assert result.metadata == metadata assert result.success is True assert result.error is None assert result.encoding == "utf-8" def test_failed_read_result(self): """Test failed file read result.""" error = ErrorResponse( error_type="FileNotFound", message="File does not exist" ) result = FileReadResult( content=None, metadata=None, success=False, error=error ) assert result.content is None assert result.metadata is None assert result.success is False assert result.error == error def test_to_dict(self): """Test FileReadResult to_dict conversion.""" metadata = FileMetadata( size=100, modified_time="2023-01-01T12:00:00", permissions="0o644", is_directory=False, mime_type="text/plain" ) result = FileReadResult( content="test", metadata=metadata, success=True, encoding="utf-8" ) dict_result = result.to_dict() assert dict_result["success"] is True assert dict_result["content"] == "test" assert dict_result["encoding"] == "utf-8" assert dict_result["metadata"]["size"] == 100 class TestFileWriteResult: """Test the FileWriteResult class.""" def test_successful_write_result(self): """Test successful file write result.""" metadata = FileMetadata( size=100, modified_time="2023-01-01T12:00:00", permissions="0o644", is_directory=False, mime_type="text/plain" ) result = FileWriteResult( path="/test/file.txt", metadata=metadata, success=True, bytes_written=100 ) assert result.path == "/test/file.txt" assert result.metadata == metadata assert result.success is True assert result.bytes_written == 100 def test_to_dict(self): """Test FileWriteResult to_dict conversion.""" metadata = FileMetadata( size=100, modified_time="2023-01-01T12:00:00", permissions="0o644", is_directory=False, mime_type="text/plain" ) result = FileWriteResult( path="/test/file.txt", metadata=metadata, success=True, backup_created="/backup/file.txt.bak", bytes_written=100 ) dict_result = result.to_dict() assert dict_result["path"] == "/test/file.txt" assert dict_result["success"] is True assert dict_result["backup_created"] == "/backup/file.txt.bak" assert dict_result["bytes_written"] == 100 class TestDirectoryEntry: """Test the DirectoryEntry class.""" def test_directory_entry(self): """Test DirectoryEntry creation and conversion.""" metadata = FileMetadata( size=0, modified_time="2023-01-01T12:00:00", permissions="0o755", is_directory=True, mime_type="directory" ) entry = DirectoryEntry( name="test_dir", path="/path/to/test_dir", metadata=metadata ) assert entry.name == "test_dir" assert entry.path == "/path/to/test_dir" assert entry.metadata.is_directory is True dict_result = entry.to_dict() assert dict_result["name"] == "test_dir" assert dict_result["path"] == "/path/to/test_dir" assert dict_result["metadata"]["is_directory"] is True class TestDirectoryListResult: """Test the DirectoryListResult class.""" def test_directory_list_result(self): """Test DirectoryListResult creation and conversion.""" metadata = FileMetadata( size=100, modified_time="2023-01-01T12:00:00", permissions="0o644", is_directory=False, mime_type="text/plain" ) entry = DirectoryEntry( name="file.txt", path="/path/to/file.txt", metadata=metadata ) result = DirectoryListResult( path="/path/to", entries=[entry], success=True, total_entries=5, filtered_entries=1, pattern_used="*.txt", recursive=True ) assert result.path == "/path/to" assert len(result.entries) == 1 assert result.success is True assert result.total_entries == 5 assert result.filtered_entries == 1 assert result.pattern_used == "*.txt" assert result.recursive is True dict_result = result.to_dict() assert dict_result["path"] == "/path/to" assert len(dict_result["entries"]) == 1 assert dict_result["pattern_used"] == "*.txt"

Latest Blog Posts

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/chidvilas1234/Project-MCP'

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