added fix for #1533

This commit is contained in:
Lex Berezhny 2018-11-05 23:29:34 -05:00
parent 90e06abba2
commit 0ae5f1a4c6
2 changed files with 76 additions and 33 deletions

View file

@ -2207,19 +2207,14 @@ class Daemon(AuthJSONRPCServer):
available = await account.get_balance() available = await account.get_balance()
if amount >= available: if amount >= available:
# TODO: add check for existing claim balance existing_claims = await account.get_claims(claim_name=name)
#balance = yield self.wallet.get_max_usable_balance_for_claim(name) if len(existing_claims) == 1:
#max_bid_amount = balance - MAX_UPDATE_FEE_ESTIMATE available += existing_claims[0].get_estimator(self.ledger).effective_amount
#if balance <= MAX_UPDATE_FEE_ESTIMATE: if amount >= available:
raise InsufficientFundsError( raise InsufficientFundsError(
"Insufficient funds, please deposit additional LBC. Minimum additional LBC needed {}" f"Please lower the bid value, the maximum amount "
.format(round((amount - available) / COIN + 0.01, 2)) f"you can specify for this claim is {dewies_to_lbc(available)}."
) )
# .format(MAX_UPDATE_FEE_ESTIMATE - balance))
#elif bid > max_bid_amount:
# raise InsufficientFundsError(
# "Please lower the bid value, the maximum amount you can specify for this claim is {}."
# .format(max_bid_amount))
metadata = metadata or {} metadata = metadata or {}
if fee is not None: if fee is not None:

View file

@ -172,6 +172,22 @@ class CommandTestCase(IntegrationTestCase):
await self.generate(1) await self.generate(1)
await self.on_transaction_id(txid) await self.on_transaction_id(txid)
async def on_transaction_dict(self, tx):
await asyncio.wait([
self.ledger.on_transaction.where(
partial(lambda address, event: address == event.address, address)
) for address in self.get_all_addresses(tx)
])
@staticmethod
def get_all_addresses(tx):
addresses = set()
for txi in tx['inputs']:
addresses.add(txi['address'])
for txo in tx['outputs']:
addresses.add(txo['address'])
return list(addresses)
async def generate(self, blocks): async def generate(self, blocks):
""" Ask lbrycrd to generate some blocks and wait until ledger has them. """ """ Ask lbrycrd to generate some blocks and wait until ledger has them. """
await self.blockchain.generate(blocks) await self.blockchain.generate(blocks)
@ -529,37 +545,71 @@ class PublishCommand(CommandTestCase):
channel_name='@baz', channel_account_id=[account1_id] channel_name='@baz', channel_account_id=[account1_id]
)) ))
async def test_updating_claim_includes_claim_value_in_balance_check(self):
self.assertEqual('10.0', await self.daemon.jsonrpc_account_balance())
# create the initial name claim
with tempfile.NamedTemporaryFile() as file:
file.write(b'hi!')
file.flush()
claim = await self.out(self.daemon.jsonrpc_publish(
'hovercraft', '9.0', file_path=file.name
))
self.assertTrue(claim['success'])
await self.on_transaction_dict(claim['tx'])
await self.generate(1)
self.assertEqual('0.979893', await self.daemon.jsonrpc_account_balance())
# update the claim first time
with tempfile.NamedTemporaryFile() as file:
file.write(b'hi!')
file.flush()
claim = await self.out(self.daemon.jsonrpc_publish(
'hovercraft', '9.0', file_path=file.name
))
self.assertTrue(claim['success'])
await self.on_transaction_dict(claim['tx'])
await self.generate(1)
self.assertEqual('0.9796205', await self.daemon.jsonrpc_account_balance())
# update the claim a second time but use even more funds
with tempfile.NamedTemporaryFile() as file:
file.write(b'hi!')
file.flush()
claim = await self.out(self.daemon.jsonrpc_publish(
'hovercraft', '9.97', file_path=file.name
))
self.assertTrue(claim['success'])
await self.on_transaction_dict(claim['tx'])
await self.generate(1)
self.assertEqual('0.009348', await self.daemon.jsonrpc_account_balance())
class SupportingSupports(CommandTestCase): class SupportingSupports(CommandTestCase):
VERBOSITY = logging.INFO VERBOSITY = logging.INFO
async def on_transaction_dict(self, tx):
await asyncio.wait([
self.ledger.on_transaction.where(
partial(lambda address, event: address == event.address, address)
) for address in self.get_all_addresses(tx)
])
@staticmethod
def get_all_addresses(tx):
addresses = set()
for txi in tx['inputs']:
addresses.add(txi['address'])
for txo in tx['outputs']:
addresses.add(txo['address'])
return list(addresses)
async def test_regular_supports_and_tip_supports(self): async def test_regular_supports_and_tip_supports(self):
# account2 will be used to send tips and supports to account1 # account2 will be used to send tips and supports to account1
account2_id = (await self.daemon.jsonrpc_account_create('second account'))['id'] account2_id = (await self.daemon.jsonrpc_account_create('second account'))['id']
# give account2 some spending LBC # send account2 5 LBC out of the 10 LBC in account1
result = await self.out(self.daemon.jsonrpc_wallet_send( result = await self.out(self.daemon.jsonrpc_wallet_send(
'5.0', await self.daemon.jsonrpc_address_unused(account2_id) '5.0', await self.daemon.jsonrpc_address_unused(account2_id)
)) ))
await self.confirm_tx(result['txid']) await self.confirm_tx(result['txid'])
# account1 and account2 balances:
self.assertEqual('4.999876', await self.daemon.jsonrpc_account_balance())
self.assertEqual('5.0', await self.daemon.jsonrpc_account_balance(account2_id))
# create the claim we'll be tipping and supporting # create the claim we'll be tipping and supporting
with tempfile.NamedTemporaryFile() as file: with tempfile.NamedTemporaryFile() as file:
file.write(b'hi!') file.write(b'hi!')
@ -617,9 +667,7 @@ class SupportingSupports(CommandTestCase):
self.assertEqual('1.999717', await self.daemon.jsonrpc_account_balance(account2_id)) self.assertEqual('1.999717', await self.daemon.jsonrpc_account_balance(account2_id))
# verify that the outgoing support is marked correctly as is_tip=False in account2 # verify that the outgoing support is marked correctly as is_tip=False in account2
txs2 = await self.out( txs2 = await self.out(self.daemon.jsonrpc_transaction_list(account2_id))
self.daemon.jsonrpc_transaction_list(account2_id)
)
self.assertEqual(len(txs2[0]['support_info']), 1) self.assertEqual(len(txs2[0]['support_info']), 1)
self.assertEqual(txs2[0]['support_info'][0]['balance_delta'], '-2.0') self.assertEqual(txs2[0]['support_info'][0]['balance_delta'], '-2.0')
self.assertEqual(txs2[0]['support_info'][0]['claim_id'], claim['claim_id']) self.assertEqual(txs2[0]['support_info'][0]['claim_id'], claim['claim_id'])