def test_writting_fetching_data(data_dir, username): msg_aggregator = MessagesAggregator() data = DataHandler(data_dir, msg_aggregator) data.unlock(username, '123', create_new=True) tokens = [A_GNO, A_RDN] data.write_owned_eth_tokens(tokens) result = data.db.get_owned_tokens() assert set(tokens) == set(result) data.add_blockchain_account(SupportedBlockchain.BITCOIN, '1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS') data.add_blockchain_account( SupportedBlockchain.ETHEREUM, '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', ) # Add a non checksummed address data.add_blockchain_account( SupportedBlockchain.ETHEREUM, '0x80b369799104a47e98a553f3329812a44a7facdc', ) accounts = data.db.get_blockchain_accounts() assert isinstance(accounts, BlockchainAccounts) assert accounts.btc == ['1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS'] # See that after addition the address has been checksummed assert set(accounts.eth) == set([ '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', to_checksum_address('0x80b369799104a47e98a553f3329812a44a7facdc'), ]) # Add existing account should fail with pytest.raises(sqlcipher.IntegrityError): # pylint: disable=no-member data.add_blockchain_account( SupportedBlockchain.ETHEREUM, '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', ) # Remove non-existing account with pytest.raises(InputError): data.remove_blockchain_account( SupportedBlockchain.ETHEREUM, '0x136029d76af6fE4A356528e4Dc66B2C18123597D', ) # Remove existing account data.remove_blockchain_account( SupportedBlockchain.ETHEREUM, '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', ) accounts = data.db.get_blockchain_accounts() assert accounts.eth == [ to_checksum_address('0x80b369799104a47e98a553f3329812a44a7facdc') ] result, _ = data.add_ignored_asset('DAO') assert result result, _ = data.add_ignored_asset('DOGE') assert result result, _ = data.add_ignored_asset('DOGE') assert not result # Test adding non existing asset result, msg = data.add_ignored_asset('dsajdhskajdad') assert not result assert 'for ignoring is not known/supported' in msg ignored_assets = data.db.get_ignored_assets() assert all([isinstance(asset, Asset) for asset in ignored_assets]) assert set(ignored_assets) == set([A_DAO, A_DOGE]) # Test removing asset that is not in the list result, msg = data.remove_ignored_asset('RDN') assert 'not in ignored assets' in msg # Test removing non existing asset result, msg = data.remove_ignored_asset('dshajdhsjkahdjssad') assert 'is not known/supported' in msg assert not result result, _ = data.remove_ignored_asset('DOGE') assert result assert data.db.get_ignored_assets() == ['DAO'] # With nothing inserted in settings make sure default values are returned result = data.db.get_settings() last_write_diff = ts_now() - result['last_write_ts'] # make sure last_write was within 3 secs assert last_write_diff >= 0 and last_write_diff < 3 del result['last_write_ts'] assert result == { 'historical_data_start': DEFAULT_START_DATE, 'eth_rpc_endpoint': 'http://localhost:8545', 'ui_floating_precision': DEFAULT_UI_FLOATING_PRECISION, 'db_version': ROTKEHLCHEN_DB_VERSION, 'include_crypto2crypto': DEFAULT_INCLUDE_CRYPTO2CRYPTO, 'include_gas_costs': DEFAULT_INCLUDE_GAS_COSTS, 'taxfree_after_period': YEAR_IN_SECONDS, 'balance_save_frequency': DEFAULT_BALANCE_SAVE_FREQUENCY, 'last_balance_save': 0, 'main_currency': DEFAULT_MAIN_CURRENCY, 'anonymized_logs': DEFAULT_ANONYMIZED_LOGS, 'date_display_format': DEFAULT_DATE_DISPLAY_FORMAT, 'last_data_upload_ts': 0, 'premium_should_sync': False, } # Check setting non-existing settings. Should be ignored success, msg = data.set_settings({'nonexisting_setting': 1}, accountant=None) assert success assert msg != '' and 'nonexisting_setting' in msg _, msg = data.set_settings( { 'nonexisting_setting': 1, 'eth_rpc_endpoint': 'http://localhost:8555', 'ui_floating_precision': 3, }, accountant=None) assert msg != '' and 'nonexisting_setting' in msg # Now check nothing funny made it in the db result = data.db.get_settings() assert result['eth_rpc_endpoint'] == 'http://localhost:8555' assert result['ui_floating_precision'] == 3 assert 'nonexisting_setting' not in result
def test_writting_fetching_data(data_dir, username): data = DataHandler(data_dir) data.unlock(username, '123', create_new=True) tokens = ['GNO', 'RDN'] data.write_owned_eth_tokens(tokens) result = data.db.get_owned_tokens() assert set(tokens) == set(result) data.add_blockchain_account('BTC', '1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS') data.add_blockchain_account('ETH', '0xd36029d76af6fE4A356528e4Dc66B2C18123597D') data.add_blockchain_account('ETH', '0x80b369799104a47e98a553f3329812a44a7facdc') accounts = data.db.get_blockchain_accounts() assert isinstance(accounts, BlockchainAccounts) assert accounts.btc == ['1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS'] assert set(accounts.eth) == set([ '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', to_checksum_address('0x80b369799104a47e98a553f3329812a44a7facdc') ]) # Add existing account should fail with pytest.raises(sqlcipher.IntegrityError): # pylint: disable=no-member data.add_blockchain_account( 'ETH', '0xd36029d76af6fE4A356528e4Dc66B2C18123597D') # Remove non-existing account with pytest.raises(InputError): data.remove_blockchain_account( 'ETH', '0x136029d76af6fE4A356528e4Dc66B2C18123597D') # Remove existing account data.remove_blockchain_account( 'ETH', '0xd36029d76af6fE4A356528e4Dc66B2C18123597D') accounts = data.db.get_blockchain_accounts() assert accounts.eth == [ to_checksum_address('0x80b369799104a47e98a553f3329812a44a7facdc') ] result, _ = data.add_ignored_asset('DAO') assert result result, _ = data.add_ignored_asset('DOGE') assert result result, _ = data.add_ignored_asset('DOGE') assert not result assert set(data.db.get_ignored_assets()) == set(['DAO', 'DOGE']) result, _ = data.remove_ignored_asset('XXX') assert not result result, _ = data.remove_ignored_asset('DOGE') assert result assert data.db.get_ignored_assets() == ['DAO'] # With nothing inserted in settings make sure default values are returned result = data.db.get_settings() last_write_diff = ts_now() - result['last_write_ts'] # make sure last_write was within 3 secs assert last_write_diff >= 0 and last_write_diff < 3 del result['last_write_ts'] assert result == { 'historical_data_start': DEFAULT_START_DATE, 'eth_rpc_port': '8545', 'ui_floating_precision': DEFAULT_UI_FLOATING_PRECISION, 'db_version': ROTKEHLCHEN_DB_VERSION, 'include_crypto2crypto': DEFAULT_INCLUDE_CRYPTO2CRYPTO, 'include_gas_costs': DEFAULT_INCLUDE_GAS_COSTS, 'taxfree_after_period': YEAR_IN_SECONDS, 'balance_save_frequency': DEFAULT_BALANCE_SAVE_FREQUENCY, 'last_balance_save': 0, 'main_currency': DEFAULT_MAIN_CURRENCY, 'anonymized_logs': DEFAULT_ANONYMIZED_LOGS, } # Check setting non-existing settings. Should be ignored success, msg = data.set_settings({'nonexisting_setting': 1}, accountant=None) assert success assert msg != '' and 'nonexisting_setting' in msg _, msg = data.set_settings( { 'nonexisting_setting': 1, 'eth_rpc_port': '8555', 'ui_floating_precision': 3, }, accountant=None) assert msg != '' and 'nonexisting_setting' in msg # Now check nothing funny made it in the db result = data.db.get_settings() assert result['eth_rpc_port'] == '8555' assert result['ui_floating_precision'] == 3 assert 'nonexisting_setting' not in result
def test_writting_fetching_data(data_dir, username): data = DataHandler(data_dir) data.unlock(username, '123', create_new=True) tokens = ['GNO', 'RDN'] data.write_owned_eth_tokens(tokens) result = data.db.get_owned_tokens() assert set(tokens) == set(result) data.add_blockchain_account('BTC', '1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS') data.add_blockchain_account('ETH', '0xd36029d76af6fE4A356528e4Dc66B2C18123597D') data.add_blockchain_account('ETH', '0x80b369799104a47e98a553f3329812a44a7facdc') accounts = data.db.get_blockchain_accounts() assert len(accounts) == 2 assert accounts['BTC'] == ['1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS'] assert set(accounts['ETH']) == set([ '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', '0x80b369799104a47e98a553f3329812a44a7facdc' ]) # Add existing account should fail with pytest.raises(sqlcipher.IntegrityError): data.add_blockchain_account( 'ETH', '0xd36029d76af6fE4A356528e4Dc66B2C18123597D') # Remove non-existing account with pytest.raises(InputError): data.remove_blockchain_account( 'ETH', '0x136029d76af6fE4A356528e4Dc66B2C18123597D') # Remove existing account data.remove_blockchain_account( 'ETH', '0xd36029d76af6fE4A356528e4Dc66B2C18123597D') accounts = data.db.get_blockchain_accounts() assert accounts['ETH'] == ['0x80b369799104a47e98a553f3329812a44a7facdc'] result, _ = data.add_ignored_asset('DAO') assert result result, _ = data.add_ignored_asset('DOGE') assert result result, _ = data.add_ignored_asset('DOGE') assert not result assert set(data.db.get_ignored_assets()) == set(['DAO', 'DOGE']) result, _ = data.remove_ignored_asset('XXX') assert not result result, _ = data.remove_ignored_asset('DOGE') assert result assert data.db.get_ignored_assets() == ['DAO'] # With nothing inserted in settings make sure default values are returned result = data.db.get_settings() last_write_diff = ts_now() - result['last_write_ts'] # make sure last_write was within 3 secs assert last_write_diff >= 0 and last_write_diff < 3 del result['last_write_ts'] assert result == { 'historical_data_start': DEFAULT_START_DATE, 'eth_rpc_port': '8545', 'ui_floating_precision': DEFAULT_UI_FLOATING_PRECISION, 'db_version': ROTKEHLCHEN_DB_VERSION } # Check setting non-existing settings. Should be ignored _, msg = data.set_settings({'nonexisting_setting': 1}, accountant=None) assert msg != '' and 'nonexisting_setting' in msg _, msg = data.set_settings( { 'nonexisting_setting': 1, 'eth_rpc_port': '8555', 'ui_floating_precision': 3, }, accountant=None) assert msg != '' and 'nonexisting_setting' in msg # Now check nothing funny made it in the db result = data.db.get_settings() assert result['eth_rpc_port'] == '8555' assert result['ui_floating_precision'] == 3 assert 'nonexisting_setting' not in result