| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import pytest
- from unittest.mock import patch, MagicMock
- from src.services.http_service import HTTPService, DEBUG_DATA
- @pytest.fixture
- def http_service():
- config = {
- 'http': {
- 'server_url': 'http://api.example.com',
- 'endpoint': 'cells',
- 'username': 'testuser',
- 'password': 'testpass',
- 'debug': False
- }
- }
- return HTTPService(config)
- @pytest.fixture
- def mock_response():
- mock = MagicMock()
- mock.status_code = 200
- mock.json.return_value = {
- "id": 1234,
- "cell_type": {
- "id": 16,
- "name": "INR18650-35E",
- "manufacturer": "Samsung",
- "capacity": 3450,
- "nominal_voltage": 3.7,
- "max_voltage": 4.2,
- "min_voltage": 2.5
- }
- }
- return mock
- def test_successful_fetch(http_service, mock_response):
- # Arrange
- with patch('requests.get', return_value=mock_response) as mock_get:
- # Act
- result = http_service.fetch_cell_info(1234)
- # Assert
- mock_get.assert_called_once_with(
- 'http://api.example.com/cells/1234/',
- auth=('testuser', 'testpass'),
- headers={"Accept": "application/json"}
- )
- assert result['id'] == 1234
- assert result['cell_type']['name'] == 'INR18650-35E'
- def test_failed_fetch(http_service):
- # Arrange
- mock_error_response = MagicMock()
- mock_error_response.status_code = 404
- with patch('requests.get', return_value=mock_error_response) as mock_get:
- # Act & Assert
- with pytest.raises(ConnectionError) as exc_info:
- http_service.fetch_cell_info(9999)
-
- assert "could not be retreived: 404" in str(exc_info.value)
- def test_debug_mode():
- # Arrange
- config = {
- 'http': {
- 'server_url': 'http://api.example.com',
- 'debug': True
- }
- }
- service = HTTPService(config)
- # Act
- result = service.fetch_cell_info(1234)
- # Assert
- assert result == DEBUG_DATA
- assert result['cell_type']['name'] == 'INR18650-35E'
- assert result['cell_type']['capacity'] == 3450
- def test_network_error(http_service):
- # Arrange
- with patch('requests.get', side_effect=ConnectionError('Network error')):
- # Act & Assert
- with pytest.raises(ConnectionError) as exc_info:
- http_service.fetch_cell_info(1234)
-
- assert "Network error" in str(exc_info.value)
- def test_malformed_json(http_service):
- # Arrange
- mock_bad_response = MagicMock()
- mock_bad_response.status_code = 200
- mock_bad_response.json.side_effect = ValueError('Invalid JSON')
- with patch('requests.get', return_value=mock_bad_response):
- # Act & Assert
- with pytest.raises(ValueError) as exc_info:
- http_service.fetch_cell_info(1234)
-
- assert "Invalid JSON" in str(exc_info.value)
|