From a8fdc49281b05322de96cd209cd7f53131c87799 Mon Sep 17 00:00:00 2001 From: Mark Veidemanis Date: Mon, 7 Feb 2022 17:42:11 +0000 Subject: [PATCH] Add some Agora tests --- handler/agora.py | 38 +++++++++++++ handler/tests/common.py | 109 ++++++++++++++++++++++++++++++++++++ handler/tests/test_agora.py | 23 ++++++++ 3 files changed, 170 insertions(+) create mode 100644 handler/tests/common.py create mode 100644 handler/tests/test_agora.py diff --git a/handler/agora.py b/handler/agora.py index 921443a..5910d0c 100644 --- a/handler/agora.py +++ b/handler/agora.py @@ -411,6 +411,44 @@ class Agora(object): else: deferToThread(self.update_prices, xmr, btc) + @handle_exceptions + def get_all_public_ads(self): + """ + Get all public ads for our listed currencies. + :return: dict of public ads keyed by currency + :rtype: dict + """ + public_ads = {} + crypto_map = { + "XMR": "monero", + "BTC": "bitcoin", + } + + # Get all currencies we have ads for, deduplicated + currencies = list(set([x[0] for x in loads(settings.Agora.DistList)])) + providers = loads(settings.Agora.ProviderList) + # We want to get the ads for each of these currencies and return the result + + for asset in loads(settings.Agora.AssetList): + rates_crypto = self.cg.get_price(ids=["monero", "bitcoin"], vs_currencies=currencies) + for currency in currencies: + cg_asset_name = crypto_map[asset] + try: + rates_current_crypto = rates_crypto[cg_asset_name][currency.lower()] + except KeyError: + self.log.error("Error getting public ads for currency {currency}", currency=currency) + continue + ads = self.wrap_public_ads(asset, currency, providers=providers, rates=rates_current_crypto) + if not ads: + continue + if currency in public_ads: + for ad in list(ads): # Copy the list so we don't mutate and get stuck in an infinite loop + public_ads[currency].append(ad) + else: + public_ads[currency] = ads + + return public_ads + @handle_exceptions def update_prices(self, xmr=True, btc=True): if xmr and btc: diff --git a/handler/tests/common.py b/handler/tests/common.py new file mode 100644 index 0000000..7d50e59 --- /dev/null +++ b/handler/tests/common.py @@ -0,0 +1,109 @@ +fake_public_ads = { + "NOK": [ + ["9c3d9fb6-c74c-4a35-bd9f-b6c74c7a3504", "topmonero", "2023.02", "REVOLUT", 1.3], + ["9c3d9fb6-c74c-4a35-bd9f-b6c74c7a3504", "topmonero", "2023.02", "REVOLUT", 1.3], + ], + "EUR": [ + ["65b452e3-a29f-4233-b452-e3a29fe23369", "topmonero", "184.28", "REVOLUT", 1.19], + ["65b452e3-a29f-4233-b452-e3a29fe23369", "topmonero", "184.28", "REVOLUT", 1.19], + ["87af6467-be02-476e-af64-67be02676e9a", "topmonero", "184.28", "REVOLUT", 1.19], + ["d2c6645c-6d56-4094-8664-5c6d5640941b", "topmonero", "184.28", "REVOLUT", 1.19], + ["65b452e3-a29f-4233-b452-e3a29fe23369", "topmonero", "184.28", "REVOLUT", 1.19], + ["65b452e3-a29f-4233-b452-e3a29fe23369", "topmonero", "184.28", "REVOLUT", 1.19], + ["87af6467-be02-476e-af64-67be02676e9a", "topmonero", "184.28", "REVOLUT", 1.19], + ["d2c6645c-6d56-4094-8664-5c6d5640941b", "topmonero", "184.28", "REVOLUT", 1.19], + ], + "GBP": [ + ["15e821b8-e570-4b0f-a821-b8e5709b0ffc", "SecureMole", "166.08", "REVOLUT", 1.27], + ["071ab272-ba37-4a14-9ab2-72ba37fa1484", "Boozymad89", "166.08", "REVOLUT", 1.27], + ["850f28eb-ce63-4ca7-8f28-ebce63dca707", "topmonero", "166.34", "REVOLUT", 1.27], + ["6727d9e5-c038-43f5-a7d9-e5c038c3f5be", "topmonero", "166.34", "REVOLUT", 1.27], + ["ca4feeb9-22d5-456d-8fee-b922d5c56d27", "Boozymad89", "175.51", "REVOLUT", 1.34], + ["15e821b8-e570-4b0f-a821-b8e5709b0ffc", "SecureMole", "166.08", "REVOLUT", 1.27], + ["071ab272-ba37-4a14-9ab2-72ba37fa1484", "Boozymad89", "166.08", "REVOLUT", 1.27], + ["850f28eb-ce63-4ca7-8f28-ebce63dca707", "topmonero", "166.34", "REVOLUT", 1.27], + ["6727d9e5-c038-43f5-a7d9-e5c038c3f5be", "topmonero", "166.34", "REVOLUT", 1.27], + ["ca4feeb9-22d5-456d-8fee-b922d5c56d27", "Boozymad89", "175.51", "REVOLUT", 1.34], + ], + "SEK": [ + ["f0e840b9-29ab-4a6f-a840-b929ab7a6fde", "topmonero", "2020.45", "REVOLUT", 1.25], + ["2252a3f7-6d6b-400b-92a3-f76d6bb00b50", "SwishaMonero", "2020.45", "REVOLUT", 1.25], + ["f0e840b9-29ab-4a6f-a840-b929ab7a6fde", "topmonero", "2020.45", "REVOLUT", 1.25], + ["2252a3f7-6d6b-400b-92a3-f76d6bb00b50", "SwishaMonero", "2020.45", "REVOLUT", 1.25], + ], + "CZK": [ + ["80aa52ef-a5d3-462c-aa52-efa5d3862cbe", "topmonero", "4872.73", "REVOLUT", 1.3], + ["80aa52ef-a5d3-462c-aa52-efa5d3862cbe", "topmonero", "4872.73", "REVOLUT", 1.3], + ], +} + +currency_map = { + "CZK": [["80aa52ef-a5d3-462c-aa52-efa5d3862cbe", "topmonero", "4872.73", "REVOLUT", 1.3]], + "GBP": [ + ["15e821b8-e570-4b0f-a821-b8e5709b0ffc", "SecureMole", "166.08", "REVOLUT", 1.27], + ["071ab272-ba37-4a14-9ab2-72ba37fa1484", "Boozymad89", "166.08", "REVOLUT", 1.27], + ["850f28eb-ce63-4ca7-8f28-ebce63dca707", "topmonero", "166.34", "REVOLUT", 1.27], + ["6727d9e5-c038-43f5-a7d9-e5c038c3f5be", "topmonero", "166.34", "REVOLUT", 1.27], + ["ca4feeb9-22d5-456d-8fee-b922d5c56d27", "Boozymad89", "175.51", "REVOLUT", 1.34], + ], + "NOK": [["9c3d9fb6-c74c-4a35-bd9f-b6c74c7a3504", "topmonero", "2023.02", "REVOLUT", 1.3]], + "SEK": [ + ["f0e840b9-29ab-4a6f-a840-b929ab7a6fde", "topmonero", "2020.45", "REVOLUT", 1.25], + ["2252a3f7-6d6b-400b-92a3-f76d6bb00b50", "SwishaMonero", "2020.45", "REVOLUT", 1.25], + ], + "EUR": [ + ["65b452e3-a29f-4233-b452-e3a29fe23369", "topmonero", "184.28", "REVOLUT", 1.19], + ["65b452e3-a29f-4233-b452-e3a29fe23369", "topmonero", "184.28", "REVOLUT", 1.19], + ["87af6467-be02-476e-af64-67be02676e9a", "topmonero", "184.28", "REVOLUT", 1.19], + ["d2c6645c-6d56-4094-8664-5c6d5640941b", "topmonero", "184.28", "REVOLUT", 1.19], + ], +} + +cg_prices = { + "bitcoin": { + "eur": 38164, + "czk": 924828, + "gbp": 32252, + "cad": 55384, + "dkk": 284076, + "nzd": 65925, + "usd": 43640, + "nok": 384190, + "pln": 173208, + "zar": 678716, + "huf": 13509146, + "sgd": 58674, + "rub": 3301769, + "jpy": 5021747, + "thb": 1439257, + "chf": 40315, + "aud": 61394, + "try": 593510, + "hkd": 340058, + "mxn": 902166, + "sek": 399011, + }, + "monero": { + "eur": 154.97, + "czk": 3755.44, + "gbp": 130.97, + "cad": 224.9, + "dkk": 1153.54, + "nzd": 267.7, + "usd": 177.21, + "nok": 1560.08, + "pln": 703.34, + "zar": 2756.05, + "huf": 54856, + "sgd": 238.26, + "rub": 13407.45, + "jpy": 20392, + "thb": 5844.37, + "chf": 163.71, + "aud": 249.3, + "try": 2410.06, + "hkd": 1380.87, + "mxn": 3663.41, + "sek": 1620.26, + }, +} diff --git a/handler/tests/test_agora.py b/handler/tests/test_agora.py new file mode 100644 index 0000000..1e729c6 --- /dev/null +++ b/handler/tests/test_agora.py @@ -0,0 +1,23 @@ +from unittest import TestCase +from unittest.mock import MagicMock + +from tests.common import fake_public_ads, currency_map, cg_prices +from agora import Agora + + +class TestAgora(TestCase): + def setUp(self): + self.agora = Agora() + + def mock_wrap_public_ads(self, asset, currency, providers, rates): + try: + return currency_map[currency] + except KeyError: + return + + def test_get_all_public_ads(self): + self.agora.cg.get_price = MagicMock() + self.agora.cg.get_price.return_value = cg_prices + self.agora.wrap_public_ads = self.mock_wrap_public_ads + public_ads = self.agora.get_all_public_ads() + self.assertDictEqual(public_ads, fake_public_ads)