def test_get_returns_last_record(initial_records, cache): ordered_fields = redis.RedisInterface().ORDERED_KEYS records = redis.RedisInterface().get() assert len(records) == 1 _cmp_record(records[0], initial_records[0], ordered_fields)
def extra_records(initial_records, testing_rate): assert len(initial_records) == 2 extra_recs = copy.deepcopy(initial_records) rec3_amount = decimal.Decimal("3.45678") rec4_amount = decimal.Decimal("400.456738") extra_recs.append( CurrencyXrateFactory.build( amount=rec3_amount, currency="PLN", price=testing_rate, final_amount=testing_rate * rec3_amount, )) extra_recs.append( CurrencyXrateFactory.build( amount=rec4_amount, currency="EUR", price=testing_rate, final_amount=testing_rate * rec4_amount, )) assert len(redis.RedisInterface().get_all()) == 2 redis.RedisInterface().save(extra_recs[2]) redis.RedisInterface().save(extra_recs[3]) assert len(extra_recs) == 4 assert len(redis.RedisInterface().get_all()) == 4 return extra_recs
def test_get_returns_last_records_(initial_records, filter_key, filter_value, n, exp_results_qty, cache): assert len(redis.RedisInterface().get_all()) == 2 fields_order = redis.RedisInterface().ORDERED_KEYS records = redis.RedisInterface().get(key=filter_key, value=filter_value, n=n) assert len(records) == exp_results_qty for rec, exp_rec in zip(records, initial_records): _cmp_record(rec, exp_rec, fields_order)
def last(self, n=None, currency=None): from app.core.interfaces import my_sql, redis key = "currency" if currency else None cached_trades = redis.RedisInterface().get(key=key, value=currency, n=n) saved_trades = my_sql.MySqlInterface().get(key=key, value=currency, n=n) return cached_trades, saved_trades
def initial_records(cache, testing_rate): records = [] rec1_amount = decimal.Decimal("1.12345678") rec2_amount = decimal.Decimal("2.45678") records.append( CurrencyXrateFactory.build( amount=rec1_amount, currency="PLN", price=testing_rate, final_amount=testing_rate * rec1_amount, )) records.append( CurrencyXrateFactory.build( amount=rec2_amount, currency="EUR", price=testing_rate, final_amount=testing_rate * rec2_amount, )) assert redis.RedisInterface().get_all() == [] redis.RedisInterface().save(records[0]) redis.RedisInterface().save(records[1]) assert len(redis.RedisInterface().get_all()) == 2 return list(reversed(records))
def grab_and_save(self, amount, currency): from app.core.interfaces import my_sql, redis from app.core.models.currency_x_rate import CurrencyXrate logger.info(f"received amonut {amount} for{currency} currency") oxr = OpenXRateProvider() url, params = oxr.get_auth_latest_xrates_request() x_rates = self._make_request(url, params) if x_rates: xrate = oxr.parse_latest_xrates_response(x_rates, currency) dto = AmountPriceCalculator().Request(amount=amount, price=xrate) final_amount = AmountPriceCalculator().calculate_final_amount(dto) x_rate = CurrencyXrate(currency=currency, amount=amount, final_amount=final_amount, price=xrate) my_sql.MySqlInterface().save(x_rate) redis.RedisInterface().save(x_rate) logger.info(f"Succesfully grabbed and saved results for {amount} " f"{currency} with final cost: {final_amount} USD")
def test_get_all(extra_records): records = redis.RedisInterface().get_all() assert len(set([r[0] for r in records])) == len(records) assert len(records) == len(extra_records)