From 2d411a368e8d2829b749bf7233691c65411d2b31 Mon Sep 17 00:00:00 2001 From: Cameron Yick Date: Fri, 25 Aug 2017 01:32:43 -0400 Subject: [PATCH] Update Tests and Documentation --- README.rst | 1 + tests/test_tiingo.py | 49 +++++++++++++++++++++++++++++++++++--------- tiingo/api.py | 4 +--- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/README.rst b/README.rst index 6fc001a..865ff6e 100644 --- a/README.rst +++ b/README.rst @@ -74,6 +74,7 @@ Features * Easy programmatic access to Tiingo API * Coming soon: client-side validation of tickers, to save your API calls! +* Data validation of returned responses / case insensitivity * Free software: MIT license Credits diff --git a/tests/test_tiingo.py b/tests/test_tiingo.py index 783fa86..51cac85 100644 --- a/tests/test_tiingo.py +++ b/tests/test_tiingo.py @@ -2,9 +2,7 @@ # -*- coding: utf-8 -*- """Tests for `tiingo` package.""" - import pytest - from tiingo import TiingoClient @@ -22,13 +20,44 @@ def ticker_metadata_response(): return t.get_ticker_metadata("GOOGL") -def test_ticker_price(ticker_price_response): - """Sample pytest test function with the pytest fixture as an argument.""" - assert len(ticker_price_response) == 1 - assert ticker_price_response.get('adjClose') +@pytest.fixture +def fund_metadata_response(): + """Test /tiingo/ endpoint""" + t = TiingoClient() + return t.get_fund_metadata("vfinx") -def test_ticker_metadata(ticker_metadata_response): - """Refactor this with python data schemavalidation""" - assert ticker_metadata_response.get('ticker') == "GOOGL" - assert ticker_metadata_response.get("name") +@pytest.fixture +def fund_metrics_response(): + """Test /tiingo/ endpoint""" + t = TiingoClient() + 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_ticker_metadata(self, ticker_metadata_response): + """Refactor this with python data schemavalidation""" + assert ticker_metadata_response.get('ticker') == "GOOGL" + assert ticker_metadata_response.get("name") + + +# FUND ENDPOINTS +@pytest.mark.skip(reason="My API key doesn't have access to mutual funds API") +class TestMutualFunds(object): + + def test_fund_metadata(self, fund_metadata_response): + """Refactor this with python data schemavalidation""" + assert fund_metadata_response.get('ticker') == "vfinx" + assert fund_metadata_response.get("shareClass", startDate="2012-1-1", + endDate="2016-1-1") + + def test_fund_metrics(self, fund_metrics_response): + """Test Fund Level Metrics""" + assert len(fund_metrics_response) > 0 + assert fund_metrics_response[0].get('managementFee') diff --git a/tiingo/api.py b/tiingo/api.py index 6abdba8..77646c4 100644 --- a/tiingo/api.py +++ b/tiingo/api.py @@ -19,7 +19,6 @@ class TiingoClient(RestClient): api_key = self._config['api_key'] except KeyError: api_key = os.environ.get('TIINGO_API_KEY') - assert(api_key) self._headers = { @@ -33,7 +32,7 @@ class TiingoClient(RestClient): # TICKER PRICE ENDPOINTS # https://api.tiingo.com/docs/tiingo/daily - def get_price_metadata(self, ticker): + def get_ticker_metadata(self, ticker): """Return metadata for 1 ticker. """ url = "tiingo/daily/{}".format(ticker) @@ -56,7 +55,6 @@ class TiingoClient(RestClient): fmt (string): 'csv' or 'json' frequency (string): Resample frequency """ - url = "tiingo/daily/{}/prices".format(ticker) params = {