def test_writing_fetching_data(data_dir, username): msg_aggregator = MessagesAggregator() data = DataHandler(data_dir, msg_aggregator) data.unlock(username, '123', create_new=True) data.db.add_blockchain_accounts( SupportedBlockchain.BITCOIN, [BlockchainAccountData(address='1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS')], ) data.db.add_blockchain_accounts( SupportedBlockchain.ETHEREUM, [ BlockchainAccountData( address='0xd36029d76af6fE4A356528e4Dc66B2C18123597D'), BlockchainAccountData( address='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) == { '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', '0x80B369799104a47e98A553f3329812a44A7FaCDc', } # Add existing account should fail with pytest.raises(InputError): # pylint: disable=no-member data.db.add_blockchain_accounts( SupportedBlockchain.ETHEREUM, [ BlockchainAccountData( address='0xd36029d76af6fE4A356528e4Dc66B2C18123597D') ], ) # Remove non-existing account with pytest.raises(InputError): data.db.remove_blockchain_accounts( SupportedBlockchain.ETHEREUM, ['0x136029d76af6fE4A356528e4Dc66B2C18123597D'], ) # Remove existing account data.db.remove_blockchain_accounts( SupportedBlockchain.ETHEREUM, ['0xd36029d76af6fE4A356528e4Dc66B2C18123597D'], ) accounts = data.db.get_blockchain_accounts() assert accounts.eth == ['0x80B369799104a47e98A553f3329812a44A7FaCDc'] result, _ = data.add_ignored_assets([A_DAO]) assert result result, _ = data.add_ignored_assets([A_DOGE]) assert result result, _ = data.add_ignored_assets([A_DOGE]) assert result is None ignored_assets = data.db.get_ignored_assets() assert all(isinstance(asset, Asset) for asset in ignored_assets) assert set(ignored_assets) == {A_DAO, A_DOGE} # Test removing asset that is not in the list result, msg = data.remove_ignored_assets([A_RDN]) assert 'not in ignored assets' in msg assert result is None result, _ = data.remove_ignored_assets([A_DOGE]) assert result assert data.db.get_ignored_assets() == [A_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 0 <= last_write_diff < 3 expected_dict = { 'have_premium': False, 'eth_rpc_endpoint': 'http://localhost:8545', 'ksm_rpc_endpoint': 'http://localhost:9933', 'dot_rpc_endpoint': '', 'ui_floating_precision': DEFAULT_UI_FLOATING_PRECISION, '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.identifier, 'date_display_format': DEFAULT_DATE_DISPLAY_FORMAT, 'last_data_upload_ts': 0, 'premium_should_sync': False, 'submit_usage_analytics': True, 'last_write_ts': 0, 'active_modules': DEFAULT_ACTIVE_MODULES, 'frontend_settings': '', 'account_for_assets_movements': DEFAULT_ACCOUNT_FOR_ASSETS_MOVEMENTS, 'btc_derivation_gap_limit': DEFAULT_BTC_DERIVATION_GAP_LIMIT, 'calculate_past_cost_basis': DEFAULT_CALCULATE_PAST_COST_BASIS, 'display_date_in_localtime': DEFAULT_DISPLAY_DATE_IN_LOCALTIME, 'current_price_oracles': DEFAULT_CURRENT_PRICE_ORACLES, 'historical_price_oracles': DEFAULT_HISTORICAL_PRICE_ORACLES, 'taxable_ledger_actions': DEFAULT_TAXABLE_LEDGER_ACTIONS, 'pnl_csv_with_formulas': DEFAULT_PNL_CSV_WITH_FORMULAS, 'pnl_csv_have_summary': DEFAULT_PNL_CSV_HAVE_SUMMARY, 'ssf_0graph_multiplier': DEFAULT_SSF_0GRAPH_MULTIPLIER, 'last_data_migration': DEFAULT_LAST_DATA_MIGRATION, 'non_syncing_exchanges': [], } assert len(expected_dict) == len( DBSettings()), 'One or more settings are missing' # Make sure that results are the same. Comparing like this since we ignore last # write ts check result_dict = result._asdict() for key, value in expected_dict.items(): assert key in result_dict if key != 'last_write_ts': assert value == result_dict[key]
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.db.add_blockchain_accounts( SupportedBlockchain.BITCOIN, [BlockchainAccountData(address='1CB7Pbji3tquDtMRp8mBkerimkFzWRkovS')], ) data.db.add_blockchain_accounts( SupportedBlockchain.ETHEREUM, [ BlockchainAccountData( address='0xd36029d76af6fE4A356528e4Dc66B2C18123597D'), BlockchainAccountData( address='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) == { '0xd36029d76af6fE4A356528e4Dc66B2C18123597D', '0x80B369799104a47e98A553f3329812a44A7FaCDc', } # Add existing account should fail with pytest.raises(sqlcipher.IntegrityError): # pylint: disable=no-member data.db.add_blockchain_accounts( SupportedBlockchain.ETHEREUM, [ BlockchainAccountData( address='0xd36029d76af6fE4A356528e4Dc66B2C18123597D') ], ) # Remove non-existing account with pytest.raises(InputError): data.db.remove_blockchain_accounts( SupportedBlockchain.ETHEREUM, ['0x136029d76af6fE4A356528e4Dc66B2C18123597D'], ) # Remove existing account data.db.remove_blockchain_accounts( SupportedBlockchain.ETHEREUM, ['0xd36029d76af6fE4A356528e4Dc66B2C18123597D'], ) accounts = data.db.get_blockchain_accounts() assert accounts.eth == ['0x80B369799104a47e98A553f3329812a44A7FaCDc'] result, _ = data.add_ignored_assets([A_DAO]) assert result result, _ = data.add_ignored_assets([A_DOGE]) assert result result, _ = data.add_ignored_assets([A_DOGE]) assert not result ignored_assets = data.db.get_ignored_assets() assert all(isinstance(asset, Asset) for asset in ignored_assets) assert set(ignored_assets) == {A_DAO, A_DOGE} # Test removing asset that is not in the list result, msg = data.remove_ignored_assets([A_RDN]) assert 'not in ignored assets' in msg assert not result result, _ = data.remove_ignored_assets([A_DOGE]) assert result assert data.db.get_ignored_assets() == [A_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 expected_dict = { 'have_premium': False, 'historical_data_start': DEFAULT_START_DATE, 'eth_rpc_endpoint': 'http://localhost:8545', 'ui_floating_precision': DEFAULT_UI_FLOATING_PRECISION, '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.identifier, 'anonymized_logs': DEFAULT_ANONYMIZED_LOGS, 'date_display_format': DEFAULT_DATE_DISPLAY_FORMAT, 'last_data_upload_ts': 0, 'premium_should_sync': False, 'submit_usage_analytics': True, 'last_write_ts': 0, } assert len(expected_dict) == len( DBSettings()), 'One or more settings are missing' # Make sure that results are the same. Comparing like this since we ignore last # write ts check result_dict = result._asdict() for key, value in expected_dict.items(): assert key in result_dict if key != 'last_write_ts': assert value == result_dict[key]