diff --git a/tests/test_tiingo.py b/tests/test_tiingo.py index 6da7fe7..5fc1ae7 100644 --- a/tests/test_tiingo.py +++ b/tests/test_tiingo.py @@ -2,9 +2,12 @@ # -*- coding: utf-8 -*- """Tests for `tiingo` package.""" +import csv import pytest +from unittest import TestCase from tiingo import TiingoClient + # TODO # Add tests for # Invalid API key @@ -16,21 +19,6 @@ from tiingo import TiingoClient # Expand test coverage -# Refactor fixtures into separate file -@pytest.fixture -def ticker_price_response(): - """Test /tiingo//prices endpoint""" - t = TiingoClient() - return t.get_ticker_price("GOOGL") - - -@pytest.fixture -def ticker_metadata_response(): - """Test /tiingo/ endpoint""" - t = TiingoClient() - return t.get_ticker_metadata("GOOGL") - - @pytest.fixture def fund_metadata_response(): """Test /tiingo/ endpoint""" @@ -45,22 +33,62 @@ def fund_metrics_response(): return t.get_fund_metrics("VFINX") -# PRICES ENDPOINTS -class TestTickerPrices(object): - def test_ticker_price(self, ticker_price_response): - """Test the EOD Prices Endpoint""" - assert len(ticker_price_response) == 1 - assert ticker_price_response[0].get('adjClose') +def test_client_repr(): + """Test representation of client when logged to console""" + client = TiingoClient() + base_url = "https://api.tiingo.com" + assert repr(client) == "".format(base_url) - def test_ticker_metadata(self, ticker_metadata_response): + +# PRICES ENDPOINTS +class TestTickerPrices(TestCase): + + def setUp(self): + self._client = TiingoClient() + # Stub all endpoints that get reused + self._ticker_price_response = self._client.get_ticker_price("GOOGL") + self._ticker_metadata_response = \ + self._client.get_ticker_metadata("GOOGL") + + def test_ticker_price(self): + """Test the EOD Prices Endpoint""" + assert len(self._ticker_price_response) == 1 + assert self._ticker_price_response[0].get('adjClose') + + def test_ticker_price_with_date(self): + """Test the EOD Prices Endpoint with data param""" + prices = self._client.get_ticker_price("GOOGL", + startDate="2015-01-01", + endDate="2015-01-05") + self.assertGreater(len(prices), 1) + + def test_ticker_price_with_csv(self): + """Confirm that CSV endpoint works""" + prices_csv = self._client.get_ticker_price("GOOGL", + startDate="2015-01-01", + endDate="2015-01-05", + fmt='csv') + reader = csv.reader(prices_csv.splitlines(), delimiter=",") + rows = list(reader) + assert len(rows) > 2 # more than 1 day of data + + def test_ticker_metadata(self): """Refactor this with python data schemavalidation""" - assert ticker_metadata_response.get('ticker') == "GOOGL" - assert ticker_metadata_response.get("name") + assert self._ticker_metadata_response.get('ticker') == "GOOGL" + assert self._ticker_metadata_response.get("name") + + def test_list_tickers(self): + """Update this test when the method is added.""" + with self.assertRaises(NotImplementedError): + response = self._client.list_tickers() + assert not response # FUND ENDPOINTS +# tiingo/funds +# Try to get a working API key from Tiingo development for testing purposes @pytest.mark.skip(reason="My API key doesn't have access to mutual funds API") -class TestMutualFunds(object): +class TestMutualFunds(TestCase): def test_fund_metadata(self, fund_metadata_response): """Refactor this with python data schemavalidation""" @@ -72,3 +100,18 @@ class TestMutualFunds(object): """Test Fund Level Metrics""" assert len(fund_metrics_response) > 0 assert fund_metrics_response[0].get('managementFee') + + +# News Feed +# tiingo/news +class TestNews(TestCase): + + def setUp(self): + self._client = TiingoClient() + + def test_get_news_articles(self): + """Rewrite when method is implemented + """ + with self.assertRaises(NotImplementedError) as context: + self.get_news() + print(context) diff --git a/tiingo/api.py b/tiingo/api.py index 7b55990..5b4c000 100644 --- a/tiingo/api.py +++ b/tiingo/api.py @@ -85,7 +85,7 @@ class TiingoClient(RestClient): if fmt == "json": return response.json() else: - return response.content + return response.content.decode("utf-8") # FUND DATA (From over 26,000 mutual funds) # https://api.tiingo.com/docs/tiingo/funds