def test_update_conversion_rates_success(app, monkeypatch): new_allowed_currencies = ("USD", "EUR") expected_rates = { "USD_USD": 1.0, "USD_EUR": 0.84, "EUR_USD": 1.19, "EUR_EUR": 1.0 } def new_get_conversion_rate(c1, c2): return expected_rates[f"{c1}_{c2}"] with app.app_context(): monkeypatch.setattr( "currency_convertor.currency.models.allowed_currencies", new_allowed_currencies, ) monkeypatch.setattr( "currency_convertor.currency.models.ConversionRate.get_conversion_rate", new_get_conversion_rate, ) res = ConversionRate.update_conversion_rates() assert res["success"] == 1 assert res["data"] == expected_rates # checking the database db_res = ConversionRate.query.filter_by(from_currency="EUR", to_currency="USD", latest=1).first() assert db_res.rate == Decimal(str(expected_rates["EUR_USD"]))
def init_db_command(): """ Clear existing data and create new tables. """ init_db() from currency_convertor.currency.models import ConversionRate res = ConversionRate.update_conversion_rates() click.echo("Result of database update:") click.echo("-------------------------------------") click.echo(res) click.echo("Initialized the database.")
def test_update_conversion_rates_fail(app, monkeypatch): new_allowed_currencies = ("USD", "EUR") expected_rates = { "USD_USD": 1.0, "USD_EUR": 0.33, "EUR_USD": 1.77, "EUR_EUR": 1.0 } def new_get_conversion_rate(c1, c2): if not (c1 == "EUR" and c2 == "EUR"): return expected_rates[f"{c1}_{c2}"] else: raise requests.exceptions.ConnectionError( "Connection Error Mock HAHAHA") with app.app_context(): # checking the database db_res_before = ConversionRate.query.filter_by(from_currency="EUR", to_currency="USD", latest=1).first() monkeypatch.setattr( "currency_convertor.currency.models.allowed_currencies", new_allowed_currencies, ) monkeypatch.setattr( "currency_convertor.currency.models.ConversionRate.get_conversion_rate", new_get_conversion_rate, ) res = ConversionRate.update_conversion_rates() assert res["success"] == 0 assert res["data"] == { "USD_USD": 1.0, "USD_EUR": 0.33, "EUR_USD": 1.77 } assert "error" in res # checking the database didn't change db_res_after = ConversionRate.query.filter_by(from_currency="EUR", to_currency="USD", latest=1).first() assert db_res_before.rate == db_res_after.rate
def update(): return ConversionRate.update_conversion_rates()