def test_get_user_account_assets(dbsession, registry, mock_eth_service, eth_network_id, eth_asset_id): """get_user_assets() gives sane results.""" with transaction.manager: user = create_user(dbsession, registry) setup_user_account(user) mock_create_addresses(mock_eth_service, dbsession) # Play around with user accounts with transaction.manager: # No accounts yet assert UserCryptoAddress.get_user_asset_accounts(user) == [] # User gets a deposit, an account gets created user = dbsession.query(User).first() network = dbsession.query(AssetNetwork).get(eth_network_id) asset = dbsession.query(Asset).get(eth_asset_id) address = UserCryptoAddress.get_default(user, network) account = address.address.get_or_create_account(asset) account.account.do_withdraw_or_deposit(Decimal("+10"), "Top up") current_accounts = UserCryptoAddress.get_user_asset_accounts(user) assert len(current_accounts) == 1 current_address, current_account = current_accounts[0] assert current_account == account assert current_address == address
def test_get_user_account_assets(dbsession, registry, mock_eth_service, eth_network_id, eth_asset_id): """get_user_assets() gives sane results.""" with transaction.manager: user = create_user(dbsession, registry) setup_user_account(user, do_mainnet=True) mock_create_addresses(mock_eth_service, dbsession) # Play around with user accounts with transaction.manager: # No accounts yet assert UserCryptoAddress.get_user_asset_accounts(user) == [] # User gets a deposit, an account gets created user = dbsession.query(User).first() network = dbsession.query(AssetNetwork).get(eth_network_id) asset = dbsession.query(Asset).get(eth_asset_id) address = UserCryptoAddress.get_default(user, network) account = address.address.get_or_create_account(asset) account.account.do_withdraw_or_deposit(Decimal("+10"), "Top up") current_accounts = UserCryptoAddress.get_user_asset_accounts(user) assert len(current_accounts) == 1 current_address, current_account = current_accounts[0] assert current_account == account assert current_address == address
def test_starter_token(dbsession, registry, eth_network_id, web3: Web3, eth_service: EthereumService, house_address, toybox): """See that a fresh user account is supplied with some play assets.""" with transaction.manager: user = create_user(dbsession, registry) setup_user_account(user) # Let all the events completed success, fail = eth_service.run_event_cycle() assert success == 1 assert fail == 0 # We need another event cycle to process the initial asset transfers with transaction.manager: user = dbsession.query(User).first() opid = user.user_data["starter_asset_txs"][0]["toybox"] assert opid wait_for_op_confirmations(eth_service, opid) # Let the transfer come through eth_service.run_event_cycle() # Make sure we confirm the deposit with transaction.manager: user = dbsession.query(User).first() user_depo = user.owned_crypto_operations.join(CryptoOperation).filter_by(operation_type=CryptoOperationType.deposit).first() opid = user_depo.crypto_operation.id wait_for_op_confirmations(eth_service, opid) with transaction.manager: # Sanity check our token contract posts us logs user = dbsession.query(User).first() client = get_rpc_client(web3) asset = dbsession.query(Asset).get(toybox) address = bin_to_eth_address(asset.external_id) network = dbsession.query(AssetNetwork).get(eth_network_id) user_address = UserCryptoAddress.get_default(user, network).address house_address = dbsession.query(CryptoAddress).get(house_address) house = bin_to_eth_address(house_address.address) token = Token.get(web3, address) # Check we correctly resolved low level logs token_logs = client.get_logs(from_block=0, address=[address]) wallet_logs = client.get_logs(from_block=0, address=[house]) assert len(token_logs) > 0 assert len(wallet_logs) > 0 # Check contract state matches assert token.contract.call().balanceOf(house) == 9990 assert token.contract.call().balanceOf(bin_to_eth_address(user_address.address)) == 10 # Check our internal book keeping matches assert house_address.get_account(asset).account.get_balance() == 9990 assert user_address.get_account(asset).account.get_balance() == 10
def test_starter_token(dbsession, registry, eth_network_id, web3: Web3, eth_service: EthereumService, house_address, toybox): """See that a fresh user account is supplied with some play assets.""" with transaction.manager: user = create_user(dbsession, registry) setup_user_account(user, do_mainnet=True) # Let all the events completed success, fail = eth_service.run_event_cycle() assert success == 1 assert fail == 0 # We need another event cycle to process the initial asset transfers with transaction.manager: user = dbsession.query(User).first() opid = user.user_data["starter_asset_txs"][0]["toybox"] assert opid wait_for_op_confirmations(eth_service, opid) # Let the transfer come through eth_service.run_event_cycle() # Make sure we confirm the deposit with transaction.manager: user = dbsession.query(User).first() user_depo = user.owned_crypto_operations.join( CryptoOperation).filter_by( operation_type=CryptoOperationType.deposit).first() opid = user_depo.crypto_operation.id wait_for_op_confirmations(eth_service, opid) with transaction.manager: # Sanity check our token contract posts us logs user = dbsession.query(User).first() client = get_rpc_client(web3) asset = dbsession.query(Asset).get(toybox) address = bin_to_eth_address(asset.external_id) network = dbsession.query(AssetNetwork).get(eth_network_id) user_address = UserCryptoAddress.get_default(user, network).address house_address = dbsession.query(CryptoAddress).get(house_address) house = bin_to_eth_address(house_address.address) token = Token.get(web3, address) # Check we correctly resolved low level logs token_logs = client.get_logs(from_block=0, address=[address]) wallet_logs = client.get_logs(from_block=0, address=[house]) assert len(token_logs) > 0 assert len(wallet_logs) > 0 # Check contract state matches assert token.contract.call().balanceOf(house) == 9990 assert token.contract.call().balanceOf( bin_to_eth_address(user_address.address)) == 10 # Check our internal book keeping matches assert house_address.get_account(asset).account.get_balance() == 9990 assert user_address.get_account(asset).account.get_balance() == 10