Files
openfe/openfecli/tests/test_fetching.py
2023-05-10 12:13:57 -04:00

84 lines
2.6 KiB
Python

import pytest
from .conftest import HAS_INTERNET
from openfecli.fetching import URLFetcher, PkgResourceFetcher
from openfecli.fetching import FetchablePlugin
class FetcherTester:
@pytest.fixture
def fetcher(self):
raise NotImplementedError()
def test_resources(self):
raise NotImplementedError()
def test_plugin(self, fetcher):
# this is just a smoke test; individual plugins should test that
# they work
plugin = fetcher.plugin
assert isinstance(plugin, FetchablePlugin)
def test_call(self, fetcher, tmp_path):
# Here we just check that the machinery works. Each plugin should
# have a test to ensure that we're getting the right kind of file.
paths = [tmp_path / filename for _, filename in fetcher.resources]
for path in paths:
assert not path.exists()
fetcher(tmp_path)
for path in paths:
assert path.exists()
class TestURLFetcher(FetcherTester):
@pytest.fixture
def fetcher(self):
return URLFetcher(
resources=[("https://www.google.com/", "index.html")],
short_name="google",
short_help="The Goog",
requires_ofe=(0, 7, 0),
long_help="Google, an Alphabet company"
)
def test_resources(self, fetcher):
expected = [("https://www.google.com/", "index.html")]
assert list(fetcher.resources) == expected
@pytest.mark.skipif(not HAS_INTERNET,
reason="Internet seems to be unavailable")
def test_call(self, fetcher, tmp_path):
super().test_call(fetcher, tmp_path)
@pytest.mark.skipif(not HAS_INTERNET,
reason="Internet seems to be unavailable")
def test_without_trailing_slash(self, tmp_path):
fetcher = URLFetcher(
resources=[("https://www.google.com", "index.html")],
short_name="goog2",
short_help="more goog",
requires_ofe=(0, 7, 0),
long_help="What if you forget the trailing slash?"
)
self.test_call(fetcher, tmp_path)
class TestPkgResourceFetcher(FetcherTester):
@pytest.fixture
def fetcher(self):
return PkgResourceFetcher(
resources=[('openfecli.tests', 'test_fetching.py')],
short_name="me",
short_help="download this file",
requires_ofe=(0, 7, 4),
long_help="whoa, meta."
)
def test_resources(self, fetcher):
expected = [('openfecli.tests', 'test_fetching.py')]
assert list(fetcher.resources) == expected