fix: resolve CI test failures with proper mock patching
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
"""Tests for api.py."""
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import requests
|
||||||
from unittest.mock import patch, MagicMock
|
from unittest.mock import patch, MagicMock
|
||||||
|
|
||||||
|
from gitignore_generator import api
|
||||||
from gitignore_generator.api import (
|
from gitignore_generator.api import (
|
||||||
get_patterns,
|
get_patterns,
|
||||||
get_patterns_batch,
|
get_patterns_batch,
|
||||||
@@ -45,7 +45,9 @@ class TestGetPatterns:
|
|||||||
with patch('gitignore_generator.api.CACHE_DIR', tmp_path):
|
with patch('gitignore_generator.api.CACHE_DIR', tmp_path):
|
||||||
with patch('gitignore_generator.api.TEMPLATES_DIR', tmp_path):
|
with patch('gitignore_generator.api.TEMPLATES_DIR', tmp_path):
|
||||||
with patch('gitignore_generator.api.requests.get') as mock_get:
|
with patch('gitignore_generator.api.requests.get') as mock_get:
|
||||||
mock_get.side_effect = Exception("Network error")
|
def raise_error(*args, **kwargs):
|
||||||
|
raise requests.RequestException("Network error")
|
||||||
|
mock_get.side_effect = raise_error
|
||||||
result = get_patterns('python')
|
result = get_patterns('python')
|
||||||
assert result == "local template content"
|
assert result == "local template content"
|
||||||
|
|
||||||
@@ -65,7 +67,9 @@ class TestGetPatterns:
|
|||||||
with patch('gitignore_generator.api.CACHE_DIR', tmp_path):
|
with patch('gitignore_generator.api.CACHE_DIR', tmp_path):
|
||||||
with patch('gitignore_generator.api.TEMPLATES_DIR', tmp_path):
|
with patch('gitignore_generator.api.TEMPLATES_DIR', tmp_path):
|
||||||
with patch('gitignore_generator.api.requests.get') as mock_get:
|
with patch('gitignore_generator.api.requests.get') as mock_get:
|
||||||
mock_get.side_effect = Exception("Network error")
|
def raise_error(*args, **kwargs):
|
||||||
|
raise requests.RequestException("Network error")
|
||||||
|
mock_get.side_effect = raise_error
|
||||||
with pytest.raises(GitignoreIOError):
|
with pytest.raises(GitignoreIOError):
|
||||||
get_patterns('nonexistent_xyz_123')
|
get_patterns('nonexistent_xyz_123')
|
||||||
|
|
||||||
@@ -75,7 +79,7 @@ class TestGetPatternsBatch:
|
|||||||
|
|
||||||
def test_get_patterns_batch_multiple_techs(self):
|
def test_get_patterns_batch_multiple_techs(self):
|
||||||
"""Test fetching patterns for multiple technologies."""
|
"""Test fetching patterns for multiple technologies."""
|
||||||
def mock_get(url):
|
def mock_get(url, **kwargs):
|
||||||
response = MagicMock()
|
response = MagicMock()
|
||||||
if 'node' in url:
|
if 'node' in url:
|
||||||
response.text = "node_modules/"
|
response.text = "node_modules/"
|
||||||
@@ -84,8 +88,8 @@ class TestGetPatternsBatch:
|
|||||||
response.raise_for_status = MagicMock()
|
response.raise_for_status = MagicMock()
|
||||||
return response
|
return response
|
||||||
|
|
||||||
with patch('gitignore_generator.api.requests.get', side_effect=mock_get):
|
with patch.object(api.requests, 'get', side_effect=mock_get):
|
||||||
result = get_patterns_batch(['node', 'python'])
|
result = get_patterns_batch(['node', 'python'], force_refresh=True)
|
||||||
assert 'node' in result
|
assert 'node' in result
|
||||||
assert 'python' in result
|
assert 'python' in result
|
||||||
assert 'node_modules' in result['node']
|
assert 'node_modules' in result['node']
|
||||||
@@ -93,15 +97,15 @@ class TestGetPatternsBatch:
|
|||||||
|
|
||||||
def test_get_patterns_batch_handles_errors(self):
|
def test_get_patterns_batch_handles_errors(self):
|
||||||
"""Test batch fetch continues on individual errors."""
|
"""Test batch fetch continues on individual errors."""
|
||||||
def mock_get(url):
|
def mock_get(url, **kwargs):
|
||||||
response = MagicMock()
|
response = MagicMock()
|
||||||
if 'unknown' in url:
|
if 'unknown' in url:
|
||||||
raise Exception("Network error")
|
raise requests.RequestException("Network error")
|
||||||
response.text = "content"
|
response.text = "content"
|
||||||
response.raise_for_status = MagicMock()
|
response.raise_for_status = MagicMock()
|
||||||
return response
|
return response
|
||||||
|
|
||||||
with patch('gitignore_generator.api.requests.get', side_effect=mock_get):
|
with patch.object(api.requests, 'get', side_effect=mock_get):
|
||||||
result = get_patterns_batch(['python', 'unknown_xyz_123'])
|
result = get_patterns_batch(['python', 'unknown_xyz_123'])
|
||||||
assert 'python' in result
|
assert 'python' in result
|
||||||
assert 'unknown_xyz_123' in result
|
assert 'unknown_xyz_123' in result
|
||||||
@@ -114,7 +118,7 @@ class TestGetList:
|
|||||||
def test_get_list_from_api(self):
|
def test_get_list_from_api(self):
|
||||||
"""Test fetching list from API."""
|
"""Test fetching list from API."""
|
||||||
mock_response = MagicMock()
|
mock_response = MagicMock()
|
||||||
mock_response.text = "python,node\ndjango,flask\n"
|
mock_response.text = "python\nnode\ndjango\nflask\n"
|
||||||
mock_response.raise_for_status = MagicMock()
|
mock_response.raise_for_status = MagicMock()
|
||||||
|
|
||||||
with patch('gitignore_generator.api.requests.get') as mock_get:
|
with patch('gitignore_generator.api.requests.get') as mock_get:
|
||||||
|
|||||||
Reference in New Issue
Block a user