class FinancialDataRangesCacheTestCase(unittest.TestCase): def setUp(self): self.mock_data_getter = mock.Mock() self.mock_db = mock.Mock() self.date_range_cache = FinancialIntervalCache(get_data=self.mock_data_getter, database=self.mock_db) def test_get_cache_hit(self): symbol = 'ABC' date = datetime.datetime(2012, 12, 1) value = 100. self.mock_db.get.return_value = value cache_value = self.date_range_cache.get(symbol=symbol, dates=[date]).next() self.assertEqual(cache_value, value) def test_cache_miss(self): symbol = 'ABC' date = datetime.datetime(2012, 12, 1) self.mock_db.get.return_value = None mock_get_set = mock.Mock() self.date_range_cache._get_set = mock_get_set self.mock_db.get.return_value = None self.date_range_cache.get(symbol=symbol, dates=[date]).next() mock_get_set.assert_called_once_with(symbol=symbol, date=date) def test_no_data_exception(self): symbol = 'XYZ' start_date, end_date = datetime.datetime(2012, 9, 1, tzinfo=pytz.UTC), datetime.datetime(2012, 12, 1, tzinfo=pytz.UTC) mock_getter = mock.Mock() mock_getter.side_effect = NoDataForStockForRange(start=start_date, end=end_date) self.date_range_cache._get_data = mock_getter mock_database = mock.Mock() self.date_range_cache._database = mock_database value = self.date_range_cache._get_set(symbol=symbol, date=None) self.assertTrue(np.isnan(value)) mock_database.set_interval.assert_called_with(symbol=symbol, start=start_date, end=end_date, value='NaN')