| """pytest tests for axolotl CLI utils.""" |
|
|
| |
|
|
| import json |
| from unittest.mock import Mock, patch |
|
|
| import click |
| import pytest |
| import requests |
|
|
| from axolotl.cli.utils import fetch_from_github |
|
|
| |
| 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): |
| 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) |
|
|
| |
| 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""" |
| |
| 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) |
|
|
| |
| 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) |
|
|