def mock_get_settings() -> DBSettings: settings = DBSettings( active_modules=ethereum_modules, eth_rpc_endpoint=eth_rpc_endpoint, ksm_rpc_endpoint=ksm_rpc_endpoint, ) return settings
def test_report_settings(database): dbreport = DBAccountingReports(database) settings = DBSettings( main_currency=A_GBP, calculate_past_cost_basis=False, include_gas_costs=False, account_for_assets_movements=True, pnl_csv_have_summary=False, pnl_csv_with_formulas=True, taxfree_after_period=15, ) start_ts = 1 first_processed_timestamp = 4 last_processed_timestamp = 9 end_ts = 10 report_id = dbreport.add_report( first_processed_timestamp=first_processed_timestamp, start_ts=start_ts, end_ts=end_ts, settings=settings, ) total_actions = 10 processed_actions = 2 dbreport.add_report_overview( report_id=report_id, last_processed_timestamp=last_processed_timestamp, processed_actions=processed_actions, total_actions=total_actions, pnls=PnlTotals(), ) data, entries_num = dbreport.get_reports(report_id=report_id, with_limit=False) assert len(data) == 1 assert entries_num == 1 report = data[0] assert report['identifier'] == report_id assert report['start_ts'] == start_ts assert report['first_processed_timestamp'] == first_processed_timestamp assert report['last_processed_timestamp'] == last_processed_timestamp assert report['processed_actions'] == processed_actions assert report['total_actions'] == total_actions returned_settings = report['settings'] assert len(returned_settings) == 6 for x in ('account_for_assets_movements', 'calculate_past_cost_basis', 'include_crypto2crypto', 'include_gas_costs', 'profit_currency', 'taxfree_after_period'): # noqa: E501 setting_name = 'main_currency' if x == 'profit_currency' else x assert returned_settings[x] == getattr(settings, setting_name)
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]
def mock_get_settings() -> DBSettings: settings = DBSettings(active_modules=ethereum_modules) return settings