46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
import io
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from bonobo.commands.download import EXAMPLES_BASE_URL
|
|
from bonobo.util.testing import all_runners
|
|
|
|
|
|
@all_runners
|
|
def test_download_works_for_examples(runner):
|
|
expected_bytes = b"hello world"
|
|
|
|
class MockResponse(object):
|
|
def __init__(self):
|
|
self.status_code = 200
|
|
|
|
def iter_content(self, *args, **kwargs):
|
|
return [expected_bytes]
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, *args, **kwargs):
|
|
pass
|
|
|
|
fout = io.BytesIO()
|
|
fout.close = lambda: None
|
|
|
|
with patch("bonobo.commands.download._open_url") as mock_open_url, patch(
|
|
"bonobo.commands.download.open"
|
|
) as mock_open:
|
|
mock_open_url.return_value = MockResponse()
|
|
mock_open.return_value = fout
|
|
runner("download", "examples/datasets/coffeeshops.txt")
|
|
expected_url = EXAMPLES_BASE_URL + "datasets/coffeeshops.txt"
|
|
mock_open_url.assert_called_once_with(expected_url)
|
|
|
|
assert fout.getvalue() == expected_bytes
|
|
|
|
|
|
@all_runners
|
|
def test_download_fails_non_example(runner):
|
|
with pytest.raises(ValueError):
|
|
runner("download", "something/entirely/different.txt")
|