mirror of
https://github.com/hydrosquall/tiingo-python.git
synced 2026-02-01 00:54:21 +01:00
Use Decorator Syntax for Tests, Update Broken Cassettes
The previous issue was that the cassettes weren't called with the same params as the non-object requests.
This commit is contained in:
@@ -3,9 +3,7 @@
|
||||
"""Tests for `tiingo` package."""
|
||||
|
||||
import csv
|
||||
|
||||
from unittest import TestCase
|
||||
|
||||
import vcr
|
||||
|
||||
from tiingo import TiingoClient
|
||||
@@ -35,54 +33,60 @@ class TestTickerPrices(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self._client = TiingoClient()
|
||||
# Stub all endpoints that get reused
|
||||
with vcr.use_cassette('tests/fixtures/ticker_price.yaml'):
|
||||
self._ticker_price_response = \
|
||||
self._client.get_ticker_price("GOOGL")
|
||||
with vcr.use_cassette('tests/fixtures/ticker_metadata.yaml'):
|
||||
self._ticker_metadata_response = \
|
||||
self._client.get_ticker_metadata("GOOGL")
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/ticker_metadata.yaml')
|
||||
def test_ticker_metadata(self):
|
||||
"""Refactor this with python data schemavalidation"""
|
||||
metadata = self._client.get_ticker_metadata("GOOGL")
|
||||
|
||||
assert metadata.get('ticker') == "GOOGL"
|
||||
assert metadata.get("name")
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/ticker_metadata.yaml')
|
||||
def test_ticker_metadata_as_object(self):
|
||||
metadata = self._client.get_ticker_metadata("GOOGL", fmt="object")
|
||||
assert metadata.ticker == "GOOGL" # Access property via ATTRIBUTE
|
||||
assert metadata.name # (contrast with key access above
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/ticker_price.yaml')
|
||||
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')
|
||||
"""Test that EOD Prices Endpoint works"""
|
||||
prices = self._client.get_ticker_price("GOOGL")
|
||||
assert len(prices) == 1
|
||||
assert prices[0].get('adjClose')
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/ticker_price.yaml')
|
||||
def test_ticker_price_as_object(self):
|
||||
"""Test that EOD Prices Endpoint works"""
|
||||
prices = self._client.get_ticker_price("GOOGL", fmt="object")
|
||||
assert len(prices) == 1
|
||||
assert hasattr(prices[0], 'adjClose')
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/ticker_price_with_date.yaml')
|
||||
def test_ticker_price_with_date(self):
|
||||
"""Test the EOD Prices Endpoint with data param"""
|
||||
with vcr.use_cassette('tests/fixtures/ticker_price_with_date.yaml'):
|
||||
prices = self._client.get_ticker_price("GOOGL",
|
||||
startDate="2015-01-01",
|
||||
endDate="2015-01-05")
|
||||
prices = self._client.get_ticker_price("GOOGL",
|
||||
startDate="2015-01-01",
|
||||
endDate="2015-01-05")
|
||||
self.assertGreater(len(prices), 1)
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/ticker_price_with_date_csv.yaml')
|
||||
def test_ticker_price_with_csv(self):
|
||||
"""Confirm that CSV endpoint works"""
|
||||
with vcr.use_cassette('tests/fixtures/ticker_price_with_date_csv.yaml'):
|
||||
prices_csv = self._client.get_ticker_price("GOOGL",
|
||||
startDate="2015-01-01",
|
||||
endDate="2015-01-05",
|
||||
fmt='csv')
|
||||
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 self._ticker_metadata_response.get('ticker') == "GOOGL"
|
||||
assert self._ticker_metadata_response.get("name")
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/list_stock_tickers.yaml')
|
||||
def test_list_stock_tickers(self):
|
||||
"""Update this test when the method is added."""
|
||||
with vcr.use_cassette('tests/fixtures/list_stock_tickers.yaml'):
|
||||
tickers = self._client.list_stock_tickers()
|
||||
tickers = self._client.list_stock_tickers()
|
||||
assert len(tickers) > 1
|
||||
assert all(ticker['assetType'] == 'Stock' for ticker in tickers)
|
||||
|
||||
def test_ticker_metadata_for_object(self):
|
||||
data = self._client.get_ticker_metadata("GOOGL", fmt='object')
|
||||
assert len(data[0].name) > 1
|
||||
|
||||
|
||||
# tiingo/news
|
||||
class TestNews(TestCase):
|
||||
@@ -100,51 +104,47 @@ class TestNews(TestCase):
|
||||
'crawlDate',
|
||||
'id'
|
||||
]
|
||||
|
||||
def test_get_news_articles(self):
|
||||
"""Confirm that news article work"""
|
||||
NUM_ARTICLES = 1
|
||||
|
||||
search_params = {
|
||||
# Search for articles about a topic
|
||||
self.num_articles = 1
|
||||
self.search_params = {
|
||||
"tickers": ["aapl", "googl"],
|
||||
"tags": ["Technology", "Bitcoin"],
|
||||
"startDate": "2016-01-01",
|
||||
"endDate": "2017-08-31",
|
||||
"sources": ['washingtonpost.com', 'altcointoday.com'],
|
||||
"limit": NUM_ARTICLES
|
||||
"limit": self.num_articles
|
||||
}
|
||||
|
||||
with vcr.use_cassette('tests/fixtures/news.yaml'):
|
||||
articles = self._client.get_news(**search_params)
|
||||
assert len(articles) == NUM_ARTICLES
|
||||
@vcr.use_cassette('tests/fixtures/news.yaml')
|
||||
def test_get_news_articles(self):
|
||||
articles = self._client.get_news(**self.search_params)
|
||||
assert len(articles) == self.num_articles
|
||||
for article in articles:
|
||||
assert all(key in article for key in self.article_keys)
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/news_bulk.yaml')
|
||||
def test_get_news_bulk(self):
|
||||
"""Fails because this API key lacks institutional license"""
|
||||
|
||||
with self.assertRaises(RestClientError),\
|
||||
vcr.use_cassette('tests/fixtures/news_bulk.yaml'):
|
||||
with self.assertRaises(RestClientError):
|
||||
value = self._client.get_bulk_news(file_id="1")
|
||||
assert value
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/news_bulk_file_ids.yaml')
|
||||
def test_get_news_bulk_ids(self):
|
||||
"""Fails because this API key lacks institutional license"""
|
||||
|
||||
with self.assertRaises(RestClientError),\
|
||||
vcr.use_cassette('tests/fixtures/news_bulk_file_ids.yaml'):
|
||||
with self.assertRaises(RestClientError):
|
||||
value = self._client.get_bulk_news()
|
||||
assert value
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/news.yaml')
|
||||
def test_get_news_as_objects(self):
|
||||
"""Fails because this API key lacks institutional license"""
|
||||
with self.assertRaises(RestClientError),\
|
||||
vcr.use_cassette('tests/fixtures/news.yaml'):
|
||||
value = self._client.get_news(fmt="object")
|
||||
assert value
|
||||
articles = self._client.get_news(fmt="object", **self.search_params)
|
||||
assert len(articles) == self.num_articles
|
||||
for article in articles: # check if attribute access works
|
||||
assert all(hasattr(article, key) for key in self.article_keys)
|
||||
|
||||
@vcr.use_cassette('tests/fixtures/news_bulk.yaml')
|
||||
def test_news_bulk_as_objects(self):
|
||||
"""Fails because this API key lacks institutional license"""
|
||||
with self.assertRaises(RestClientError),\
|
||||
vcr.use_cassette('tests/fixtures/news_bulk.yaml'):
|
||||
assert self._client.get_bulk_news(fmt="object")
|
||||
with self.assertRaises(RestClientError):
|
||||
assert self._client.get_bulk_news(file_id="1", fmt="object")
|
||||
|
||||
Reference in New Issue
Block a user