* Fix broken CLI; remove duplicate metadata from setup.py * Adding tests.yml CLI check * updating * remove test with requests to github due to rate limiting --------- Co-authored-by: Dan Saunders <dan@axolotl.ai>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
"""pytest tests for axolotl CLI utils."""
|
|
# pylint: disable=redefined-outer-name
|
|
import json
|
|
from unittest.mock import Mock, patch
|
|
|
|
import click
|
|
import pytest
|
|
import requests
|
|
|
|
from axolotl.cli.utils import fetch_from_github
|
|
|
|
# Sample GitHub API response
|
|
MOCK_TREE_RESPONSE = {
|
|
"tree": [
|
|
{"path": "examples/config1.yml", "type": "blob", "sha": "abc123"},
|
|
{"path": "examples/config2.yml", "type": "blob", "sha": "def456"},
|
|
{"path": "other/file.txt", "type": "blob", "sha": "xyz789"},
|
|
]
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_responses():
|
|
"""Mock responses for API and file downloads"""
|
|
|
|
def mock_get(url, timeout=None): # pylint: disable=unused-argument
|
|
response = Mock()
|
|
if "api.github.com" in url:
|
|
response.text = json.dumps(MOCK_TREE_RESPONSE)
|
|
else:
|
|
response.content = b"file content"
|
|
return response
|
|
|
|
return mock_get
|
|
|
|
|
|
def test_fetch_from_github_new_files(tmp_path, mock_responses):
|
|
"""Test fetching new files"""
|
|
with patch("requests.get", mock_responses):
|
|
fetch_from_github("examples/", tmp_path)
|
|
|
|
# Verify files were created
|
|
assert (tmp_path / "config1.yml").exists()
|
|
assert (tmp_path / "config2.yml").exists()
|
|
assert not (tmp_path / "file.txt").exists()
|
|
|
|
|
|
def test_fetch_from_github_unchanged_files(tmp_path, mock_responses):
|
|
"""Test handling of unchanged files"""
|
|
# Create existing file with matching SHA
|
|
existing_file = tmp_path / "config1.yml"
|
|
existing_file.write_bytes(b"file content")
|
|
|
|
with patch("requests.get", mock_responses):
|
|
fetch_from_github("examples/", tmp_path)
|
|
|
|
# File should not be downloaded again
|
|
assert existing_file.read_bytes() == b"file content"
|
|
|
|
|
|
def test_fetch_from_github_invalid_prefix(mock_responses):
|
|
"""Test error handling for invalid directory prefix"""
|
|
with patch("requests.get", mock_responses):
|
|
with pytest.raises(click.ClickException):
|
|
fetch_from_github("nonexistent/", None)
|
|
|
|
|
|
def test_fetch_from_github_network_error():
|
|
"""Test handling of network errors"""
|
|
with patch("requests.get", side_effect=requests.RequestException):
|
|
with pytest.raises(requests.RequestException):
|
|
fetch_from_github("examples/", None)
|