fix: resolve CI test failures with proper mock patching
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-01-30 15:57:23 +00:00
parent 1f74643277
commit 0801432a2c

View File

@@ -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: