def test_get_usd_balances_copy_price( self, timezone_now_mock: MagicMock, get_native_coin_usd_price_mock: MagicMock, get_token_eth_value_mock: MagicMock, ): balance_service = self.balance_service safe_address = SafeContractFactory().address random_address = Account.create().address balances = balance_service.get_usd_balances(safe_address) self.assertEqual(len(balances), 1) self.assertIsNone(balances[0].token_address) self.assertEqual(balances[0].balance, 0) tokens_value = int(12 * 1e18) erc20 = deploy_erc20(self.w3, "Galactic Credit Standard", "GCS", safe_address, tokens_value) ERC20TransferFactory(address=erc20.address, to=safe_address) def get_token_eth_value( self, token_address: ChecksumAddress) -> Optional[float]: if token_address == erc20.address: return 0.4 elif token_address == random_address: return 0.1 get_token_eth_value_mock.side_effect = get_token_eth_value for expected_token_eth_value in (0.4, 0.1): with self.subTest( expected_token_eth_value=expected_token_eth_value): balances = balance_service.get_usd_balances(safe_address) self.assertEqual(len(balances), 2) self.assertCountEqual( balances, [ BalanceWithFiat( None, None, 0, 1.0, timezone_now_mock.return_value, 0.0, 123.4, ), BalanceWithFiat( erc20.address, balance_service.get_token_info(erc20.address), tokens_value, expected_token_eth_value, timezone_now_mock.return_value, round( 123.4 * expected_token_eth_value * (tokens_value / 1e18), 4, ), round(123.4 * expected_token_eth_value, 4), ), ], ) token = Token.objects.get(address=erc20.address) token.copy_price = random_address token.save(update_fields=["copy_price"]) balance_service.cache_token_info.clear()
def test_get_usd_balances( self, timezone_now_mock: MagicMock, get_native_coin_usd_price_mock: MagicMock, get_token_eth_value_mock: MagicMock, ): balance_service = self.balance_service safe_address = Account.create().address SafeContractFactory(address=safe_address) value = 7 self.send_ether(safe_address, 7) balances = balance_service.get_usd_balances(safe_address) self.assertEqual(len(balances), 1) self.assertIsNone(balances[0].token_address) self.assertEqual(balances[0].balance, value) tokens_value = int(12 * 1e18) erc20 = deploy_erc20(self.w3, "Eurodollar", "EUD", safe_address, tokens_value) balances = balance_service.get_usd_balances(safe_address) self.assertEqual(len(balances), 1) ERC20TransferFactory(address=erc20.address, to=safe_address) balances = balance_service.get_usd_balances(safe_address) token_info = balance_service.get_token_info(erc20.address) self.assertCountEqual( balances, [ BalanceWithFiat(None, None, value, 1.0, timezone_now_mock.return_value, 0.0, 123.4), BalanceWithFiat( erc20.address, token_info, tokens_value, 0.4, timezone_now_mock.return_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4), ), ], ) balances = balance_service.get_usd_balances(safe_address, only_trusted=True) self.assertCountEqual( balances, [ BalanceWithFiat(None, None, value, 1.0, timezone_now_mock.return_value, 0.0, 123.4), ], ) Token.objects.filter(address=erc20.address).update(trusted=True, spam=False) balances = balance_service.get_usd_balances(safe_address, only_trusted=True) self.assertCountEqual( balances, [ BalanceWithFiat(None, None, value, 1.0, timezone_now_mock.return_value, 0.0, 123.4), BalanceWithFiat( erc20.address, token_info, tokens_value, 0.4, timezone_now_mock.return_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4), ), ], ) # Test sorting erc20_2 = deploy_erc20(self.w3, "Peseta", "PTA", safe_address, tokens_value) token_info_2 = balance_service.get_token_info(erc20_2.address) erc20_3 = deploy_erc20(self.w3, "Double Dollars", "DD", safe_address, tokens_value) token_info_3 = balance_service.get_token_info(erc20_3.address) ERC20TransferFactory(address=erc20_2.address, to=safe_address) ERC20TransferFactory(address=erc20_3.address, to=safe_address) balances = balance_service.get_usd_balances(safe_address) token_info = balance_service.get_token_info(erc20.address) self.assertCountEqual( balances, [ BalanceWithFiat(None, None, value, 1.0, timezone_now_mock.return_value, 0.0, 123.4), BalanceWithFiat( erc20_3.address, token_info_3, tokens_value, 0.4, timezone_now_mock.return_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4), ), BalanceWithFiat( erc20.address, token_info, tokens_value, 0.4, timezone_now_mock.return_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4), ), BalanceWithFiat( erc20_2.address, token_info_2, tokens_value, 0.4, timezone_now_mock.return_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4), ), ], )
def test_get_usd_balances(self, get_eth_price_mock: MagicMock, get_token_eth_value_mock: MagicMock): balance_service = BalanceServiceProvider() safe_address = Account.create().address SafeContractFactory(address=safe_address) value = 7 self.send_ether(safe_address, 7) balances = balance_service.get_usd_balances(safe_address) self.assertEqual(len(balances), 1) self.assertIsNone(balances[0].token_address) self.assertEqual(balances[0].balance, value) tokens_value = int(12 * 1e18) erc20 = deploy_erc20(self.w3, 'Eurodollar', 'EUD', safe_address, tokens_value) balances = balance_service.get_usd_balances(safe_address) self.assertEqual(len(balances), 1) EthereumEventFactory(address=erc20.address, to=safe_address) balances = balance_service.get_usd_balances(safe_address) token_info = balance_service.get_token_info(erc20.address) self.assertCountEqual(balances, [ BalanceWithFiat(None, None, value, 0.0, 123.4), BalanceWithFiat( erc20.address, token_info, tokens_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4) ) ]) balances = balance_service.get_usd_balances(safe_address, only_trusted=True) self.assertCountEqual(balances, [ BalanceWithFiat(None, None, value, 0.0, 123.4), ]) Token.objects.filter(address=erc20.address).update(trusted=True, spam=False) balances = balance_service.get_usd_balances(safe_address, only_trusted=True) self.assertCountEqual(balances, [ BalanceWithFiat(None, None, value, 0.0, 123.4), BalanceWithFiat( erc20.address, token_info, tokens_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4) ) ]) # Test sorting erc20_2 = deploy_erc20(self.w3, 'Peseta', 'PTA', safe_address, tokens_value) token_info_2 = balance_service.get_token_info(erc20_2.address) erc20_3 = deploy_erc20(self.w3, 'Double Dollars', 'DD', safe_address, tokens_value) token_info_3 = balance_service.get_token_info(erc20_3.address) EthereumEventFactory(address=erc20_2.address, to=safe_address) EthereumEventFactory(address=erc20_3.address, to=safe_address) balances = balance_service.get_usd_balances(safe_address) token_info = balance_service.get_token_info(erc20.address) self.assertCountEqual(balances, [ BalanceWithFiat(None, None, value, 0.0, 123.4), BalanceWithFiat( erc20_3.address, token_info_3, tokens_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4) ), BalanceWithFiat( erc20.address, token_info, tokens_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4) ), BalanceWithFiat( erc20_2.address, token_info_2, tokens_value, round(123.4 * 0.4 * (tokens_value / 1e18), 4), round(123.4 * 0.4, 4) ), ])