diff --git a/tests/test_LoaderChain.py b/tests/test_LoaderChain.py new file mode 100644 index 0000000000000000000000000000000000000000..80dcdb2e828bb4b85b2f420a7b4ef3b08f46bfb9 --- /dev/null +++ b/tests/test_LoaderChain.py @@ -0,0 +1,71 @@ +import io + +import pytest + +import oxrlib.loaders + +from . import any_date + +SUCCESS_S = '"success"\n' +ERROR = oxrlib.loaders.LoaderNoDataError("test") + +class FakeLoader: + def __init__(self, result): + self.result = result + + def _respond(self, *args, **kwargs): + return io.StringIO(self.result) + + def __getattr__(self, name): + return self._respond + + +class FakeErrorLoader(FakeLoader): + def __init__(self, error): + self.error = error + + def _respond(self, *args, **kwargs): + raise self.error + + +@pytest.fixture +def lchain(): + return oxrlib.loaders.LoaderChain() + +@pytest.fixture +def good_loader(): + return FakeLoader(SUCCESS_S) + +@pytest.fixture +def error_loader(): + return FakeErrorLoader(ERROR) + +def test_no_loaders(lchain, any_date): + try: + lchain.historical(any_date, 'USD') + except oxrlib.loaders.NoLoadersError: + pass + else: + assert False, "expected NoLoadersError not raised" + +def test_one_with_success(lchain, any_date, good_loader): + lchain.add_loader(good_loader) + response = lchain.historical(any_date, 'USD') + assert response.read(32) == SUCCESS_S + +def test_two_with_success(lchain, any_date, good_loader, error_loader): + lchain.add_loader(error_loader) + lchain.add_loader(good_loader) + response = lchain.historical(any_date, 'USD') + assert response.read(32) == SUCCESS_S + +@pytest.mark.parametrize('count', [1, 2]) +def test_no_success(lchain, any_date, error_loader, count): + for _ in range(count): + lchain.add_loader(error_loader) + try: + lchain.historical(any_date, 'USD') + except type(ERROR) as error: + assert error is ERROR + else: + assert False, "{} not raised".format(type(ERROR).__name__)