Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ValueRaider committed Dec 13, 2022
1 parent df7af50 commit e7bf360
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 34 deletions.
2 changes: 1 addition & 1 deletion tests/prices.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class TestPriceHistory(unittest.TestCase):

@classmethod
def setUpClass(cls):
cls.session = requests_cache.CachedSession(backend='memory')
cls.session = requests_cache.CachedSession("/home/gonzo/.cache/yfinance.cache")

@classmethod
def tearDownClass(cls):
Expand Down
93 changes: 62 additions & 31 deletions tests/ticker.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,20 @@ def test_goodTicker(self):


class TestTickerHistory(unittest.TestCase):
session = None

@classmethod
def setUpClass(cls):
cls.session = requests_cache.CachedSession("/home/gonzo/.cache/yfinance.cache")

@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()

def setUp(self):
# use a ticker that has dividends
self.ticker = yf.Ticker("IBM")
self.ticker = yf.Ticker("IBM", session=self.session)

def tearDown(self):
self.ticker = None
Expand Down Expand Up @@ -176,9 +187,19 @@ def test_actions(self):


class TestTickerEarnings(unittest.TestCase):
session = None

@classmethod
def setUpClass(cls):
cls.session = requests_cache.CachedSession("/home/gonzo/.cache/yfinance.cache")

@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()

def setUp(self):
self.ticker = yf.Ticker("GOOGL")
self.ticker = yf.Ticker("GOOGL", session=self.session)

def tearDown(self):
self.ticker = None
Expand Down Expand Up @@ -237,9 +258,19 @@ def test_earnings_dates_with_limit(self):


class TestTickerHolders(unittest.TestCase):
session = None

@classmethod
def setUpClass(cls):
cls.session = requests_cache.CachedSession("/home/gonzo/.cache/yfinance.cache")

@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()

def setUp(self):
self.ticker = yf.Ticker("GOOGL")
self.ticker = yf.Ticker("GOOGL", session=self.session)

def tearDown(self):
self.ticker = None
Expand Down Expand Up @@ -274,7 +305,7 @@ class TestTickerMiscFinancials(unittest.TestCase):

@classmethod
def setUpClass(cls):
cls.session = requests_cache.CachedSession(backend='memory')
cls.session = requests_cache.CachedSession("/home/gonzo/.cache/yfinance.cache")

@classmethod
def tearDownClass(cls):
Expand All @@ -283,7 +314,7 @@ def tearDownClass(cls):

def setUp(self):
self.ticker = yf.Ticker("GOOGL", session=self.session)

# For ticker 'BSE.AX' (and others), Yahoo not returning
# full quarterly financials (usually cash-flow) with all entries,
# instead returns a smaller version in different data store.
Expand Down Expand Up @@ -353,12 +384,12 @@ def test_quarterly_income_statement(self):

def test_quarterly_income_statement_old_fmt(self):
expected_row = "TotalRevenue"
data = self.ticker_old_fmt.quarterly_income_stmt
data = self.ticker_old_fmt.get_income_stmt(freq="quarterly", legacy=True)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
self.assertIn(expected_row, data.index, "Did not find expected row in index")

data_cached = self.ticker_old_fmt.quarterly_income_stmt
data_cached = self.ticker_old_fmt.get_income_stmt(freq="quarterly", legacy=True)
self.assertIs(data, data_cached, "data not cached")

def test_balance_sheet(self):
Expand Down Expand Up @@ -387,19 +418,9 @@ def test_balance_sheet(self):
self.assertIn(k, data.index, "Did not find expected row in index")

# Test to_dict
data = self.ticker.get_income_stmt(as_dict=True)
data = self.ticker.get_balance_sheet(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")

def test_quarterly_balance_sheet_old_fmt(self):
expected_row = "TotalAssets"
data = self.ticker_old_fmt.quarterly_balance_sheet
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
self.assertIn(expected_row, data.index, "Did not find expected row in index")

data_cached = self.ticker_old_fmt.quarterly_balance_sheet
self.assertIs(data, data_cached, "data not cached")

def test_quarterly_balance_sheet(self):
expected_keys = ["Total Assets", "Net PPE"]
expected_periods_days = 365//4
Expand All @@ -426,9 +447,19 @@ def test_quarterly_balance_sheet(self):
self.assertIn(k, data.index, "Did not find expected row in index")

# Test to_dict
data = self.ticker.get_income_stmt(as_dict=True)
data = self.ticker.get_balance_sheet(as_dict=True, freq="quarterly")
self.assertIsInstance(data, dict, "data has wrong type")

def test_quarterly_balance_sheet_old_fmt(self):
expected_row = "TotalAssets"
data = self.ticker_old_fmt.get_balance_sheet(freq="quarterly", legacy=True)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
self.assertIn(expected_row, data.index, "Did not find expected row in index")

data_cached = self.ticker_old_fmt.get_balance_sheet(freq="quarterly", legacy=True)
self.assertIs(data, data_cached, "data not cached")

def test_cash_flow(self):
expected_keys = ["Operating Cash Flow", "Net PPE Purchase And Sale"]
expected_periods_days = 365
Expand All @@ -455,19 +486,9 @@ def test_cash_flow(self):
self.assertIn(k, data.index, "Did not find expected row in index")

# Test to_dict
data = self.ticker.get_income_stmt(as_dict=True)
data = self.ticker.get_cashflow(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")

def test_quarterly_cashflow_old_fmt(self):
expected_row = "NetIncome"
data = self.ticker_old_fmt.quarterly_cashflow
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
self.assertIn(expected_row, data.index, "Did not find expected row in index")

data_cached = self.ticker_old_fmt.quarterly_cashflow
self.assertIs(data, data_cached, "data not cached")

def test_quarterly_cash_flow(self):
expected_keys = ["Operating Cash Flow", "Net PPE Purchase And Sale"]
expected_periods_days = 365//4
Expand All @@ -494,9 +515,19 @@ def test_quarterly_cash_flow(self):
self.assertIn(k, data.index, "Did not find expected row in index")

# Test to_dict
data = self.ticker.get_income_stmt(as_dict=True)
data = self.ticker.get_cashflow(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")

def test_quarterly_cashflow_old_fmt(self):
expected_row = "NetIncome"
data = self.ticker_old_fmt.get_cashflow(legacy=True, freq="quarterly")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
self.assertIn(expected_row, data.index, "Did not find expected row in index")

data_cached = self.ticker_old_fmt.get_cashflow(legacy=True, freq="quarterly")
self.assertIs(data, data_cached, "data not cached")

def test_sustainability(self):
data = self.ticker.sustainability
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
Expand Down
2 changes: 1 addition & 1 deletion yfinance/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ def history(self, period="1mo", interval="1d",
# Store the meta data that gets retrieved simultaneously
try:
self._history_metadata = data["chart"]["result"][0]["meta"]
except KeyError:
except Exception:
self._history_metadata = {}

err_msg = "No data found for this date range, symbol may be delisted"
Expand Down
6 changes: 5 additions & 1 deletion yfinance/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,11 @@ def format_quarterly_financial_statement(_statement, level_detail, order):


def camel2title(strings: List[str], sep: str = ' ', acronyms: Optional[List[str]] = None) -> List[str]:
if isinstance(strings, str) or not hasattr(strings, '__iter__') or not isinstance(strings[0], str):
if isinstance(strings, str) or not hasattr(strings, '__iter__'):
raise TypeError("camel2title() 'strings' argument must be iterable of strings")
if len(strings) == 0:
return strings
if not isinstance(strings[0], str):
raise TypeError("camel2title() 'strings' argument must be iterable of strings")
if not isinstance(sep, str) or len(sep) != 1:
raise ValueError(f"camel2title() 'sep' argument = '{sep}' must be single character")
Expand Down

0 comments on commit e7bf360

Please sign in to comment.