Skip to main content
Glama
test_app.py6.84 kB
"""Tests for SpaceX MCP app.py module.""" import pytest import requests from unittest.mock import Mock, MagicMock from app import SpaceXAPI, format_launch_data @pytest.fixture def spacex_api(): """Create a SpaceXAPI instance for testing.""" return SpaceXAPI() class TestSpaceXAPIInit: """Test SpaceXAPI initialization.""" def test_spacex_api_init(self, spacex_api): """Verify SpaceXAPI initializes correctly.""" assert isinstance(spacex_api.session, requests.Session) assert spacex_api.BASE_URL == "https://api.spacexdata.com/v4" class TestGetLatestLaunch: """Test get_latest_launch method.""" def test_get_latest_launch_success(self, spacex_api, mocker): """Verify get_latest_launch returns data on success.""" test_data = {"flight_number": 100, "name": "Test Mission", "success": True} mock_response = Mock() mock_response.json.return_value = test_data mock_response.raise_for_status.return_value = None mock_get = mocker.patch.object(spacex_api.session, 'get', return_value=mock_response) result = spacex_api.get_latest_launch() mock_get.assert_called_once_with( "https://api.spacexdata.com/v4/launches/latest", timeout=30 ) assert result == test_data def test_get_latest_launch_failure(self, spacex_api, mocker, capsys): """Verify get_latest_launch handles HTTP errors gracefully.""" mock_get = mocker.patch.object( spacex_api.session, 'get', side_effect=requests.RequestException("Connection error") ) result = spacex_api.get_latest_launch() assert result is None captured = capsys.readouterr() assert "API çağrısı başarısız" in captured.err class TestGetUpcomingLaunches: """Test get_upcoming_launches method.""" def test_get_upcoming_launches_success_with_limit(self, spacex_api, mocker): """Verify get_upcoming_launches works with custom limit.""" test_data = [ {"flight_number": 101, "name": "Mission 1"}, {"flight_number": 102, "name": "Mission 2"}, {"flight_number": 103, "name": "Mission 3"} ] mock_response = Mock() mock_response.json.return_value = test_data mock_response.raise_for_status.return_value = None mock_get = mocker.patch.object(spacex_api.session, 'get', return_value=mock_response) result = spacex_api.get_upcoming_launches(limit=3) mock_get.assert_called_once_with( "https://api.spacexdata.com/v4/launches/upcoming", params={"limit": 3}, timeout=30 ) assert result == test_data def test_get_upcoming_launches_default_limit(self, spacex_api, mocker): """Verify get_upcoming_launches uses default limit of 5.""" mock_response = Mock() mock_response.json.return_value = [] mock_response.raise_for_status.return_value = None mock_get = mocker.patch.object(spacex_api.session, 'get', return_value=mock_response) spacex_api.get_upcoming_launches() mock_get.assert_called_once_with( "https://api.spacexdata.com/v4/launches/upcoming", params={"limit": 5}, timeout=30 ) def test_get_upcoming_launches_failure(self, spacex_api, mocker, capsys): """Verify get_upcoming_launches handles errors.""" mock_get = mocker.patch.object( spacex_api.session, 'get', side_effect=requests.RequestException("Network error") ) result = spacex_api.get_upcoming_launches() assert result is None captured = capsys.readouterr() assert "API çağrısı başarısız" in captured.err class TestGetCompanyInfo: """Test get_company_info method.""" def test_get_company_info_success(self, spacex_api, mocker): """Verify get_company_info returns data.""" test_data = { "name": "SpaceX", "founder": "Elon Musk", "founded": 2002 } mock_response = Mock() mock_response.json.return_value = test_data mock_response.raise_for_status.return_value = None mock_get = mocker.patch.object(spacex_api.session, 'get', return_value=mock_response) result = spacex_api.get_company_info() mock_get.assert_called_once_with( "https://api.spacexdata.com/v4/company", timeout=30 ) assert result == test_data def test_get_company_info_failure(self, spacex_api, mocker, capsys): """Verify get_company_info handles errors.""" mock_get = mocker.patch.object( spacex_api.session, 'get', side_effect=requests.RequestException("API error") ) result = spacex_api.get_company_info() assert result is None captured = capsys.readouterr() assert "API çağrısı başarısız" in captured.err class TestFormatLaunchData: """Test format_launch_data function.""" def test_format_launch_data_with_complete_data(self): """Verify format_launch_data formats complete launch data.""" launch_data = { "flight_number": 200, "name": "Starship", "date_utc": "2025-01-15", "success": True, "details": "Test flight" } result = format_launch_data(launch_data) assert "🚀 SpaceX Fırlatma Bilgisi" in result assert "200" in result assert "Starship" in result assert "2025-01-15" in result assert "Başarılı" in result assert "Test flight" in result def test_format_launch_data_with_missing_fields(self): """Verify format_launch_data handles missing fields.""" launch_data = {} result = format_launch_data(launch_data) assert "Bilinmiyor" in result def test_format_launch_data_with_null_data(self): """Verify format_launch_data handles None input.""" result = format_launch_data(None) assert result == "Fırlatma verisi bulunamadı." def test_format_launch_data_failed_launch(self): """Verify format_launch_data shows failed status.""" launch_data = { "success": False, "flight_number": 5, "name": "Failed", "date_utc": "2020-01-01" } result = format_launch_data(launch_data) assert "Başarısız" in result

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/rftsngl/SpaceX-mcp'

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